static boolean isArray(MessageNodes nodes, TruffleObject object) { return ForeignAccess.sendHasSize(nodes.hasSize, object); }
@Override protected Object executeImpl(PolyglotLanguageContext context, Object receiver, Object[] args) { return ForeignAccess.sendHasSize(hasSizeNode, (TruffleObject) receiver); }
@Override protected Object executeImpl(Object receiver, Object[] args) { return ForeignAccess.sendHasSize(hasSizeNode, (TruffleObject) receiver); }
boolean hasSize(TruffleObject truffleObject) { return ForeignAccess.sendHasSize(hasSizeNode, truffleObject); }
boolean hasSize(TruffleObject truffleObject) { return ForeignAccess.sendHasSize(hasSizeNode, truffleObject); }
static boolean isArray(MessageNodes nodes, TruffleObject object) { return ForeignAccess.sendHasSize(nodes.hasSize, object); }
@Override protected Object executeImpl(PolyglotLanguageContext languageContext, TruffleObject receiver, Object[] args) { int size = 0; if (sendHasSize(hasSize, receiver)) { try { size = ((Number) sendGetSize(getSize, receiver)).intValue(); } catch (UnsupportedMessageException e) { size = 0; } } return size; }
static List<Object> asList(MessageNodes nodes, TruffleObject object) { if (!ForeignAccess.sendHasSize(nodes.hasSize, object)) { return null; } return new ObjectList(nodes, object); }
@Override protected Object executeImpl(Object languageContext, TruffleObject receiver, Object[] args, int offset) { int size = 0; if (sendHasSize(hasSize, receiver)) { try { size = ((Number) sendGetSize(getSize, receiver)).intValue(); } catch (UnsupportedMessageException e) { size = 0; } } return size; }
static List<Object> asList(MessageNodes nodes, TruffleObject object) { if (!ForeignAccess.sendHasSize(nodes.hasSize, object)) { return null; } return new ObjectList(nodes, object); }
protected final boolean isValidKey(TruffleObject receiver, Object key) { if (cache.keyClass.isInstance(key)) { if (cache.memberKey && condition.profile(sendHasKeys(hasKeys, receiver))) { if (key instanceof String) { return true; } } else if (cache.numberKey && key instanceof Number && sendHasSize(hasSize, receiver)) { return true; } } return false; }
protected final boolean isValidKey(TruffleObject receiver, Object key) { if (cache.keyClass.isInstance(key)) { if (cache.memberKey && condition.profile(sendHasKeys(hasKeys, receiver))) { if (key instanceof String) { return true; } } else if (cache.numberKey && key instanceof Number && sendHasSize(hasSize, receiver)) { return true; } } return false; }
static Map<Object, Object> asMap(MessageNodes nodes, TruffleObject object) { TruffleObject keys; try { keys = ForeignAccess.sendKeys(nodes.keys, object, true); boolean hasSize = ForeignAccess.sendHasSize(nodes.hasSize, keys); if (!hasSize) { return null; } } catch (UnsupportedMessageException ex) { return null; } return new ObjectMap(nodes, object, keys); }
static Map<Object, Object> asMap(MessageNodes nodes, TruffleObject object) { TruffleObject keys; try { keys = ForeignAccess.sendKeys(nodes.keys, object, true); boolean hasSize = ForeignAccess.sendHasSize(nodes.hasSize, keys); if (!hasSize) { return null; } } catch (UnsupportedMessageException ex) { return null; } return new ObjectMap(nodes, object, keys); }
private static boolean hasKeys(TruffleObject object) { try { TruffleObject keys = ForeignAccess.sendKeys(Message.KEYS.createNode(), object); if (keys == null) { return false; } return ForeignAccess.sendHasSize(Message.HAS_SIZE.createNode(), keys); } catch (UnsupportedMessageException ex) { return false; } }
private static boolean hasKeys(TruffleObject object) { try { TruffleObject keys = ForeignAccess.sendKeys(Message.KEYS.createNode(), object); if (keys == null) { return false; } return ForeignAccess.sendHasSize(Message.HAS_SIZE.createNode(), keys); } catch (UnsupportedMessageException ex) { return false; } }
@Override @SuppressWarnings("unchecked") protected Object executeImpl(PolyglotLanguageContext languageContext, TruffleObject receiver, Object[] args) { List<?> keys = null; int keysSize = 0; int elemSize = 0; PolyglotMap<Object, Object> originalMap = (PolyglotMap<Object, Object>) args[ARGUMENT_OFFSET]; if (cache.memberKey && sendHasKeys(hasKeys, receiver)) { TruffleObject truffleKeys; try { truffleKeys = sendKeys(keysNode, receiver); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter(); return Collections.emptySet(); } keys = PolyglotList.create(languageContext, truffleKeys, false, String.class, null); keysSize = keys.size(); } else if (cache.numberKey && sendHasSize(hasSize, receiver)) { try { elemSize = ((Number) sendGetSize(getSize, receiver)).intValue(); } catch (UnsupportedMessageException e) { elemSize = 0; } } return originalMap.new LazyEntries(keys, keysSize, elemSize); }
@Override @TruffleBoundary Object executeProxy(PolyglotLanguageContext context, Proxy proxy, Object[] arguments) { Object result; if (proxy instanceof ProxyObject) { final ProxyObject object = (ProxyObject) proxy; result = object.getMemberKeys(); if (result == null) { result = EMPTY; } } else { result = EMPTY; } Object guestValue = context.toGuestValue(result); if (!(guestValue instanceof TruffleObject) || !ForeignAccess.sendHasSize(hasSize, (TruffleObject) guestValue)) { throw PolyglotImpl.wrapHostException(context, new IllegalStateException( String.format("getMemberKeys() returned invalid value %s but must return an array of member key Strings.", context.toHostValue(guestValue).toString()))); } return guestValue; } }
@Override @TruffleBoundary Object executeProxy(PolyglotLanguageContext context, Proxy proxy, Object[] arguments) { Object result; if (proxy instanceof ProxyObject) { final ProxyObject object = (ProxyObject) proxy; result = object.getMemberKeys(); if (result == null) { result = EMPTY; } } else { result = EMPTY; } Object guestValue = context.toGuestValue(result); if (!(guestValue instanceof TruffleObject) || !ForeignAccess.sendHasSize(hasSize, (TruffleObject) guestValue)) { throw PolyglotImpl.wrapHostException(context, new IllegalStateException( String.format("getMemberKeys() returned invalid value %s but must return an array of member key Strings.", context.asValue(guestValue).toString()))); } return guestValue; } }
@Override protected Object executeImpl(PolyglotLanguageContext languageContext, TruffleObject receiver, Object[] args) { Object key = args[ARGUMENT_OFFSET]; Object result = null; assert key instanceof Integer; if (sendHasSize(hasSize, receiver)) { if (KeyInfo.isReadable(sendKeyInfo(keyInfo, receiver, key))) { try { result = toHost.execute(sendRead(read, receiver, key), cache.valueClass, cache.valueType, languageContext); } catch (UnknownIdentifierException e) { CompilerDirectives.transferToInterpreter(); throw HostInteropErrors.invalidListIndex(languageContext, receiver, cache.valueType, (int) key); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter(); throw HostInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "get()"); } } else { CompilerDirectives.transferToInterpreter(); throw HostInteropErrors.invalidListIndex(languageContext, receiver, cache.valueType, (int) key); } } else { CompilerDirectives.transferToInterpreter(); throw HostInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "get()"); } return result; }