@Override public int size() { try { Number size = (Number) ForeignAccess.sendGetSize(nodes.getSize, object); return size.intValue(); } catch (UnsupportedMessageException ex) { return 0; } }
@Override public int size() { try { Number size = (Number) ForeignAccess.sendGetSize(nodes.getSize, object); return size.intValue(); } catch (UnsupportedMessageException ex) { return 0; } }
@Override public Set<Entry<Object, Object>> entrySet() { try { Number size = (Number) ForeignAccess.sendGetSize(nodes.getSize, keys); return new LazyEntries(keys, size.intValue()); } catch (UnsupportedMessageException ex) { return Collections.emptySet(); } }
@Override public Set<Entry<Object, Object>> entrySet() { try { Number size = (Number) ForeignAccess.sendGetSize(nodes.getSize, keys); return new LazyEntries(keys, size.intValue()); } catch (UnsupportedMessageException ex) { return Collections.emptySet(); } }
@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; }
@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; }
@Override protected Object executeImpl(Object receiver, Object[] args) { try { return ((Number) ForeignAccess.sendGetSize(getSizeNode, (TruffleObject) receiver)).longValue(); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter(); return polyglot.getArraySizeUnsupported(receiver); } }
@Override protected Object executeImpl(PolyglotLanguageContext context, Object receiver, Object[] args) { try { return ((Number) ForeignAccess.sendGetSize(getSizeNode, (TruffleObject) receiver)).longValue(); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter(); return getArraySizeUnsupported(context, receiver); } }
@TruffleBoundary private Object collectKeys(TruffleObject[] scopes) throws UnsupportedMessageException { // unfortunately we cannot do much butter as scopes might have // overlapping keys. So we need to make the set unique. Set<String> keySet = new HashSet<>(); for (TruffleObject scope : scopes) { TruffleObject keys = ForeignAccess.sendKeys(keysNode, scope); int size = ((Number) ForeignAccess.sendGetSize(getSizeNode, keys)).intValue(); for (int i = 0; i < size; i++) { try { keySet.add((String) ForeignAccess.sendRead(readNode, keys, i)); } catch (UnknownIdentifierException e) { } } } return new DefaultScope.VariableNamesObject(keySet); }
@TruffleBoundary private Object collectKeys(TruffleObject[] scopes) throws UnsupportedMessageException { // unfortunately we cannot do much butter as scopes might have // overlapping keys. So we need to make the set unique. Set<String> keySet = new HashSet<>(); for (TruffleObject scope : scopes) { TruffleObject keys = ForeignAccess.sendKeys(keysNode, scope); int size = ((Number) ForeignAccess.sendGetSize(getSizeNode, keys)).intValue(); for (int i = 0; i < size; i++) { try { keySet.add((String) ForeignAccess.sendRead(readNode, keys, i)); } catch (UnknownIdentifierException e) { } } } return new DefaultScope.VariableNamesObject(keySet); }
@Override public int size() { if (cachedSize != -1) { return cachedSize; } Object prev = languageContext.enter(); try { try { cachedSize = ((Number) ForeignAccess.sendGetSize(keysSizeNode, keys)).intValue(); } catch (UnsupportedMessageException e) { return 0; } return cachedSize; } catch (Throwable e) { throw wrapGuestException(languageContext, e); } finally { languageContext.leave(prev); } }
@Specialization public int getLength(TruffleObject input, @Cached("createGetSizeMessageNode()") Node readNode) { try { Object length = ForeignAccess.sendGetSize(readNode, input); if (length instanceof Number && ((Number) length).longValue() <= Integer.MAX_VALUE) { return ((Number) length).intValue(); } CompilerDirectives.transferToInterpreter(); throw UnsupportedTypeException.raise(new Object[]{length}); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter(); throw new RuntimeException(e); } } }
@Override public int size() { if (cachedSize != -1) { return cachedSize; } Object prev = languageContext.context.enterIfNeeded(); try { try { cachedSize = ((Number) ForeignAccess.sendGetSize(cache.keysSizeNode, keys)).intValue(); } catch (UnsupportedMessageException e) { return 0; } return cachedSize; } catch (Throwable e) { throw PolyglotImpl.wrapGuestException(languageContext, e); } finally { languageContext.context.leaveIfNeeded(prev); } }
@Override @SuppressWarnings("unchecked") protected Object executeImpl(Object languageContext, TruffleObject receiver, Object[] args, int offset) { List<?> keys = null; int keysSize = 0; int elemSize = 0; TruffleMap<Object, Object> originalMap = (TruffleMap<Object, Object>) args[offset]; boolean includeInternal = (boolean) args[offset + 1]; if (cache.memberKey && sendHasKeys(hasKeys, receiver)) { TruffleObject truffleKeys; try { truffleKeys = sendKeys(keysNode, receiver, includeInternal); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter(); return Collections.emptySet(); } keys = TruffleList.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 @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); }
size = (Number) ForeignAccess.sendGetSize(getSize, tKeys); } catch (UnsupportedMessageException e) { throw new AssertionError("Invalid node object: the returned KEYS object must have a size.");
size = (Number) ForeignAccess.sendGetSize(getSize, tKeys); } catch (UnsupportedMessageException e) { throw new AssertionError("Invalid node object: the returned KEYS object must have a size.");