public override void Visit(BreakStmt breakStmt, object[] args) { if (loopStack.Count == 0) { kernel.IssueError(ErrorType.BreakNotInLoop, breakStmt.Location); } base.Visit(breakStmt, 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(); }