This is an abstract value that is known to be an object, but for which we may not know one or more of the following:
- Its identity.
- All of its properties.
- All of the property values.
- If all of the unknown properties are well behaved.
To specify an abstract objects whose identity is not known, use __abstract("object")
. To specify the known properties of such an object use a series of expressions of the form __assumeDataProperty(abstractObject, "propertyName", value)
.
To specify an abstract object whose identify is known, along with its known properties, use an expression of the form __abstract({propertyName: value})
.
The value specified for a property with either method can be concrete or abstract as appropriate.
Any object that is created via __abstract
is assumed to have unknown properties and accessing an unknown property on an abstract object causes Prepack to issue an error message because it is not known if accessing such property might invoke a badly behaved accessor.
If it is known that an abstract object only has well behaved properties, this can be specified in the model by using an expression of the form __makeSimple(abstractObject)
.