private static Object doInvoke(SingleMethodDesc method, Object obj, Object[] arguments, Object languageContext) { assert arguments.length == method.getParameterCount(); Object ret; try { ret = method.invoke(obj, arguments); } catch (Throwable e) { throw JavaInteropReflect.rethrow(JavaInterop.wrapHostException(languageContext, e)); } return JavaInterop.toGuestValue(ret, languageContext); }
public final Object execute(JavaMethodDesc method, Object obj, Object[] args, Object languageContext) { try { return executeImpl(method, obj, args, languageContext); } catch (ClassCastException | NullPointerException e) { // conversion failed by ToJavaNode throw UnsupportedTypeException.raise(args); } catch (InteropException e) { throw e.raise(); } catch (Throwable e) { throw JavaInteropReflect.rethrow(JavaInterop.wrapHostException(languageContext, e)); } }
@Override public Object get(Object receiver) { if (getHandle == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); getHandle = makeGetMethodHandle(); } try { return invokeGetHandle(getHandle, receiver); } catch (Exception e) { throw UnsupportedTypeException.raise(e, JavaInteropReflect.EMPTY); } catch (Throwable e) { throw JavaInteropReflect.rethrow(e); } }
@Override public void set(Object receiver, Object value) { if (setHandle == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); setHandle = makeSetMethodHandle(); } try { invokeSetHandle(setHandle, receiver, value); } catch (Exception e) { throw UnsupportedTypeException.raise(e, new Object[]{value}); } catch (Throwable e) { throw JavaInteropReflect.rethrow(e); } }