protected CallTarget createMessageTarget(ForeignAccess fa) { CallTarget ct = null; if (fa != null) { ct = fa.access(message); } if (ct == null) { throw UnsupportedMessageException.raise(message); } return ct; }
public Object access(JavaObject receiver) { Object obj = receiver.obj; if (obj != null) { if (obj.getClass().isArray()) { return Array.getLength(obj); } else if (obj instanceof List<?>) { return ((List<?>) obj).size(); } } CompilerDirectives.transferToInterpreter(); throw UnsupportedMessageException.raise(Message.GET_SIZE); }
public Object access(HostObject receiver) { Object obj = receiver.obj; if (obj != null) { if (obj.getClass().isArray()) { return Array.getLength(obj); } else if (obj instanceof List<?>) { return ((List<?>) obj).size(); } } CompilerDirectives.transferToInterpreter(); throw UnsupportedMessageException.raise(Message.GET_SIZE); }
@Override public Object get(Object key) { try { return ForeignAccess.sendRead(nodes.read, object, key); } catch (UnknownIdentifierException ex) { return null; // key not present in the map } catch (UnsupportedMessageException ex) { throw ex.raise(); } }
public Object access(JavaObject object) { if (JavaInterop.isPrimitive(object.obj)) { return object.obj; } else { return UnsupportedMessageException.raise(Message.UNBOX); } }
@SuppressWarnings("unused") @TruffleBoundary @Specialization(guards = {"!receiver.isArray()", "!isList(receiver)"}) protected static Object notArray(JavaObject receiver, Number index) { throw UnsupportedMessageException.raise(Message.READ); }
@Override @TruffleBoundary Object executeProxy(PolyglotLanguageContext context, Proxy proxy, Object[] arguments) { if (proxy instanceof ProxyNativeObject) { return ((ProxyNativeObject) proxy).asPointer(); } else { throw UnsupportedMessageException.raise(Message.AS_POINTER); } } }
@Override @TruffleBoundary Object executeProxy(PolyglotLanguageContext context, Proxy proxy, Object[] arguments) { if (proxy instanceof ProxyArray) { return (int) ((ProxyArray) proxy).getSize(); } else { throw UnsupportedMessageException.raise(Message.GET_SIZE); } } }
@SuppressWarnings("unused") @TruffleBoundary @Specialization(guards = {"!isMap(receiver)"}) protected static Object notMap(HostObject receiver, String name) { throw UnsupportedMessageException.raise(Message.REMOVE); }
@TruffleBoundary static void putMember(PolyglotLanguageContext context, ProxyObject object, String key, Object value) { try { object.putMember(key, context.toHostValue(value)); } catch (UnsupportedOperationException e) { throw UnsupportedMessageException.raise(Message.WRITE); } }
@TruffleBoundary static void putMember(PolyglotLanguageContext context, ProxyObject object, String key, Object value) { try { object.putMember(key, context.asValue(value)); } catch (UnsupportedOperationException e) { throw UnsupportedMessageException.raise(Message.WRITE); } }
@TruffleBoundary static boolean removeArrayElement(ProxyArray object, Number index) { boolean result; try { result = object.remove(index.longValue()); } catch (ArrayIndexOutOfBoundsException e) { throw UnknownIdentifierException.raise(e.getMessage()); } catch (UnsupportedOperationException e) { throw UnsupportedMessageException.raise(Message.READ); } return result; }
@TruffleBoundary static Object getArray(PolyglotLanguageContext context, ProxyArray object, Number index) { Object result; try { result = object.get(index.longValue()); } catch (ArrayIndexOutOfBoundsException e) { throw UnknownIdentifierException.raise(e.getMessage()); } catch (UnsupportedOperationException e) { throw UnsupportedMessageException.raise(Message.READ); } return context.toGuestValue(result); }
@TruffleBoundary static void setArray(PolyglotLanguageContext context, ProxyArray object, Number index, Object value) { Value castValue = context.toHostValue(value); try { object.set(index.longValue(), castValue); } catch (ArrayIndexOutOfBoundsException e) { throw UnknownIdentifierException.raise(e.getMessage()); } catch (UnsupportedOperationException e) { throw UnsupportedMessageException.raise(Message.READ); } }
@TruffleBoundary static Object getArray(PolyglotLanguageContext context, ProxyArray object, Number index) { Object result; try { result = object.get(index.longValue()); } catch (ArrayIndexOutOfBoundsException e) { throw UnknownIdentifierException.raise(e.getMessage()); } catch (UnsupportedOperationException e) { throw UnsupportedMessageException.raise(Message.READ); } return context.toGuestValue(result); }
@Override @TruffleBoundary Object executeProxy(PolyglotLanguageContext context, Proxy proxy, Object[] arguments) { if (proxy instanceof ProxyInstantiable) { return context.toGuestValue(((ProxyInstantiable) proxy).newInstance(context.toHostValues(arguments, 1))); } else { throw UnsupportedMessageException.raise(Message.NEW); } } }
@TruffleBoundary static boolean removeMember(ProxyObject object, String key) { if (object.hasMember(key)) { try { return object.removeMember(key); } catch (UnsupportedOperationException e) { throw UnsupportedMessageException.raise(Message.READ); } } else { throw UnknownIdentifierException.raise(key); } }
@TruffleBoundary static boolean removeMember(ProxyObject object, String key) { if (object.hasMember(key)) { try { return object.removeMember(key); } catch (UnsupportedOperationException e) { throw UnsupportedMessageException.raise(Message.READ); } } else { throw UnknownIdentifierException.raise(key); } }
@TruffleBoundary public Object access(JavaObject receiver, boolean includeInternal) { if (receiver.isNull()) { throw UnsupportedMessageException.raise(Message.KEYS); } String[] fields = TruffleOptions.AOT ? new String[0] : JavaInteropReflect.findUniquePublicMemberNames(receiver.getLookupClass(), receiver.isStaticClass(), includeInternal); return JavaObject.forObject(fields, receiver.languageContext); } }
@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); } }