package de.gaalop.dfg; import java.util.ArrayList; import java.util.List; import de.gaalop.cfg.SequentialNode; public class MacroCall extends Expression { private String name; private List<Expression> args; private boolean singleLine; private SequentialNode caller; public MacroCall(String name, List<Expression> args) { this.name = name; this.args = args; } public void setCaller(SequentialNode caller) { this.caller = caller; } public SequentialNode getCaller() { return caller; } public String getName() { return name; } public List<Expression> getArguments() { return args; } public void setArgs(List<Expression> args) { this.args = args; } public void setSingleLine() { this.singleLine = true; } public boolean isSingleLine() { return singleLine; } @Override public void accept(ExpressionVisitor visitor) { visitor.visit(this); } @Override public Expression copy() { // create a deep copy of args list List<Expression> newArgs = new ArrayList<Expression>(); for (Expression e : args) { newArgs.add(e.copy()); } return new MacroCall(name, newArgs); } @Override public void replaceExpression(Expression old, Expression newExpression) { for (int i = 0; i < args.size(); i++) { Expression arg = args.get(i); if (arg == old) { args.set(i, newExpression); } else { arg.replaceExpression(old, newExpression); } } } @Override public boolean isComposite() { return true; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(name); sb.append('('); int num = args.size(); int i = 0; for (Expression e : args) { sb.append(e); if (i < num - 1) { sb.append(','); } i++; } sb.append(')'); return sb.toString(); } }