public override MurMurVariable VisitMethodExpression([NotNull] MurMurParser.MethodExpressionContext context) { var name = context.WORD().GetText(); var paramContexts = context.@params()?.expression(); MurMurVariable[] parameters = null; if (paramContexts != null) { parameters = new MurMurVariable[paramContexts.Length]; for (int i = 0; i < parameters.Length; i++) { parameters[i] = Visit(paramContexts[i]); } } if (script.Globals.ContainsKey(name)) { try { return(Invoke(name, parameters)); } catch (Exception e) { throw new MurMurException(string.Format("Method '{0}' failed with the message: {1}", name, e.Message), context.start.Line); } } else { if (script.IgnoreUnknownMethods) { return(new MurMurVariable()); } else { throw new MurMurException(string.Format("Couldn't find any variable or method called {0}", name), context.start.Line); } } }
/// <summary> /// Visit a parse tree produced by the <c>methodExpression</c> /// labeled alternative in <see cref="MurMurParser.expression"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitMethodExpression([NotNull] MurMurParser.MethodExpressionContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by the <c>methodExpression</c> /// labeled alternative in <see cref="MurMurParser.expression"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitMethodExpression([NotNull] MurMurParser.MethodExpressionContext context) { }