public abstract class IdScriptableObject extends ScriptableObject implements IdFunctionCall
Any descendant should implement at least the following methods: findInstanceIdInfo getInstanceIdName execIdCall methodArity
To define non-function properties, the descendant should override getInstanceIdValue setInstanceIdValue to get/set property value and provide its default attributes.
To customize initialization of constructor and prototype objects, descendant may override scopeInit or fillConstructorProperties methods.
ScriptableObject.KeyComparator
CONST, DONTENUM, EMPTY, PERMANENT, READONLY, UNINITIALIZED_CONST
NOT_FOUND
Constructor and Description |
---|
IdScriptableObject() |
IdScriptableObject(Scriptable scope,
Scriptable prototype) |
Modifier and Type | Method and Description |
---|---|
void |
activatePrototypeMap(int maxPrototypeId) |
protected void |
addIdFunctionProperty(Scriptable obj,
java.lang.Object tag,
int id,
java.lang.String name,
int arity) |
protected java.lang.Object |
defaultGet(java.lang.String name) |
protected boolean |
defaultHas(java.lang.String name) |
protected void |
defaultPut(java.lang.String name,
java.lang.Object value) |
protected void |
defineOwnProperty(Context cx,
java.lang.Object key,
ScriptableObject desc,
boolean checkValid)
Defines a property on an object.
|
void |
delete(java.lang.String name)
Removes a named property from the object.
|
void |
delete(Symbol key)
Removes an object like the others, but using a Symbol as the key.
|
protected static <T> T |
ensureType(java.lang.Object obj,
java.lang.Class<T> clazz,
IdFunctionObject f)
Utility method to check the type and do the cast or throw an incompatible call error.
|
java.lang.Object |
execIdCall(IdFunctionObject f,
Context cx,
Scriptable scope,
Scriptable thisObj,
java.lang.Object[] args)
'thisObj' will be null if invoked as constructor, in which case * instance of Scriptable
should be returned.
|
IdFunctionObject |
exportAsJSClass(int maxPrototypeId,
Scriptable scope,
boolean sealed) |
protected void |
fillConstructorProperties(IdFunctionObject ctor) |
protected int |
findInstanceIdInfo(java.lang.String name)
Map name to id of instance property.
|
protected int |
findInstanceIdInfo(Symbol key)
Map name to id of instance property.
|
protected int |
findPrototypeId(java.lang.String name) |
protected int |
findPrototypeId(Symbol key) |
java.lang.Object |
get(java.lang.String name,
Scriptable start)
Returns the value of the named property or NOT_FOUND.
|
java.lang.Object |
get(Symbol key,
Scriptable start)
Another version of Get that supports Symbol keyed properties.
|
int |
getAttributes(java.lang.String name)
Get the attributes of a named property.
|
int |
getAttributes(Symbol key) |
protected java.lang.String |
getInstanceIdName(int id)
Map id back to property name it defines.
|
protected java.lang.Object |
getInstanceIdValue(int id)
Get id value.
|
protected int |
getMaxInstanceId()
Get maximum id findInstanceIdInfo can generate.
|
protected ScriptableObject |
getOwnPropertyDescriptor(Context cx,
java.lang.Object id) |
boolean |
has(java.lang.String name,
Scriptable start)
Returns true if the named property is defined.
|
boolean |
has(Symbol key,
Scriptable start)
A version of "has" that supports symbols.
|
boolean |
hasPrototypeMap() |
void |
initPrototypeConstructor(IdFunctionObject f) |
protected void |
initPrototypeId(int id) |
IdFunctionObject |
initPrototypeMethod(java.lang.Object tag,
int id,
java.lang.String name,
int arity) |
IdFunctionObject |
initPrototypeMethod(java.lang.Object tag,
int id,
java.lang.String propertyName,
java.lang.String functionName,
int arity) |
IdFunctionObject |
initPrototypeMethod(java.lang.Object tag,
int id,
Symbol key,
java.lang.String functionName,
int arity) |
void |
initPrototypeValue(int id,
java.lang.String name,
java.lang.Object value,
int attributes) |
void |
initPrototypeValue(int id,
Symbol key,
java.lang.Object value,
int attributes) |
protected static int |
instanceIdInfo(int attributes,
int id) |
void |
put(java.lang.String name,
Scriptable start,
java.lang.Object value)
Sets the value of the named property, creating it if need be.
|
void |
put(Symbol key,
Scriptable start,
java.lang.Object value)
Implementation of put required by SymbolScriptable objects.
|
void |
setAttributes(java.lang.String name,
int attributes)
Set the attributes of a named property.
|
protected void |
setInstanceIdAttributes(int id,
int attr)
Update the attributes of the given instance property.
|
protected void |
setInstanceIdValue(int id,
java.lang.Object value)
Set or delete id value.
|
applyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildDataDescriptor, callMethod, callMethod, checkPropertyChange, checkPropertyDefinition, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, defineOwnProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, ensureScriptable, ensureScriptableObject, ensureSymbolScriptable, equivalentValues, get, get, getAllIds, getArrayPrototype, getAssociatedValue, getAttributes, getAttributes, getAttributes, getClassName, getClassPrototype, getDefaultValue, getDefaultValue, getExternalArrayData, getExternalArrayLength, getFunctionPrototype, getGeneratorFunctionPrototype, getGetterOrSetter, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getProperty, getPropertyIds, getPrototype, getTopLevelScope, getTopScopeValue, getTypedProperty, getTypedProperty, getTypeOf, has, hasInstance, hasProperty, hasProperty, hasProperty, isAccessorDescriptor, isConst, isDataDescriptor, isEmpty, isExtensible, isFalse, isGenericDescriptor, isGetterOrSetter, isSealed, isTrue, preventExtensions, put, putConst, putConstProperty, putProperty, putProperty, putProperty, querySlot, redefineProperty, sameValue, sealObject, setAttributes, setAttributes, setAttributes, setAttributes, setCommonDescriptorProperties, setExternalArrayData, setGetterOrSetter, setParentScope, setPrototype, size
public IdScriptableObject()
public IdScriptableObject(Scriptable scope, Scriptable prototype)
protected final boolean defaultHas(java.lang.String name)
protected final java.lang.Object defaultGet(java.lang.String name)
protected final void defaultPut(java.lang.String name, java.lang.Object value)
public boolean has(java.lang.String name, Scriptable start)
ScriptableObject
has
in interface Scriptable
has
in class ScriptableObject
name
- the name of the propertystart
- the object in which the lookup beganScriptable.get(String, Scriptable)
,
ScriptableObject.getProperty(Scriptable, String)
public boolean has(Symbol key, Scriptable start)
ScriptableObject
has
in interface SymbolScriptable
has
in class ScriptableObject
public java.lang.Object get(java.lang.String name, Scriptable start)
ScriptableObject
If the property was created using defineProperty, the appropriate getter method is called.
get
in interface Scriptable
get
in class ScriptableObject
name
- the name of the propertystart
- the object in which the lookup beganContext.getUndefinedValue()
public java.lang.Object get(Symbol key, Scriptable start)
ScriptableObject
get
in interface SymbolScriptable
get
in class ScriptableObject
public void put(java.lang.String name, Scriptable start, java.lang.Object value)
ScriptableObject
If the property was created using defineProperty, the appropriate setter method is called.
If the property's attributes include READONLY, no action is taken. This method will actually set the property in the start object.
put
in interface Scriptable
put
in class ScriptableObject
name
- the name of the propertystart
- the object whose property is being setvalue
- value to set the property toScriptable.has(String, Scriptable)
,
Scriptable.get(String, Scriptable)
,
ScriptableObject.putProperty(Scriptable, String, Object)
,
Context.toObject(Object, Scriptable)
public void put(Symbol key, Scriptable start, java.lang.Object value)
ScriptableObject
put
in interface SymbolScriptable
put
in class ScriptableObject
public void delete(java.lang.String name)
ScriptableObject
If the property is not found, or it has the PERMANENT attribute, no action is taken.
delete
in interface Scriptable
delete
in class ScriptableObject
name
- the name of the propertyScriptable.get(String, Scriptable)
,
ScriptableObject.deleteProperty(Scriptable, String)
public void delete(Symbol key)
ScriptableObject
delete
in interface SymbolScriptable
delete
in class ScriptableObject
public int getAttributes(java.lang.String name)
ScriptableObject
The property is specified by name
as defined for has
.
getAttributes
in class ScriptableObject
name
- the identifier for the propertyScriptableObject.has(String, Scriptable)
,
ScriptableObject.READONLY
,
ScriptableObject.DONTENUM
,
ScriptableObject.PERMANENT
,
ScriptableObject.EMPTY
public int getAttributes(Symbol key)
getAttributes
in class ScriptableObject
public void setAttributes(java.lang.String name, int attributes)
ScriptableObject
The property is specified by name
as defined for has
.
The possible attributes are READONLY, DONTENUM, and PERMANENT. Combinations of attributes are expressed by the bitwise OR of attributes. EMPTY is the state of no attributes set. Any unused bits are reserved for future use.
setAttributes
in class ScriptableObject
name
- the name of the propertyattributes
- the bitset of attributesScriptable.has(String, Scriptable)
,
ScriptableObject.READONLY
,
ScriptableObject.DONTENUM
,
ScriptableObject.PERMANENT
,
ScriptableObject.EMPTY
protected int getMaxInstanceId()
protected static int instanceIdInfo(int attributes, int id)
protected int findInstanceIdInfo(java.lang.String name)
instanceIdInfo(int, int)
.protected int findInstanceIdInfo(Symbol key)
instanceIdInfo(int, int)
.protected java.lang.String getInstanceIdName(int id)
protected java.lang.Object getInstanceIdValue(int id)
protected void setInstanceIdValue(int id, java.lang.Object value)
protected void setInstanceIdAttributes(int id, int attr)
id
- the instance property idattr
- the new attribute bitsetpublic java.lang.Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
execIdCall
in interface IdFunctionCall
public final IdFunctionObject exportAsJSClass(int maxPrototypeId, Scriptable scope, boolean sealed)
public final boolean hasPrototypeMap()
public final void activatePrototypeMap(int maxPrototypeId)
public final IdFunctionObject initPrototypeMethod(java.lang.Object tag, int id, java.lang.String name, int arity)
public final IdFunctionObject initPrototypeMethod(java.lang.Object tag, int id, java.lang.String propertyName, java.lang.String functionName, int arity)
public final IdFunctionObject initPrototypeMethod(java.lang.Object tag, int id, Symbol key, java.lang.String functionName, int arity)
public final void initPrototypeConstructor(IdFunctionObject f)
public final void initPrototypeValue(int id, java.lang.String name, java.lang.Object value, int attributes)
public final void initPrototypeValue(int id, Symbol key, java.lang.Object value, int attributes)
protected void initPrototypeId(int id)
protected int findPrototypeId(java.lang.String name)
protected int findPrototypeId(Symbol key)
protected void fillConstructorProperties(IdFunctionObject ctor)
protected void addIdFunctionProperty(Scriptable obj, java.lang.Object tag, int id, java.lang.String name, int arity)
protected static <T> T ensureType(java.lang.Object obj, java.lang.Class<T> clazz, IdFunctionObject f)
private static NativeSomething realThis(Scriptable thisObj, IdFunctionObject f) { return ensureType(thisObj, NativeSomething.class, f); }
obj
- the object to check/castclazz
- the target typef
- function that is attempting to convert 'this' object.EcmaError
- if the cast failed.protected void defineOwnProperty(Context cx, java.lang.Object key, ScriptableObject desc, boolean checkValid)
ScriptableObject
Based on [[DefineOwnProperty]] from 8.12.10 of the spec.
defineOwnProperty
in class ScriptableObject
cx
- the current Contextkey
- the name/index of the propertydesc
- the new property descriptor, as described in 8.6.1checkValid
- whether to perform validity checksprotected ScriptableObject getOwnPropertyDescriptor(Context cx, java.lang.Object id)
getOwnPropertyDescriptor
in class ScriptableObject