@Override public boolean isWritable() { checkValid(); return KeyInfo.isWritable(keyInfo); }
@Override public boolean isWritable() { checkValid(); return KeyInfo.isWritable(keyInfo); }
@Override public boolean isWritable() { checkValid(); return KeyInfo.isWritable(keyInfo); }
@Override public boolean isWritable() { checkValid(); return KeyInfo.isWritable(keyInfo); }
if (KeyInfo.isWritable(keyInfo)) { throw new AssertionError("Invalid node object: The key " + key + " is marked as writable but node objects must not be writable.");
if (KeyInfo.isWritable(keyInfo)) { throw new AssertionError("Invalid node object: The key " + key + " is marked as writable but node objects must not be writable.");
@Override Object execute(TruffleObject[] scopes, int length, Object[] arguments, int offset) throws InteropException { String identifier = expectIdentifier(arguments, offset, Message.WRITE); Object value = arguments[offset + 1]; if (isConstantSingleLength()) { return ForeignAccess.sendWrite(writeNode, scopes[0], identifier, value); } else if (length > 0) { for (int i = 0; i < length; i++) { TruffleObject scopeObject = scopes[i]; if (KeyInfo.isWritable(ForeignAccess.sendKeyInfo(keyInfoNode, scopeObject, identifier))) { return ForeignAccess.sendWrite(writeNode, scopeObject, identifier, value); } } } throw UnsupportedMessageException.raise(Message.WRITE); }
@Override Object execute(TruffleObject[] scopes, int length, Object[] arguments, int offset) throws InteropException { String identifier = expectIdentifier(arguments, offset, Message.WRITE); Object value = arguments[offset + 1]; if (isConstantSingleLength()) { return ForeignAccess.sendWrite(writeNode, scopes[0], identifier, value); } else if (length > 0) { for (int i = 0; i < length; i++) { TruffleObject scopeObject = scopes[i]; if (KeyInfo.isWritable(ForeignAccess.sendKeyInfo(keyInfoNode, scopeObject, identifier))) { return ForeignAccess.sendWrite(writeNode, scopeObject, identifier, value); } } } throw UnsupportedMessageException.raise(Message.WRITE); }
@Override protected Object executeImpl(Object languageContext, TruffleObject receiver, Object[] args, int offset) { Object key = args[offset]; Object result = null; assert key instanceof Integer; Object originalValue = args[offset + 1]; Object value = toGuest.apply(languageContext, originalValue); if (sendHasSize(hasSize, receiver)) { if (KeyInfo.isWritable(sendKeyInfo(keyInfo, receiver, key))) { try { sendWrite(write, receiver, key, value); } 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, "set"); } catch (UnsupportedTypeException e) { CompilerDirectives.transferToInterpreter(); throw JavaInteropErrors.invalidListValue(languageContext, receiver, cache.valueType, (int) key, value); } return cache.valueClass.cast(result); } else { throw JavaInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "set"); } } throw JavaInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "set"); } }
Object value = args[offset + 1]; int info = sendKeyInfo(keyInfo, receiver, key); if (!KeyInfo.isExisting(info) || (KeyInfo.isWritable(info) && KeyInfo.isReadable(info))) { if (KeyInfo.isExisting(info)) { try {
@Override protected Object executeImpl(PolyglotLanguageContext languageContext, TruffleObject receiver, Object[] args) { Object key = args[ARGUMENT_OFFSET]; Object result = null; assert key instanceof Integer; Object originalValue = args[ARGUMENT_OFFSET + 1]; Object value = toGuest.apply(languageContext, originalValue); if (sendHasSize(hasSize, receiver)) { if (KeyInfo.isWritable(sendKeyInfo(keyInfo, receiver, key))) { try { sendWrite(write, receiver, key, value); } 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, "set"); } catch (UnsupportedTypeException e) { CompilerDirectives.transferToInterpreter(); throw HostInteropErrors.invalidListValue(languageContext, receiver, cache.valueType, (int) key, value); } return cache.valueClass.cast(result); } else { throw HostInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "set"); } } throw HostInteropErrors.listUnsupported(languageContext, receiver, cache.valueType, "set"); } }
Object value = args[ARGUMENT_OFFSET + 1]; int info = sendKeyInfo(keyInfo, receiver, key); if (!KeyInfo.isExisting(info) || (KeyInfo.isWritable(info) && KeyInfo.isReadable(info))) { if (KeyInfo.isExisting(info)) { try {
if (KeyInfo.isExisting(ro)) { assertTrue(KeyInfo.isReadable(ro)); assertFalse(KeyInfo.isWritable(ro)); assertFalse(KeyInfo.isInternal(ro)); numKeys++; if (KeyInfo.isExisting(wo)) { assertFalse(KeyInfo.isReadable(wo)); assertTrue(KeyInfo.isWritable(wo)); assertFalse(KeyInfo.isInternal(wo)); numKeys++; if (KeyInfo.isExisting(rw)) { assertTrue(KeyInfo.isReadable(rw)); assertTrue(KeyInfo.isWritable(rw)); assertFalse(KeyInfo.isInternal(rw)); numKeys++;