internal EvalUnwinder(BlockReturnReason reason, RuntimeFlowControl targetFrame, ProcKind sourceProcKind, object returnValue) : base(returnValue) { Reason = reason; _targetFrame = targetFrame; _sourceProcKind = sourceProcKind; }
internal void SetFlowControl(BlockReturnReason reason, RuntimeFlowControl targetFrame, ProcKind sourceProcKind) { Debug.Assert((reason == BlockReturnReason.Break) == (targetFrame != null)); _returnReason = reason; _targetFrame = targetFrame; _sourceProcKind = sourceProcKind; }
/// <summary> /// Propagates control flow (break/return) from the yielded block to the enclosing block. /// </summary> public object PropagateFlow(BlockParam /*!*/ yieldedBlock, object returnValue) { if (yieldedBlock.ReturnReason == BlockReturnReason.Break) { return(Break(returnValue)); } else { _returnReason = yieldedBlock.ReturnReason; return(returnValue); } }
internal EvalUnwinder(BlockReturnReason reason, object returnValue) : this(reason, null, ProcKind.Block, returnValue) { }
/// <summary> /// Propagates control flow (break/return) from the yielded block to the enclosing block. /// </summary> public object PropagateFlow(BlockParam/*!*/ yieldedBlock, object returnValue) { if (yieldedBlock.ReturnReason == BlockReturnReason.Break) { return Break(returnValue); } else { _returnReason = yieldedBlock.ReturnReason; return returnValue; } }