private bool BindInLoopControlStatement(LoopControlStatementNode loopControlStatement) { ushort level = loopControlStatement.Level; Node?parent = loopControlStatement; while (level > 0) { parent = parent.ParentNode; switch (parent) { case null: ErrorProvider.ReportError(ErrorCode.LoopControlStatementNotThatDeep, Compilation, loopControlStatement); return(false); case ILoopStatementNode: level--; break; } } ILoopStatementNode?loop = parent as ILoopStatementNode; Debug.Assert(loop != null); loopControlStatement.SetControlledLoop(loop); return(true); }
private void EmitLoopControlStatement(LoopControlStatementNode loopControlStatement) { switch (loopControlStatement.Kind) { case LoopControlStatementKind.Continue: output.Append("continue"); break; case LoopControlStatementKind.Leave: output.Append("break"); break; } if (loopControlStatement.Level > 1) { Node?parent = loopControlStatement; int level = loopControlStatement.Level; while (true) { parent = parent.ParentNode; Debug.Assert(parent is StatementCollectionNode); parent = parent.ParentNode; if (parent is ILoopStatementNode loop) { if (level == 1) { int loopId = associatedLoopIds[loop]; output.Append(" $loop_"); output.Append(loopId); output.Append(';'); return; } level--; } Debug.Assert(parent != null); } } output.Append(';'); }