public void ProcessStatementForStandard(DMASTProcStatementForStandard statementForStandard) { _proc.StartScope(); { if (statementForStandard.Initializer != null) { ProcessStatement(statementForStandard.Initializer); } string loopLabel = _proc.NewLabelName(); _proc.LoopStart(loopLabel); { DMExpression.Emit(_dmObject, _proc, statementForStandard.Comparator); _proc.BreakIfFalse(); ProcessBlockInner(statementForStandard.Body); _proc.LoopContinue(loopLabel); if (statementForStandard.Incrementor != null) { DMExpression.Emit(_dmObject, _proc, statementForStandard.Incrementor); _proc.Pop(); } _proc.LoopJumpToStart(loopLabel); } _proc.LoopEnd(); } _proc.EndScope(); }
public void VisitProcStatementForStandard(DMASTProcStatementForStandard statementForStandard) { statementForStandard.Initializer?.Visit(this); if (statementForStandard.Comparator != null) { SimplifyExpression(ref statementForStandard.Comparator); } if (statementForStandard.Incrementor != null) { SimplifyExpression(ref statementForStandard.Incrementor); } statementForStandard.Body?.Visit(this); }