public FunctionDefinitionExpression(LuaParser.FuncbodyContext context, ScriptLoadingContext lcontext,
                                            ParserRuleContext declarationContext,
                                            bool pushSelfParam = false, Table globalContext = null)
            : base(context, lcontext)
        {
            var           parlist    = context.parlist();
            List <string> paramnames = new List <string>();

            if (pushSelfParam)
            {
                paramnames.Add("self");
            }


            if (parlist != null)
            {
                var namelist = parlist.namelist();

                if (namelist != null)
                {
                    paramnames.AddRange(namelist.NAME()
                                        .Select(t => t.GetText()));
                }
            }

            m_HasVarArgs = (parlist != null && parlist.vararg() != null);

            if (m_HasVarArgs)
            {
                paramnames.Add(WellKnownSymbols.VARARGS);
            }

            lcontext.Scope.PushFunction(this, m_HasVarArgs);

            if (globalContext != null)
            {
                m_GlobalEnv = globalContext;
                m_Env       = lcontext.Scope.TryDefineLocal(WellKnownSymbols.ENV);
            }
            else
            {
                lcontext.Scope.ForceEnvUpValue();
            }

            m_ParamNames = DefineArguments(paramnames, lcontext);

            m_Statement = NodeFactory.CreateStatement(context.block(), lcontext);

            m_StackFrame = lcontext.Scope.PopFunction();

            m_Begin = BuildSourceRef(declarationContext.Start, context.PAREN_CLOSE().Symbol);
            m_End   = BuildSourceRef(context.Stop, context.END());
        }
Exemplo n.º 2
0
 public void ExitFuncbody([NotNull] LuaParser.FuncbodyContext context)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 3
0
 public virtual void ExitFuncbody([NotNull] LuaParser.FuncbodyContext context)
 {
 }
Exemplo n.º 4
0
 public virtual Result VisitFuncbody([NotNull] LuaParser.FuncbodyContext context)
 {
     return(VisitChildren(context));
 }
Exemplo n.º 5
0
 public void EnterFuncbody([NotNull] LuaParser.FuncbodyContext context) => DefaultEnter(context);
Exemplo n.º 6
0
 public void ExitFuncbody([NotNull] LuaParser.FuncbodyContext context) => DefaultExit(context);