Example #1
0
        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;
        }
Example #2
0
 public abstract void TranslateStatement(IBreakTargetExitPoint breakTarget);
Example #3
0
 public override void TranslateStatement(IBreakTargetExitPoint breakTarget)
 {
     this.Provider.GenerateCodeFromStatement(breakTarget.GenerateCodeDom(this.Options), base.Target, this.Options.Options);
 }