@Override public void visit(MacroCall node) { // make sure access is always global (no restriction) code.append("::"); code.append(node.getName()); code.append("("); for (Expression arg : node.getArguments()) { arg.accept(this); code.append(", "); } if (node.getArguments().size() > 0) { code.delete(code.length() - 2, code.length()); } code.append(")"); }
return new MacroCall(name, args);
@Override public void visit(MacroCall node) { ArrayList<Expression> newArgs = new ArrayList<Expression>(node.getArguments().size()); for (Expression arg: node.getArguments()) { arg.accept(this); if (result == null) newArgs.add(arg); else { newArgs.add(result); result = null; } } node.setArgs(newArgs); }
@Override public void visit(MacroCall node) { node.setCaller(caller); for (Expression arg : node.getArguments()) { arg.accept(this); } } }
@Override public void visit(MacroCall node) { String macroCallName = node.getName(); if (f.name().toLowerCase().equals(macroCallName.toLowerCase())) { result = new MathFunctionCall(node.getArguments().get(0), f); return; StringIntContainer container = new StringIntContainer(macroCallName, node.getArguments().size()); if (!macros.containsKey(container)) { System.err.println("Macro "+macroCallName+" is not defined!"); graph.unknownMacros.add(new UnknownMacroCall(node, currentColorNode)); ArrayList<Expression> newArgs = new ArrayList<Expression>(node.getArguments().size()); for (Expression arg: node.getArguments()) { if (!((arg instanceof Variable) || (arg instanceof FloatConstant))) { Variable newVariable = createNewVariable(); newArgs.add(arg); node.setArgs(newArgs); return; for (Expression e: node.getArguments()) { replaceMap.put("_P("+index+")", e); index++;
@Override public void visit(MacroCall node) { for (Expression arg : node.getArguments()) { arg.accept(this); } }
@Override public void visit(MacroCall node) { throw new IllegalStateException("Macros should have been inlined"+node.getName()); } }
@Override public void visit(MacroCall node) { for (Expression arg : node.getArguments()) { arg.accept(this); } }
private void drawUnknownMacros(LinkedList<UnknownMacroCall> unknownMacros) { for (UnknownMacroCall unknownMacroCall: unknownMacros) { MacroCall macroCall = unknownMacroCall.macroCall; Color color = getColor(unknownMacroCall.colorNode); String name = macroCall.getName(); if (name.equals("DrawArrow")) { drawArrow(macroCall.getArguments(), color); } else if (name.equals("DrawLine")) { drawLine(macroCall.getArguments(), color); } else if (name.equals("DrawTriangle")) { drawTriangle(macroCall.getArguments(), color); } else System.out.println("Unknown macro: "+name); } }
@Override public void visit(MacroCall node) { for (Expression e: node.getArguments()) e.accept(this); super.visit(node); }
return new MacroCall(name, args);
@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); }
graph.addLocalVariable(new Variable(prefix + "POINT")); AssignmentNode pointNode = new AssignmentNode(graph, visualizationPoint, new MacroCall("createPoint", args)); graph.getStartNode().insertAfter(pointNode);