final void onDispose(EventContext context, VirtualFrame frame) { try { innerOnDispose(context, frame); } catch (Throwable t) { if (!seenException) { CompilerDirectives.transferToInterpreterAndInvalidate(); seenException = true; } if (binding.isLanguageBinding()) { throw t; } else { CompilerDirectives.transferToInterpreter(); failEventForInstrumentation(binding, "onEnter", t); } } if (next != null) { next.onDispose(context, frame); } }
final void onReturnExceptional(EventContext context, VirtualFrame frame, Throwable exception) { try { innerOnReturnExceptional(context, frame, exception); } catch (Throwable t) { if (!seenException) { CompilerDirectives.transferToInterpreterAndInvalidate(); seenException = true; } if (binding.isLanguageBinding()) { exception.addSuppressed(t); } else { CompilerDirectives.transferToInterpreter(); failEventForInstrumentation(binding, "onReturnExceptional", t); } } if (next != null) { next.onReturnExceptional(context, frame, exception); } }
/** * Should get invoked after the node is invoked sucessfuly. * * @param result the result value of the operation * @param frame the current frame of the execution. */ public void onReturnValue(VirtualFrame frame, Object result) { if (lazyUpdate(frame)) { chain.onReturnValue(context, frame, result); } }
/** * Should get invoked before the node is invoked. * * @param frame the current frame of the execution. */ public void onEnter(VirtualFrame frame) { if (lazyUpdate(frame)) { chain.onEnter(context, frame); } }
/** * Should get invoked if the node did not complete sucessfully. * * @param exception the exception that occured during the execution * @param frame the current frame of the execution. */ public void onReturnExceptional(VirtualFrame frame, Throwable exception) { if (lazyUpdate(frame)) { chain.onReturnExceptional(context, frame, exception); } }