@Override public boolean isReadable() { checkValid(); return KeyInfo.isReadable(keyInfo); }
@Override public boolean isReadable() { checkValid(); return KeyInfo.isReadable(keyInfo); }
@Override public boolean isReadable() { checkValid(); return KeyInfo.isReadable(keyInfo); }
@Override public boolean isReadable() { checkValid(); return KeyInfo.isReadable(keyInfo); }
@Override protected Object executeImpl(PolyglotLanguageContext languageContext, TruffleObject receiver, Object[] args) { Object key = args[ARGUMENT_OFFSET]; if (isValidKey(receiver, key)) { return KeyInfo.isReadable(sendKeyInfo(keyInfo, receiver, key)); } return false; }
@Override protected Object executeImpl(Object languageContext, TruffleObject receiver, Object[] args, int offset) { Object key = args[offset]; if (isValidKey(receiver, key)) { return KeyInfo.isReadable(sendKeyInfo(keyInfo, receiver, key)); } return false; }
@Override protected Object executeImpl(PolyglotLanguageContext languageContext, TruffleObject receiver, Object[] args) { Object key = args[ARGUMENT_OFFSET]; Object result = null; if (isValidKey(receiver, key) && KeyInfo.isReadable(sendKeyInfo(keyInfo, receiver, key))) { try { result = toHost.execute(sendRead(read, receiver, key), cache.valueClass, cache.valueType, languageContext); } catch (ClassCastException | NullPointerException e) { // expected exceptions from casting to the host value. throw e; } catch (UnknownIdentifierException e) { return null; } catch (UnsupportedMessageException e) { // be robust for misbehaving languages return null; } } return result; }
@Override protected Object executeImpl(Object languageContext, TruffleObject receiver, Object[] args, int offset) { Object key = args[offset]; Object result = null; if (isValidKey(receiver, key) && KeyInfo.isReadable(sendKeyInfo(keyInfo, receiver, key))) { try { result = toHost.execute(sendRead(read, receiver, key), cache.valueClass, cache.valueType, languageContext); } catch (ClassCastException | NullPointerException e) { // expected exceptions from casting to the host value. throw e; } catch (UnknownIdentifierException e) { return null; } catch (UnsupportedMessageException e) { // be robust for misbehaving languages return null; } } return result; }
Object lookupGuest(String symbolName) { ensureInitialized(null); Iterable<?> topScopes = VMAccessor.instrumentAccess().findTopScopes(env); for (Object topScope : topScopes) { Scope scope = (Scope) topScope; TruffleObject variables = (TruffleObject) scope.getVariables(); int symbolInfo = ForeignAccess.sendKeyInfo(keyInfoNode, variables, symbolName); if (KeyInfo.isExisting(symbolInfo) && KeyInfo.isReadable(symbolInfo)) { try { return ForeignAccess.sendRead(readNode, variables, symbolName); } catch (InteropException ex) { throw new AssertionError(symbolName, ex); } } } return null; }
@Override Object execute(TruffleObject[] scopes, int length, Object[] arguments, int offset) throws UnknownIdentifierException, UnsupportedMessageException { String identifier = expectIdentifier(arguments, offset, Message.READ); if (isConstantSingleLength()) { return ForeignAccess.sendRead(readNode, scopes[0], identifier); } else if (length > 0) { for (int i = 0; i < length; i++) { TruffleObject scopeObject = scopes[i]; if (KeyInfo.isReadable(ForeignAccess.sendKeyInfo(keyInfoNode, scopeObject, identifier))) { return ForeignAccess.sendRead(readNode, scopeObject, identifier); } } } throw UnknownIdentifierException.raise(identifier); }
@Override Object execute(TruffleObject[] scopes, int length, Object[] arguments, int offset) throws UnknownIdentifierException, UnsupportedMessageException { String identifier = expectIdentifier(arguments, offset, Message.READ); if (isConstantSingleLength()) { return ForeignAccess.sendRead(readNode, scopes[0], identifier); } else if (length > 0) { for (int i = 0; i < length; i++) { TruffleObject scopeObject = scopes[i]; if (KeyInfo.isReadable(ForeignAccess.sendKeyInfo(keyInfoNode, scopeObject, identifier))) { return ForeignAccess.sendRead(readNode, scopeObject, identifier); } } } throw UnknownIdentifierException.raise(identifier); }
Object result = null; int info = sendKeyInfo(keyInfo, receiver, key); if (KeyInfo.isReadable(info)) { try { result = toHost.execute(sendRead(read, receiver, key), cache.valueClass, cache.valueType, languageContext);
if (KeyInfo.isReadable(info)) { try { result = toHost.execute(sendRead(read, receiver, key), cache.valueClass, cache.valueType, languageContext);
Object result = null; int info = sendKeyInfo(keyInfo, receiver, key); if (KeyInfo.isReadable(info)) { try { result = toHost.execute(sendRead(read, receiver, key), cache.valueClass, cache.valueType, languageContext);
if (KeyInfo.isReadable(info)) { try { result = toHost.execute(sendRead(read, receiver, key), cache.valueClass, cache.valueType, languageContext);
@Override protected Object executeImpl(Object languageContext, TruffleObject receiver, Object[] args, int offset) { Object key = args[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) { } catch (UnsupportedMessageException e) { } } try { sendRemove(remove, receiver, key); } catch (UnknownIdentifierException e) { CompilerDirectives.transferToInterpreter(); throw JavaInteropErrors.invalidListIndex(languageContext, receiver, cache.valueType, (int) key); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter(); throw JavaInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "remove"); } return cache.valueClass.cast(result); } else { CompilerDirectives.transferToInterpreter(); throw JavaInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "remove"); } } }
@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) { } catch (UnsupportedMessageException e) { } } try { sendRemove(remove, receiver, key); } 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, "remove"); } return cache.valueClass.cast(result); } else { CompilerDirectives.transferToInterpreter(); throw HostInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "remove"); } } }
@Override protected Object executeImpl(Object languageContext, TruffleObject receiver, Object[] args, int offset) { Object key = args[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 JavaInteropErrors.invalidListIndex(languageContext, receiver, cache.valueType, (int) key); } catch (UnsupportedMessageException e) { CompilerDirectives.transferToInterpreter(); throw JavaInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "get()"); } } else { CompilerDirectives.transferToInterpreter(); throw JavaInteropErrors.invalidListIndex(languageContext, receiver, cache.valueType, (int) key); } } else { CompilerDirectives.transferToInterpreter(); throw JavaInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "get()"); } return result; }
@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; }
} else { int keyInfo = ForeignAccess.sendKeyInfo(keyInfoNode, truffleReceiver, key); if (KeyInfo.isReadable(keyInfo)) { value = toHostValue.execute(ForeignAccess.sendRead(readMemberNode, truffleReceiver, key)); } else {