/** @since 0.17 or earlier */ @Override public ForeignAccess getForeignAccess() { return getShapeImpl().getForeignAccessFactory(this); } }
/** @since 0.17 or earlier */ @Override public final boolean updateShape() { return getShapeImpl().getLayout().getStrategy().updateShape(this); }
/** @since 0.17 or earlier */ @Override @TruffleBoundary public void define(Object key, Object value, int flags, LocationFactory locationFactory) { ShapeImpl oldShape = getShapeImpl(); oldShape.getLayout().getStrategy().objectDefineProperty(this, key, value, flags, locationFactory, oldShape); }
/** @since 0.17 or earlier */ @Override @TruffleBoundary public void define(Object key, Object value, int flags) { define(key, value, flags, getShapeImpl().getLayout().getStrategy().getDefaultLocationFactory()); }
/** @since 0.17 or earlier */ @Override @TruffleBoundary public boolean delete(Object key) { ShapeImpl oldShape = getShapeImpl(); Property existing = oldShape.getProperty(key); if (existing != null) { oldShape.getLayout().getStrategy().objectRemoveProperty(this, existing, oldShape); return true; } else { return false; } }
private void copyProperties(DynamicObject fromObject) { ShapeImpl fromShape = (ShapeImpl) fromObject.getShape(); ShapeImpl toShape = getShapeImpl(); assert toShape.isRelated(fromShape); assert toShape.isValid(); assert !fromShape.isShared(); PropertyMap fromMap = fromShape.getPropertyMap(); for (Iterator<Property> toMapIt = toShape.getPropertyMap().reverseOrderedValueIterator(); toMapIt.hasNext();) { Property toProperty = toMapIt.next(); Property fromProperty = fromMap.get(toProperty.getKey()); // copy only if property has a location and it's not the same as the source location if (!toProperty.getLocation().isValue() && !toProperty.getLocation().equals(fromProperty.getLocation())) { toProperty.setInternal(this, fromProperty.get(fromObject, false)); assert toShape.isValid(); } } }