Package org.mozilla.javascript
Class NativeSymbol
- java.lang.Object
-
- org.mozilla.javascript.ScriptableObject
-
- org.mozilla.javascript.IdScriptableObject
-
- org.mozilla.javascript.NativeSymbol
-
- All Implemented Interfaces:
java.io.Serializable
,ConstProperties
,DebuggableObject
,IdFunctionCall
,Scriptable
,Symbol
,SymbolScriptable
public class NativeSymbol extends IdScriptableObject implements Symbol
This is an implementation of the standard "Symbol" type that implements all of its weird properties. One of them is that some objects can have an "internal data slot" that makes them a Symbol and others cannot.- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.mozilla.javascript.ScriptableObject
ScriptableObject.GetterSlot, ScriptableObject.KeyComparator, ScriptableObject.Slot, ScriptableObject.SlotAccess
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
CLASS_NAME
private static java.lang.Object
CONSTRUCTOR_SLOT
private static int
ConstructorId_for
private static int
ConstructorId_keyFor
private static java.lang.Object
GLOBAL_TABLE_KEY
private static int
Id_constructor
private static int
Id_toString
private static int
Id_valueOf
private SymbolKey
key
private static int
MAX_PROTOTYPE_ID
private static long
serialVersionUID
private NativeSymbol
symbolData
private static int
SymbolId_toPrimitive
private static int
SymbolId_toStringTag
static java.lang.String
TYPE_NAME
-
Fields inherited from class org.mozilla.javascript.ScriptableObject
CONST, DONTENUM, EMPTY, PERMANENT, READONLY, UNINITIALIZED_CONST
-
Fields inherited from interface org.mozilla.javascript.Scriptable
NOT_FOUND
-
-
Constructor Summary
Constructors Modifier Constructor Description private
NativeSymbol(java.lang.String desc)
This has to be used only for constructing the prototype instance.NativeSymbol(NativeSymbol s)
private
NativeSymbol(SymbolKey key)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static NativeSymbol
construct(Context cx, Scriptable scope, java.lang.Object[] args)
Use this when we need to create symbols internally because of the convoluted way we have to construct them.private static void
createStandardSymbol(Context cx, Scriptable scope, ScriptableObject ctor, java.lang.String name, SymbolKey key)
boolean
equals(java.lang.Object x)
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.protected void
fillConstructorProperties(IdFunctionObject ctor)
protected int
findPrototypeId(java.lang.String s)
protected int
findPrototypeId(Symbol key)
java.lang.String
getClassName()
Return the name of the class.private java.util.Map<java.lang.String,NativeSymbol>
getGlobalMap()
(package private) SymbolKey
getKey()
private static NativeSymbol
getSelf(java.lang.Object thisObj)
java.lang.String
getTypeOf()
Gets the value that will be returned by calling the typeof operator on this object.int
hashCode()
static void
init(Context cx, Scriptable scope, boolean sealed)
protected void
initPrototypeId(int id)
private static boolean
isStrictMode()
boolean
isSymbol()
Object() on a Symbol constructs an object which is NOT a symbol, but which has an "internal data slot" that is.private static NativeSymbol
js_constructor(java.lang.Object[] args)
private java.lang.Object
js_for(Context cx, Scriptable scope, java.lang.Object[] args)
private java.lang.Object
js_keyFor(Context cx, Scriptable scope, java.lang.Object[] args)
private java.lang.Object
js_valueOf()
void
put(int index, Scriptable start, java.lang.Object value)
Sets the value of the indexed property, creating it if need be.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.java.lang.String
toString()
-
Methods inherited from class org.mozilla.javascript.IdScriptableObject
activatePrototypeMap, addIdFunctionProperty, defaultGet, defaultHas, defaultPut, defineOwnProperty, delete, delete, exportAsJSClass, findInstanceIdInfo, findInstanceIdInfo, get, get, getAttributes, getAttributes, getIds, getInstanceIdName, getInstanceIdValue, getMaxInstanceId, getOwnPropertyDescriptor, has, has, hasPrototypeMap, incompatibleCallError, initPrototypeConstructor, initPrototypeMethod, initPrototypeMethod, initPrototypeMethod, initPrototypeValue, initPrototypeValue, instanceIdInfo, setAttributes, setInstanceIdAttributes, setInstanceIdValue
-
Methods inherited from class org.mozilla.javascript.ScriptableObject
addLazilyInitializedValue, applyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildClassCtor, buildDataDescriptor, callMethod, callMethod, checkPropertyChange, checkPropertyDefinition, checkValidAttributes, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, defineOwnProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, ensureScriptable, ensureScriptableObject, ensureSymbolScriptable, equivalentValues, get, get, getAllIds, getArrayPrototype, getAssociatedValue, getAttributes, getAttributes, getAttributes, getClassPrototype, getDefaultValue, getDefaultValue, getExternalArrayData, getExternalArrayLength, getFunctionPrototype, getGeneratorFunctionPrototype, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getProperty, getPropertyIds, getPrototype, getSlot, getTopLevelScope, getTopScopeValue, getTypedProperty, getTypedProperty, has, hasInstance, hasProperty, hasProperty, hasProperty, isAccessorDescriptor, isConst, isDataDescriptor, isEmpty, isExtensible, isFalse, isGenericDescriptor, isGetterOrSetter, isSealed, isTrue, preventExtensions, putConst, putConstProperty, putProperty, putProperty, putProperty, redefineProperty, sameValue, sealObject, setAttributes, setAttributes, setAttributes, setAttributes, setExternalArrayData, setGetterOrSetter, setParentScope, setPrototype, size
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
CLASS_NAME
public static final java.lang.String CLASS_NAME
- See Also:
- Constant Field Values
-
TYPE_NAME
public static final java.lang.String TYPE_NAME
- See Also:
- Constant Field Values
-
GLOBAL_TABLE_KEY
private static final java.lang.Object GLOBAL_TABLE_KEY
-
CONSTRUCTOR_SLOT
private static final java.lang.Object CONSTRUCTOR_SLOT
-
key
private final SymbolKey key
-
symbolData
private final NativeSymbol symbolData
-
ConstructorId_keyFor
private static final int ConstructorId_keyFor
- See Also:
- Constant Field Values
-
ConstructorId_for
private static final int ConstructorId_for
- See Also:
- Constant Field Values
-
Id_constructor
private static final int Id_constructor
- See Also:
- Constant Field Values
-
Id_toString
private static final int Id_toString
- See Also:
- Constant Field Values
-
Id_valueOf
private static final int Id_valueOf
- See Also:
- Constant Field Values
-
SymbolId_toStringTag
private static final int SymbolId_toStringTag
- See Also:
- Constant Field Values
-
SymbolId_toPrimitive
private static final int SymbolId_toPrimitive
- See Also:
- Constant Field Values
-
MAX_PROTOTYPE_ID
private static final int MAX_PROTOTYPE_ID
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
NativeSymbol
private NativeSymbol(java.lang.String desc)
This has to be used only for constructing the prototype instance. This sets symbolData to null (see isSymbol() for more).- Parameters:
desc
- the description
-
NativeSymbol
private NativeSymbol(SymbolKey key)
-
NativeSymbol
public NativeSymbol(NativeSymbol s)
-
-
Method Detail
-
init
public static void init(Context cx, Scriptable scope, boolean sealed)
-
construct
public static NativeSymbol construct(Context cx, Scriptable scope, java.lang.Object[] args)
Use this when we need to create symbols internally because of the convoluted way we have to construct them.
-
getClassName
public java.lang.String getClassName()
Description copied from class:ScriptableObject
Return the name of the class. This is typically the same name as the constructor. Classes extending ScriptableObject must implement this abstract method.- Specified by:
getClassName
in interfaceScriptable
- Specified by:
getClassName
in classScriptableObject
-
fillConstructorProperties
protected void fillConstructorProperties(IdFunctionObject ctor)
- Overrides:
fillConstructorProperties
in classIdScriptableObject
-
createStandardSymbol
private static void createStandardSymbol(Context cx, Scriptable scope, ScriptableObject ctor, java.lang.String name, SymbolKey key)
-
findPrototypeId
protected int findPrototypeId(java.lang.String s)
- Overrides:
findPrototypeId
in classIdScriptableObject
-
findPrototypeId
protected int findPrototypeId(Symbol key)
- Overrides:
findPrototypeId
in classIdScriptableObject
-
initPrototypeId
protected void initPrototypeId(int id)
- Overrides:
initPrototypeId
in classIdScriptableObject
-
execIdCall
public java.lang.Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
Description copied from class:IdScriptableObject
'thisObj' will be null if invoked as constructor, in which case instance of Scriptable should be returned.- Specified by:
execIdCall
in interfaceIdFunctionCall
- Overrides:
execIdCall
in classIdScriptableObject
-
getSelf
private static NativeSymbol getSelf(java.lang.Object thisObj)
-
js_constructor
private static NativeSymbol js_constructor(java.lang.Object[] args)
-
js_valueOf
private java.lang.Object js_valueOf()
-
js_for
private java.lang.Object js_for(Context cx, Scriptable scope, java.lang.Object[] args)
-
js_keyFor
private java.lang.Object js_keyFor(Context cx, Scriptable scope, java.lang.Object[] args)
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
isStrictMode
private static boolean isStrictMode()
-
put
public void put(java.lang.String name, Scriptable start, java.lang.Object value)
Description copied from class:ScriptableObject
Sets the value of the named property, creating it if need be. 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.
- Specified by:
put
in interfaceScriptable
- Overrides:
put
in classIdScriptableObject
- Parameters:
name
- the name of the propertystart
- the object whose property is being setvalue
- value to set the property to- See Also:
Scriptable.has(String, Scriptable)
,Scriptable.get(String, Scriptable)
,ScriptableObject.putProperty(Scriptable, String, Object)
,Context.toObject(Object, Scriptable)
-
put
public void put(int index, Scriptable start, java.lang.Object value)
Description copied from class:ScriptableObject
Sets the value of the indexed property, creating it if need be.- Specified by:
put
in interfaceScriptable
- Overrides:
put
in classScriptableObject
- Parameters:
index
- the numeric index for the propertystart
- the object whose property is being setvalue
- value to set the property to- See Also:
Scriptable.has(int, Scriptable)
,Scriptable.get(int, Scriptable)
,ScriptableObject.putProperty(Scriptable, int, Object)
,Context.toObject(Object, Scriptable)
-
put
public void put(Symbol key, Scriptable start, java.lang.Object value)
Description copied from class:ScriptableObject
Implementation of put required by SymbolScriptable objects.- Specified by:
put
in interfaceSymbolScriptable
- Overrides:
put
in classIdScriptableObject
-
isSymbol
public boolean isSymbol()
Object() on a Symbol constructs an object which is NOT a symbol, but which has an "internal data slot" that is. Furthermore, such an object has the Symbol prototype so this particular object is still used. Account for that here: an "Object" that was created from a Symbol has a different value of the slot.
-
getTypeOf
public java.lang.String getTypeOf()
Description copied from class:ScriptableObject
Gets the value that will be returned by calling the typeof operator on this object.- Overrides:
getTypeOf
in classScriptableObject
- Returns:
- default is "object" unless
ScriptableObject.avoidObjectDetection()
istrue
in which case it returns "undefined"
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object x)
- Overrides:
equals
in classjava.lang.Object
-
getKey
SymbolKey getKey()
-
getGlobalMap
private java.util.Map<java.lang.String,NativeSymbol> getGlobalMap()
-
-