public override void print(Output @out) { List <Expression> args = new List <Expression>(arguments.Length); if (isMethodCall()) { Expression obj = function.getTable(); if (obj.isClosure() || obj.isConstant()) { @out.print("("); obj.print(@out); @out.print(")"); } else { obj.print(@out); } @out.print(":"); @out.print(function.getField()); for (int i = 1; i < arguments.Length; i++) { args.Add(arguments[i]); } } else { if (function.isClosure() || function.isConstant()) { @out.print("("); function.print(@out); @out.print(")"); } else { function.print(@out); } for (int i = 0; i < arguments.Length; i++) { args.Add(arguments[i]); } } @out.print("("); Expression.printSequence(@out, args, false, true); @out.print(")"); }