public override void Visit(BreakStmt breakStmt, object[] args)
 {
     if (loopStack.Count == 0)
     {
         kernel.IssueError(ErrorType.BreakNotInLoop, breakStmt.Location);
     }
     base.Visit(breakStmt, args);
 }
Пример #2
0
 public virtual void Visit(BreakStmt breakStmt, object[] args)
 {
 }
 public virtual void Visit(BreakStmt breakStmt, object[] args)
 {
 }
        public void Visit(BreakStmt breakStmt, object[] args)
        {
            //在编译时已经检查过break的合法性
            ASTNode node = null;
            do
            {
                int id = kernel.RuntimeData.InstructionStack.Pop();

                if (id == InstructionStack.CLOSE_LOCAL_SCOPE_FLAG)
                {
                    kernel.RuntimeData.ScopeStack.Close();
                    continue;
                }

                node = root.NodeMap[id];
            } while (!(node is LoopStmt));

            kernel.Next();
        }