/** @since 0.17 or earlier */ @TruffleBoundary @Override public ShapeImpl defineProperty(Object key, Object value, int flags, LocationFactory locationFactory) { return layout.getStrategy().defineProperty(this, key, value, flags, locationFactory); }
/** @since 0.17 or earlier */ @TruffleBoundary @Override public ShapeImpl defineProperty(Object key, Object value, int flags, LocationFactory locationFactory) { return layout.getStrategy().defineProperty(this, key, value, flags, locationFactory); }
/** @since 0.17 or earlier */ protected ShapeImpl defineProperty(ShapeImpl shape, Object key, Object value, int flags, LocationFactory locationFactory) { ShapeImpl oldShape = shape; if (!oldShape.isValid()) { oldShape = ensureValid(oldShape); } Property existing = oldShape.getProperty(key); return defineProperty(oldShape, key, value, flags, locationFactory, existing); }
/** @since 0.17 or earlier */ protected ShapeImpl defineProperty(ShapeImpl shape, Object key, Object value, int flags, LocationFactory locationFactory) { ShapeImpl oldShape = shape; if (!oldShape.isValid()) { oldShape = ensureValid(oldShape); } Property existing = oldShape.getProperty(key); return defineProperty(oldShape, key, value, flags, locationFactory, existing); }
/** @since 0.17 or earlier */ protected void objectDefineProperty(DynamicObjectImpl object, Object key, Object value, int flags, LocationFactory locationFactory, ShapeImpl currentShape) { ShapeImpl oldShape = currentShape; Property oldProperty = oldShape.getProperty(key); ShapeImpl newShape = defineProperty(oldShape, key, value, flags, locationFactory, oldProperty); if (oldShape == newShape) { assert oldProperty.equals(newShape.getProperty(key)); oldProperty.setSafe(object, value, oldShape); } else { Property newProperty = newShape.getProperty(key); newProperty.setSafe(object, value, oldShape, newShape); } }
/** @since 0.17 or earlier */ protected void objectDefineProperty(DynamicObjectImpl object, Object key, Object value, int flags, LocationFactory locationFactory, ShapeImpl currentShape) { ShapeImpl oldShape = currentShape; Property oldProperty = oldShape.getProperty(key); ShapeImpl newShape = defineProperty(oldShape, key, value, flags, locationFactory, oldProperty); if (oldShape == newShape) { assert oldProperty.equals(newShape.getProperty(key)); oldProperty.setSafe(object, value, oldShape); } else { Property newProperty = newShape.getProperty(key); newProperty.setSafe(object, value, oldShape, newShape); } }
/** @since 0.17 or earlier */ protected void propertySetFallback(Property property, DynamicObject store, Object value, ShapeImpl currentShape) { ShapeImpl oldShape = currentShape; ShapeImpl newShape = defineProperty(oldShape, property.getKey(), value, property.getFlags(), getDefaultLocationFactory()); Property newProperty = newShape.getProperty(property.getKey()); newProperty.setSafe(store, value, oldShape, newShape); }
/** @since 0.17 or earlier */ protected void propertySetFallback(Property property, DynamicObject store, Object value, ShapeImpl currentShape) { ShapeImpl oldShape = currentShape; ShapeImpl newShape = defineProperty(oldShape, property.getKey(), value, property.getFlags(), getDefaultLocationFactory()); Property newProperty = newShape.getProperty(property.getKey()); newProperty.setSafe(store, value, oldShape, newShape); }