public override void EnterMethodCall(FlyParser.MethodCallContext context) { var name = context.ID().GetText(); var expressions = context.expression().Reverse().ToArray(); // TODO: Improve builtin method checking switch (name) { case "print": foreach (var expr in expressions) { EnterExpression(expr); Code.Instructions.Add(OpCode.PRINT); } Code.Instructions.Add(OpCode.PRINT_LN); break; case "input": Code.Instructions.Add(OpCode.READ_LN); break; case "count": case "remove": case "insert": case "filter": case "mutate": case "foreach": foreach (var expr in expressions) { EnterExpression(expr); } Code.Builtin(name); break; default: foreach (var expr in expressions) { EnterExpression(expr); } Code.FunctionCall(name); break; } }
/// <summary> /// Exit a parse tree produced by <see cref="FlyParser.methodCall"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitMethodCall([NotNull] FlyParser.MethodCallContext context) { }