@Override public CallTarget accessMessage(Message tree) { if (tree == Message.IS_EXECUTABLE) { return Truffle.getRuntime().createCallTarget(RootNode.createConstantNode(Boolean.TRUE)); } else if (Message.EXECUTE.equals(tree)) { return Truffle.getRuntime().createCallTarget(this); } else { throw UnsupportedMessageException.raise(tree); } }
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); }
@Override public CallTarget accessMessage(Message tree) { if (tree == Message.IS_EXECUTABLE) { return Truffle.getRuntime().createCallTarget(RootNode.createConstantNode(Boolean.TRUE)); } else if (Message.createExecute(2).equals(tree)) { return Truffle.getRuntime().createCallTarget(this); } else { throw UnsupportedMessageException.raise(tree); } }