Example #1
0
 public int Emit_Clean(RuntimeScopeBlock runtimeScopeBlock)
 {
     return(AppendInstruction(new Instruction()
     {
         OpCode = OpCode.Clean, NumVal = runtimeScopeBlock.To + 1, NumVal2 = runtimeScopeBlock.ToInclusive
     }));
 }
Example #2
0
 public int Emit_Leave(RuntimeScopeBlock runtimeScopeBlock)
 {
     return(AppendInstruction(new Instruction()
     {
         OpCode = OpCode.Clean, NumVal = runtimeScopeBlock.From, NumVal2 = runtimeScopeBlock.To
     }));
 }
Example #3
0
 public Instruction Emit_Exit(RuntimeScopeBlock runtimeScopeBlock)
 {
     return(AppendInstruction(new Instruction(m_CurrentSourceRef)
     {
         OpCode = OpCode.Exit, NumVal = runtimeScopeBlock.From, NumVal2 = runtimeScopeBlock.ToInclusive
     }));
 }
Example #4
0
        public IfStatement(LuaParser.Stat_ifblockContext context, ScriptLoadingContext lcontext)
            : base(context, lcontext)
        {
            int ecount = context.exp().Length;
            int bcount = context.block().Length;

            for (int i = 0; i < ecount; i++)
            {
                var exp = context.exp()[i];
                var blk = context.block()[i];

                lcontext.Scope.PushBlock();
                var ifblock = new IfBlock()
                {
                    Exp    = NodeFactory.CreateExpression(exp, lcontext),
                    Block  = NodeFactory.CreateStatement(blk, lcontext),
                    Source = BuildSourceRef(
                        i == 0 ? context.IF().Symbol : context.ELSEIF()[i - 1].Symbol
                        , exp.Stop)
                };
                ifblock.StackFrame = lcontext.Scope.PopBlock();

                m_Ifs.Add(ifblock);
            }

            if (bcount > ecount)
            {
                lcontext.Scope.PushBlock();
                m_Else           = NodeFactory.CreateStatement(context.block()[bcount - 1], lcontext);
                m_ElseStackFrame = lcontext.Scope.PopBlock();
                m_ElseRef        = BuildSourceRef(context.ELSE());
            }

            m_End = BuildSourceRef(context.Stop, context.END());
        }
Example #5
0
 public Instruction Emit_Clean(RuntimeScopeBlock runtimeScopeBlock)
 {
     return(AppendInstruction(new Instruction(m_CurrentSourceRef)
     {
         OpCode = OpCode.Clean, NumVal = runtimeScopeBlock.To + 1, NumVal2 = runtimeScopeBlock.ToInclusive
     }));
 }
Example #6
0
        public ForLoopStatement(LuaParser.Stat_forloopContext context, ScriptLoadingContext lcontext)
            : base(context, lcontext)
        {
            var exps = context.exp();

            m_Start = NodeFactory.CreateExpression(exps[0], lcontext);
            m_End   = NodeFactory.CreateExpression(exps[1], lcontext);

            if (exps.Length > 2)
            {
                m_Step = NodeFactory.CreateExpression(exps[2], lcontext);
            }
            else
            {
                m_Step = new LiteralExpression(context, lcontext, DynValue.NewNumber(1));
            }

            lcontext.Scope.PushBlock();
            m_VarName    = lcontext.Scope.DefineLocal(context.NAME().GetText());
            m_InnerBlock = NodeFactory.CreateStatement(context.block(), lcontext);
            m_StackFrame = lcontext.Scope.PopBlock();

            m_RefFor = BuildSourceRef(context.Start, context.FOR());
            m_RefEnd = BuildSourceRef(context.Stop, context.END());
        }
Example #7
0
 public Instruction Emit_Leave(RuntimeScopeBlock runtimeScopeBlock)
 {
     return(AppendInstruction(new Instruction(m_CurrentSourceRef)
     {
         OpCode = OpCode.Clean, NumVal = runtimeScopeBlock.From, NumVal2 = runtimeScopeBlock.To
     }));
 }
        public ForLoopStatement(ScriptLoadingContext lcontext, Token nameToken, Token forToken)
            : base(lcontext)
        {
            //	for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end |

            // lexer already at the '=' ! [due to dispatching vs for-each]
            CheckTokenType(lcontext, TokenType.Op_Assignment);

            m_Start = Expression.Expr(lcontext);
            CheckTokenType(lcontext, TokenType.Comma);
            m_End = Expression.Expr(lcontext);

            if (lcontext.Lexer.Current.Type == TokenType.Comma)
            {
                lcontext.Lexer.Next();
                m_Step = Expression.Expr(lcontext);
            }
            else
            {
                m_Step = new LiteralExpression(lcontext, DynValue.NewNumber(1));
            }

            lcontext.Scope.PushBlock();
            m_VarName    = lcontext.Scope.DefineLocal(nameToken.Text);
            m_RefFor     = forToken.GetSourceRef(CheckTokenType(lcontext, TokenType.Do));
            m_InnerBlock = new CompositeStatement(lcontext);
            m_RefEnd     = CheckTokenType(lcontext, TokenType.End).GetSourceRef();
            m_StackFrame = lcontext.Scope.PopBlock();

            lcontext.Source.Refs.Add(m_RefFor);
            lcontext.Source.Refs.Add(m_RefEnd);
        }
Example #9
0
        public ForEachLoopStatement(LuaParser.Stat_foreachloopContext context, ScriptLoadingContext lcontext)
            : base(context, lcontext)
        {
            context.explist();

            var explist = context.explist();

            m_RValues = NodeFactory.CreateExpression(explist, lcontext);

            lcontext.Scope.PushBlock();

            m_Names = context.namelist().NAME()
                      .Select(n => n.GetText())
                      .Select(n => lcontext.Scope.DefineLocal(n))
                      .ToArray();

            m_NameExps = m_Names
                         .Select(s => new SymbolRefExpression(context, lcontext, s))
                         .Cast <IVariable>()
                         .ToArray();


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

            m_StackFrame = lcontext.Scope.PopBlock();
            m_DebugText  = context.GetText();

            m_RefFor = BuildSourceRef(context.Start, context.FOR());
            m_RefEnd = BuildSourceRef(context.Stop, context.END());
        }
Example #10
0
        public ScopeBlockStatement(LuaParser.Stat_doblockContext context, ScriptLoadingContext lcontext)
            : base(context, lcontext)
        {
            lcontext.Scope.PushBlock();
            m_Block = NodeFactory.CreateStatement(context.block(), lcontext);

            m_Do  = BuildSourceRef(context.Start, context.DO());
            m_End = BuildSourceRef(context.Stop, context.END());

            m_StackFrame = lcontext.Scope.PopBlock();
        }
Example #11
0
        public ForLoopStatement(ScriptLoadingContext lcontext, Token nameToken, Token forToken) : base(lcontext)
        {
            //	for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end |

            // lexer already at the '=' ! [due to dispatching vs for-each]
            CheckTokenType(lcontext, TokenType.Op_Assignment);

            m_Start = Expression.Expr(lcontext);
            CheckTokenType(lcontext, TokenType.Comma, TokenType.SemiColon);

            if (CheckTokenTypeAndDiscardIfMatch(lcontext, TokenType.Name, nameToken.Text))
            {
                CheckTokenTypeAndDiscardIfNot(lcontext, TokenTypeUtils.operators);
            }

            m_End = Expression.Expr(lcontext);

            if (lcontext.Lexer.Current.Type == TokenType.Comma || lcontext.Lexer.Current.Type == TokenType.SemiColon)
            {
                lcontext.Lexer.Next();

                if (CheckTokenTypeAndDiscardIfMatch(lcontext, TokenType.Name, nameToken.Text))
                {
                    Token stepToken  = CheckTokenTypeAndDiscard(lcontext, TokenTypeUtils.operators);
                    Token stepToken2 = CheckTokenTypeAndDiscardIfNot(lcontext, TokenTypeUtils.operators);

                    if (stepToken != null && TokenTypeUtils.IsOpToken(stepToken.Type))
                    {
                        stepOp = stepToken.Type;
                    }
                }

                m_Step = Expression.Expr(lcontext);
            }
            else
            {
                m_Step = new LiteralExpression(lcontext, DynValue.NewNumber(1));
            }

            lcontext.Scope.PushBlock();
            m_VarName = lcontext.Scope.DefineLocal(nameToken.Text);

            forToken.GetSourceRef(CheckTokenTypeAndDiscard(lcontext, TokenType.Brk_Close_Round));

            m_RefFor     = forToken.GetSourceRef(CheckTokenType(lcontext, TokenType.Do));
            m_InnerBlock = new CompositeStatement(lcontext);
            m_RefEnd     = CheckTokenType(lcontext, TokenType.End).GetSourceRef();
            m_StackFrame = lcontext.Scope.PopBlock();

            lcontext.Source.Refs.Add(m_RefFor);
            lcontext.Source.Refs.Add(m_RefEnd);
        }
Example #12
0
        public RepeatStatement(LuaParser.Stat_repeatuntilloopContext context, ScriptLoadingContext lcontext)
            : base(context, lcontext)
        {
            lcontext.Scope.PushBlock();
            var exp = context.exp();

            m_Block      = NodeFactory.CreateStatement(context.block(), lcontext);
            m_Condition  = NodeFactory.CreateExpression(exp, lcontext);
            m_StackFrame = lcontext.Scope.PopBlock();

            m_Repeat = BuildSourceRef(context.Start, context.REPEAT());
            m_Until  = BuildSourceRef(exp.Start, exp.Stop);
        }
Example #13
0
        public WhileStatement(LuaParser.Stat_whiledoloopContext context, ScriptLoadingContext lcontext)
            : base(context, lcontext)
        {
            var exp = context.exp();

            m_Condition = NodeFactory.CreateExpression(exp, lcontext);

            m_Start = BuildSourceRef(context.Start, exp.Stop);
            m_End   = BuildSourceRef(context.Stop, context.END());

            lcontext.Scope.PushBlock();
            m_Block      = NodeFactory.CreateStatement(context.block(), lcontext);
            m_StackFrame = lcontext.Scope.PopBlock();
        }
Example #14
0
        public ScopeBlockStatement(ScriptLoadingContext lcontext) : base(lcontext)
        {
            lcontext.Scope.PushBlock();

            _do = CheckTokenType(lcontext, TokenType.Do).GetSourceRef();

            _block = new CompositeStatement(lcontext);

            _end = CheckTokenType(lcontext, TokenType.End).GetSourceRef();

            _stackFrame = lcontext.Scope.PopBlock();
            lcontext.Source.Refs.Add(_do);
            lcontext.Source.Refs.Add(_end);
        }
        public RepeatStatement(ScriptLoadingContext lcontext) : base(lcontext)
        {
            _repeat = CheckTokenType(lcontext, TokenType.Repeat).GetSourceRef();

            lcontext.Scope.PushBlock();
            _block = new CompositeStatement(lcontext);

            var until = CheckTokenType(lcontext, TokenType.Until);

            _condition = Expression.Expr(lcontext);

            _until = until.GetSourceRefUpTo(lcontext.Lexer.Current);

            _stackFrame = lcontext.Scope.PopBlock();
            lcontext.Source.Refs.Add(_repeat);
            lcontext.Source.Refs.Add(_until);
        }
        public WhileStatement(ScriptLoadingContext lcontext)
            : base(lcontext)
        {
            var whileTk = CheckTokenType(lcontext, TokenType.While);

            _condition = Expression.Expr(lcontext);
            _start     = whileTk.GetSourceRefUpTo(lcontext.Lexer.Current);

            lcontext.Scope.PushBlock();
            CheckTokenType(lcontext, TokenType.Do);
            _block      = new CompositeStatement(lcontext);
            _end        = CheckTokenType(lcontext, TokenType.End).GetSourceRef();
            _stackFrame = lcontext.Scope.PopBlock();

            lcontext.Source.Refs.Add(_start);
            lcontext.Source.Refs.Add(_end);
        }
        public ForEachLoopStatement(ScriptLoadingContext lcontext, Token firstNameToken, Token forToken)
            : base(lcontext)
        {
            //	for namelist in explist do block end |

            List <string> names = new List <string>();

            names.Add(firstNameToken.Text);

            while (lcontext.Lexer.Current.Type == TokenType.Comma)
            {
                lcontext.Lexer.Next();
                Token name = CheckTokenType(lcontext, TokenType.Name);
                names.Add(name.Text);
            }

            CheckTokenType(lcontext, TokenType.In);

            m_RValues = new ExprListExpression(Expression.ExprList(lcontext), lcontext);

            lcontext.Scope.PushBlock();

            m_Names = names
                      .Select(n => lcontext.Scope.TryDefineLocal(n))
                      .ToArray();

            m_NameExps = m_Names
                         .Select(s => new SymbolRefExpression(lcontext, s))
                         .Cast <IVariable>()
                         .ToArray();

            m_RefFor = forToken.GetSourceRef(CheckTokenType(lcontext, TokenType.Do));

            m_Block = new CompositeStatement(lcontext);

            m_RefEnd = CheckTokenType(lcontext, TokenType.End).GetSourceRef();

            m_StackFrame = lcontext.Scope.PopBlock();

            lcontext.Source.Refs.Add(m_RefFor);
            lcontext.Source.Refs.Add(m_RefEnd);
        }
Example #18
0
        public WhileStatement(ScriptLoadingContext lcontext)
            : base(lcontext)
        {
            Token whileTk = CheckTokenType(lcontext, TokenType.While);

            m_Condition = Expression.Expr(lcontext);

            m_Start = whileTk.GetSourceRefUpTo(lcontext.Lexer.Current);

            //m_Start = BuildSourceRef(context.Start, exp.Stop);
            //m_End = BuildSourceRef(context.Stop, context.END());

            lcontext.Scope.PushBlock();
            CheckTokenType(lcontext, TokenType.Do);
            m_Block      = new CompositeStatement(lcontext);
            m_End        = CheckTokenType(lcontext, TokenType.End).GetSourceRef();
            m_StackFrame = lcontext.Scope.PopBlock();

            lcontext.Source.Refs.Add(m_Start);
            lcontext.Source.Refs.Add(m_End);
        }
Example #19
0
 public Instruction Emit_Clean(RuntimeScopeBlock runtimeScopeBlock)
 {
     return
         AppendInstruction(new Instruction(m_CurrentSourceRef)
         {
             OpCode = OpCode.Clean,
             NumVal = runtimeScopeBlock.To + 1,
             NumVal2 = runtimeScopeBlock.ToInclusive
         });
 }
Example #20
0
 public Instruction Emit_Leave(RuntimeScopeBlock runtimeScopeBlock)
 {
     return
         AppendInstruction(new Instruction(m_CurrentSourceRef)
         {
             OpCode = OpCode.Clean,
             NumVal = runtimeScopeBlock.From,
             NumVal2 = runtimeScopeBlock.To
         });
 }
Example #21
0
 internal void SetScope(RuntimeScopeBlock runtimeScopeBlock)
 {
     m_StackFrame = runtimeScopeBlock;
 }
Example #22
0
 internal BuildTimeScopeBlock(BuildTimeScopeBlock parent)
 {
     Parent = parent;
     ChildNodes = new List<BuildTimeScopeBlock>();
     ScopeBlock = new RuntimeScopeBlock();
 }
Example #23
0
 internal BuildTimeScopeBlock(BuildTimeScopeBlock parent)
 {
     Parent     = parent;
     ChildNodes = new List <BuildTimeScopeBlock>();
     ScopeBlock = new RuntimeScopeBlock();
 }