package de.gaalop.cfg;
import java.util.ArrayList;
import java.util.List;
/**
* This visitor collects all nodes that store a result.
*/
public class FindStoreOutputNodes implements ControlFlowVisitor {
private List<StoreResultNode> nodes = new ArrayList<StoreResultNode>();
public List<StoreResultNode> getNodes() {
return nodes;
}
@Override
public void visit(StartNode node) {
node.getSuccessor().accept(this);
}
@Override
public void visit(AssignmentNode node) {
node.getSuccessor().accept(this);
}
@Override
public void visit(ExpressionStatement node) {
node.getSuccessor().accept(this);
}
@Override
public void visit(StoreResultNode node) {
nodes.add(node);
node.getSuccessor().accept(this);
}
@Override
public void visit(EndNode node) {
}
@Override
public void visit(IfThenElseNode node) {
node.getPositive().accept(this);
node.getNegative().accept(this);
node.getSuccessor().accept(this);
}
@Override
public void visit(LoopNode node) {
node.getBody().accept(this);
node.getSuccessor().accept(this);
}
@Override
public void visit(BreakNode breakNode) {
breakNode.getSuccessor().accept(this);
}
@Override
public void visit(BlockEndNode node) {
// nothing to do
}
@Override
public void visit(Macro node) {
node.getSuccessor().accept(this);
}
@Override
public void visit(ColorNode node) {
node.getSuccessor().accept(this);
}
}