final void onReturnValue(EventContext context, VirtualFrame frame, Object result) { try { innerOnReturnValue(context, frame, result); } catch (Throwable t) { if (!seenException) { CompilerDirectives.transferToInterpreterAndInvalidate(); seenException = true; } if (binding.isLanguageBinding()) { throw t; } else { CompilerDirectives.transferToInterpreter(); failEventForInstrumentation(binding, "onReturnValue", t); } } if (next != null) { next.onReturnValue(context, frame, result); } }