Object catches; try { catches = ForeignAccess.sendInvoke(msgNodes.invoke1, object, "catches", exceptionObject); } catch (UnsupportedTypeException | ArityException | UnknownIdentifierException | UnsupportedMessageException ex) { throw new IllegalStateException("Unexpected exception from 'catches' on '" + object, exception);
protected final Object executeShared(PolyglotLanguageContext context, Object receiver, String key, Object[] guestArguments) { TruffleObject truffleReceiver = (TruffleObject) receiver; try { return ForeignAccess.sendInvoke(invokeNode, truffleReceiver, key, guestArguments); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter(); invokeUnsupported(context, receiver, key); return null; } catch (UnknownIdentifierException e) { CompilerDirectives.transferToInterpreter(); throw invalidMemberKey(context, receiver, key); } catch (UnsupportedTypeException e) { CompilerDirectives.transferToInterpreter(); throw invalidExecuteArgumentType(context, receiver, e); } catch (ArityException e) { CompilerDirectives.transferToInterpreter(); throw invalidExecuteArity(context, receiver, guestArguments, e.getExpectedArity(), e.getActualArity()); } }
if (!invokeFailed) { try { return ForeignAccess.sendInvoke(invokeNode, receiver, name, arguments); } catch (UnsupportedMessageException | UnknownIdentifierException e) { CompilerDirectives.transferToInterpreterAndInvalidate(); if (invokeOrReadAndExecuteProfile.profile(KeyInfo.isInvocable(keyInfo))) { try { return ForeignAccess.sendInvoke(invokeNode, receiver, name, arguments); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter();
if (!invokeFailed) { try { return ForeignAccess.sendInvoke(invokeNode, receiver, name, arguments); } catch (UnsupportedMessageException | UnknownIdentifierException e) { CompilerDirectives.transferToInterpreterAndInvalidate(); if (invokeOrReadAndExecuteProfile.profile(KeyInfo.isInvocable(keyInfo))) { try { return ForeignAccess.sendInvoke(invokeNode, receiver, name, arguments); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter();
private static Object handleMessage(Message message, Node messageNode, TruffleObject obj, String name, Object[] args) throws InteropException { if (message == Message.WRITE) { ForeignAccess.sendWrite(messageNode, obj, name, args[0]); return null; } if (message == Message.HAS_SIZE || message == Message.IS_BOXED || message == Message.IS_EXECUTABLE || message == Message.IS_NULL || message == Message.GET_SIZE) { return ForeignAccess.send(messageNode, obj); } if (message == Message.KEY_INFO) { return ForeignAccess.sendKeyInfo(messageNode, obj, name); } if (message == Message.READ) { return ForeignAccess.sendRead(messageNode, obj, name); } if (message == Message.UNBOX) { return ForeignAccess.sendUnbox(messageNode, obj); } if (Message.createExecute(0).equals(message)) { return ForeignAccess.sendExecute(messageNode, obj, args); } if (Message.createInvoke(0).equals(message)) { return ForeignAccess.sendInvoke(messageNode, obj, name, args); } if (Message.createNew(0).equals(message)) { return ForeignAccess.sendNew(messageNode, obj, args); } CompilerDirectives.transferToInterpreter(); throw UnsupportedMessageException.raise(message); }