Class Shape

java.lang.Object
com.oracle.truffle.api.object.Shape
Direct Known Subclasses:
ShapeImpl

public abstract class Shape extends Object
Shape objects create a mapping of Property objects to Locations. Shapes are immutable; adding or deleting a property yields a new Shape which links to the old one. This allows inline caching to simply check the identity of an object's Shape to determine if the cache is valid. There is one exception to this immutability, the transition map, but that is used simply to assure that an identical series of property additions and deletions will yield the same Shape object.
See Also:
  • Constructor Details

    • Shape

      public Shape()
  • Method Details

    • getProperty

      public abstract Property getProperty(Object key)
      Get a property entry by key.
      Parameters:
      key - the identifier to look up
      Returns:
      a Property object, or null if not found
    • addProperty

      public abstract Shape addProperty(Property property)
      Add a new property in the map, yielding a new or cached Shape object.
      Parameters:
      property - the property to add
      Returns:
      the new Shape
    • getProperties

      public abstract Iterable<Property> getProperties()
      An Iterable over the shape's properties in insertion order.
    • getPropertyList

      public abstract List<Property> getPropertyList(Shape.Pred<Property> filter)
      Get a list of properties that this Shape stores.
      Returns:
      list of properties
    • getPropertyList

      public abstract List<Property> getPropertyList()
      Get a list of all properties that this Shape stores.
      Returns:
      list of properties
    • getPropertyListInternal

      public abstract List<Property> getPropertyListInternal(boolean ascending)
      Returns all (also hidden) property objects in this shape.
      Parameters:
      ascending - desired order (true for insertion order, false for reverse insertion order)
    • getKeyList

      public abstract List<Object> getKeyList(Shape.Pred<Property> filter)
      Get a filtered list of property keys in insertion order.
    • getKeyList

      public abstract List<Object> getKeyList()
      Get a list of all property keys in insertion order.
    • getKeys

      public abstract Iterable<Object> getKeys()
      Get all property keys in insertion order.
    • getValidAssumption

      public abstract Assumption getValidAssumption()
      Get an assumption that the shape is valid.
    • isValid

      public abstract boolean isValid()
      Check whether this shape is valid.
    • getLeafAssumption

      public abstract Assumption getLeafAssumption()
      Get an assumption that the shape is a leaf.
    • isLeaf

      public abstract boolean isLeaf()
      Check whether this shape is a leaf in the transition graph, i.e. transitionless.
    • getParent

      public abstract Shape getParent()
      Returns:
      the parent shape or null if none.
    • hasProperty

      public abstract boolean hasProperty(Object key)
      Check whether the shape has a property with the given key.
    • removeProperty

      public abstract Shape removeProperty(Property property)
      Remove the given property from the shape.
    • replaceProperty

      public abstract Shape replaceProperty(Property oldProperty, Property newProperty)
      Replace a property in the shape.
    • getLastProperty

      public abstract Property getLastProperty()
      Get the last added property.
    • getId

      public abstract int getId()
    • append

      public abstract Shape append(Property oldProperty)
      Append the property, relocating it to the next allocated location.
    • allocator

      public abstract Shape.Allocator allocator()
      Obtain an Shape.Allocator instance for the purpose of allocating locations.
    • copyOverPropertiesInternal

      public abstract Shape copyOverPropertiesInternal(Shape destination)
      For copying over properties after exchanging the prototype of an object.
    • getPropertyCount

      public abstract int getPropertyCount()
      Get number of properties in this shape.
    • getObjectType

      public abstract ObjectType getObjectType()
      Get the shape's operations.
    • getRoot

      public abstract Shape getRoot()
      Get the root shape.
    • check

      public abstract boolean check(DynamicObject subject)
      Check whether this shape is identical to the given shape.
    • getLayout

      public abstract Layout getLayout()
      Get the shape's layout.
    • getData

      public abstract Object getData()
      Get the shape's custom data.
    • getSharedData

      public abstract Object getSharedData()
      Get the shape's shared data.
    • hasTransitionWithKey

      public abstract boolean hasTransitionWithKey(Object key)
      Query whether the shape has a transition with the given key.
    • createSeparateShape

      public abstract Shape createSeparateShape(Object sharedData)
      Clone off a separate shape with new shared data.
    • changeType

      public abstract Shape changeType(ObjectType newOps)
      Change the shape's type, yielding a new shape.
    • reservePrimitiveExtensionArray

      public abstract Shape reservePrimitiveExtensionArray()
      Reserve the primitive extension array field.
    • newInstance

      public abstract DynamicObject newInstance()
      Create a new DynamicObject instance with this shape.
    • createFactory

      public abstract DynamicObjectFactory createFactory()
      Create a DynamicObjectFactory for creating instances of this shape.
    • getMutex

      public abstract Object getMutex()
      Get mutex object shared by related shapes, i.e. shapes with a common root.
    • getObjectArraySize

      public abstract int getObjectArraySize()
    • getObjectFieldSize

      public abstract int getObjectFieldSize()
    • getPrimitiveArraySize

      public abstract int getPrimitiveArraySize()
    • getPrimitiveFieldSize

      public abstract int getPrimitiveFieldSize()
    • getObjectArrayCapacity

      public abstract int getObjectArrayCapacity()
    • getPrimitiveArrayCapacity

      public abstract int getPrimitiveArrayCapacity()
    • hasPrimitiveArray

      public abstract boolean hasPrimitiveArray()
    • isRelated

      public abstract boolean isRelated(Shape other)
      Are these two shapes related, i.e. do they have the same root?
      Parameters:
      other - Shape to compare to
      Returns:
      true if one shape is an upcast of the other, or the Shapes are equal
    • tryMerge

      public abstract Shape tryMerge(Shape other)
    • accept

      public <R> R accept(ShapeVisitor<R> visitor)