public int Emit_Clean(RuntimeScopeBlock runtimeScopeBlock) { return(AppendInstruction(new Instruction() { OpCode = OpCode.Clean, NumVal = runtimeScopeBlock.To + 1, NumVal2 = runtimeScopeBlock.ToInclusive })); }
public int Emit_Leave(RuntimeScopeBlock runtimeScopeBlock) { return(AppendInstruction(new Instruction() { OpCode = OpCode.Clean, NumVal = runtimeScopeBlock.From, NumVal2 = runtimeScopeBlock.To })); }
public Instruction Emit_Exit(RuntimeScopeBlock runtimeScopeBlock) { return(AppendInstruction(new Instruction(m_CurrentSourceRef) { OpCode = OpCode.Exit, NumVal = runtimeScopeBlock.From, NumVal2 = runtimeScopeBlock.ToInclusive })); }
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()); }
public Instruction Emit_Clean(RuntimeScopeBlock runtimeScopeBlock) { return(AppendInstruction(new Instruction(m_CurrentSourceRef) { OpCode = OpCode.Clean, NumVal = runtimeScopeBlock.To + 1, NumVal2 = runtimeScopeBlock.ToInclusive })); }
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()); }
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); }
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()); }
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(); }
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); }
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); }
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(); }
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); }
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); }
public Instruction Emit_Clean(RuntimeScopeBlock runtimeScopeBlock) { return AppendInstruction(new Instruction(m_CurrentSourceRef) { OpCode = OpCode.Clean, NumVal = runtimeScopeBlock.To + 1, NumVal2 = runtimeScopeBlock.ToInclusive }); }
public Instruction Emit_Leave(RuntimeScopeBlock runtimeScopeBlock) { return AppendInstruction(new Instruction(m_CurrentSourceRef) { OpCode = OpCode.Clean, NumVal = runtimeScopeBlock.From, NumVal2 = runtimeScopeBlock.To }); }
internal void SetScope(RuntimeScopeBlock runtimeScopeBlock) { m_StackFrame = runtimeScopeBlock; }
internal BuildTimeScopeBlock(BuildTimeScopeBlock parent) { Parent = parent; ChildNodes = new List<BuildTimeScopeBlock>(); ScopeBlock = new RuntimeScopeBlock(); }
internal BuildTimeScopeBlock(BuildTimeScopeBlock parent) { Parent = parent; ChildNodes = new List <BuildTimeScopeBlock>(); ScopeBlock = new RuntimeScopeBlock(); }