package de.gaalop.cfg;
import java.util.ArrayList;
import java.util.List;
import de.gaalop.dfg.Expression;
public class Macro extends SequentialNode {
private String name;
private List<SequentialNode> body;
private Expression returnValue;
public Macro(ControlFlowGraph graph, String name, List<SequentialNode> body, Expression returnValue) {
super(graph);
this.name = name;
this.body = body;
this.returnValue = returnValue;
}
public String getName() {
return name;
}
public List<SequentialNode> getBody() {
return body;
}
public Expression getReturnValue() {
return returnValue;
}
@Override
public void accept(ControlFlowVisitor visitor) {
visitor.visit(this);
}
@Override
public Macro copyElements() {
List<SequentialNode> bodyCopy = new ArrayList<SequentialNode>();
for (SequentialNode node : body) {
bodyCopy.add(node.copy());
}
return new Macro(getGraph(), name, bodyCopy, returnValue.copy());
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Macro[");
sb.append("name=");
sb.append(name);
sb.append(",body={");
for (SequentialNode node : body) {
sb.append(node);
sb.append(";");
}
sb.append("}");
if (returnValue != null) {
sb.append(",returns ");
sb.append(returnValue);
}
sb.append("]");
return sb.toString();
}
}