public void visit(StmtNode_For node) { if (node.First != null) { node.First.acceptVisitor(this); } var loopLabel = ILGenerator.DefineLabel(); var breakLabel = ILGenerator.DefineLabel(); var continueLabel = ILGenerator.DefineLabel(); m_breakLabels.Add(breakLabel); m_continueLabels.Add(continueLabel); ILGenerator.MarkLabel(loopLabel); new ExprNodeVisitor_CodeEmitor(this, typeof(int), node.Second); ILGenerator.Emit(OpCodes.Brfalse, breakLabel); if (node.Body != null) { node.Body.acceptVisitor(this); } ILGenerator.MarkLabel(continueLabel); if (node.Third != null) { node.Third.acceptVisitor(this); } ILGenerator.Emit(OpCodes.Br, loopLabel); ILGenerator.MarkLabel(breakLabel); m_continueLabels.RemoveAt(m_continueLabels.Count - 1); m_breakLabels.RemoveAt(m_breakLabels.Count - 1); }
public void visit(StmtNode_For node) { if (node.First != null) node.First.acceptVisitor(this); var loopLabel = ILGenerator.DefineLabel(); var breakLabel = ILGenerator.DefineLabel(); var continueLabel = ILGenerator.DefineLabel(); m_breakLabels.Add(breakLabel); m_continueLabels.Add(continueLabel); ILGenerator.MarkLabel(loopLabel); new ExprNodeVisitor_CodeEmitor(this, typeof(int), node.Second); ILGenerator.Emit(OpCodes.Brfalse, breakLabel); if (node.Body != null) node.Body.acceptVisitor(this); ILGenerator.MarkLabel(continueLabel); if (node.Third != null) node.Third.acceptVisitor(this); ILGenerator.Emit(OpCodes.Br, loopLabel); ILGenerator.MarkLabel(breakLabel); m_continueLabels.RemoveAt(m_continueLabels.Count - 1); m_breakLabels.RemoveAt(m_breakLabels.Count - 1); }