public override int Run(InterpretedFrame frame) { // Are we jumping out of catch/finally while aborting the current thread? Interpreter.AbortThreadIfRequested(frame, _labelIndex); // goto the target label or the current finally continuation: return frame.Goto(_labelIndex, _hasValue ? frame.Pop() : Interpreter.NoValue); }
internal int GotoHandler(InterpretedFrame frame, object exception, out ExceptionHandler handler) { handler = GetBestHandler(frame.InstructionIndex, exception.GetType()); if (handler == null) { return frame.Goto(ReturnAndRethrowLabelIndex, Interpreter.NoValue); } else { return frame.Goto(handler.LabelIndex, exception); } }