public BreakStatement(IStatementBlock sourceBlock) : base(sourceBlock) { IStatementBlockLocalMember local = null; IBreakTargetExitPoint exitPoint = null; IDeclarationTarget parent = sourceBlock; //Search up for the block that needs the break. while (parent != null && local == null) { if (parent is IBreakTargetStatement) { local = ((IBreakTargetStatement)parent).BreakLocal; exitPoint = ((IBreakTargetStatement)parent).ExitLabel; ((IBreakTargetStatement)parent).UtilizeBreakMeasures = true; break; } parent = parent.ParentTarget; } if (local == null && !(sourceBlock.Parent is ISwitchStatementCase)) { throw new InvalidOperationException("Cannot insert a break into a non-terminable block."); } this.terminalVariable = local; this.exitSymbol = exitPoint; }
public abstract void TranslateStatement(IBreakTargetExitPoint breakTarget);
public override void TranslateStatement(IBreakTargetExitPoint breakTarget) { this.Provider.GenerateCodeFromStatement(breakTarget.GenerateCodeDom(this.Options), base.Target, this.Options.Options); }