public class TopLevel extends IdScriptableObject
ECMA 262 requires that most constructors used internally construct objects with the original prototype object as value of their [[Prototype]] internal property. Since built-in global constructors are defined as writable and deletable, this means they should be cached to protect against redefinition at runtime.
In order to implement this efficiently, this class provides a mechanism to access the original
built-in global constructors and their prototypes via numeric class-ids. To make use of this, the
new ScriptRuntime.newBuiltinObject and ScriptRuntime.setBuiltinProtoAndParent methods should be
used to create and initialize objects of built-in classes instead of their generic counterparts.
Calling Context.initStandardObjects() with an instance of this
class as argument will automatically cache built-in classes after initialization. For other
setups involving top-level scopes that inherit global properties from their proptotypes (e.g.
with dynamic scopes) embeddings should explicitly call cacheBuiltins(Scriptable,
boolean) to initialize the class cache for each top-level scope.
| Modifier and Type | Class and Description |
|---|---|
static class |
TopLevel.Builtins
An enumeration of built-in ECMAScript objects.
|
ScriptableObject.KeyComparatorCONST, DONTENUM, EMPTY, PERMANENT, READONLY, UNINITIALIZED_CONSTNOT_FOUND| Constructor and Description |
|---|
TopLevel() |
| Modifier and Type | Method and Description |
|---|---|
void |
cacheBuiltins(Scriptable scope,
boolean sealed)
Cache the built-in ECMAScript objects to protect them against modifications by the script.
|
static Function |
getBuiltinCtor(Context cx,
Scriptable scope,
TopLevel.Builtins type)
Static helper method to get a built-in object constructor with the given
type
from the given scope. |
BaseFunction |
getBuiltinCtor(TopLevel.Builtins type)
Get the cached built-in object constructor from this scope with the given
type. |
static Scriptable |
getBuiltinPrototype(Scriptable scope,
TopLevel.Builtins type)
Static helper method to get a built-in object prototype with the given
type from
the given scope. |
Scriptable |
getBuiltinPrototype(TopLevel.Builtins type)
Get the cached built-in object prototype from this scope with the given
type. |
java.lang.String |
getClassName()
Return the name of the class.
|
activatePrototypeMap, addIdFunctionProperty, defaultGet, defaultHas, defaultPut, defineOwnProperty, delete, delete, ensureType, execIdCall, exportAsJSClass, fillConstructorProperties, findInstanceIdInfo, findInstanceIdInfo, findPrototypeId, findPrototypeId, get, get, getAttributes, getAttributes, getInstanceIdName, getInstanceIdValue, getMaxInstanceId, getOwnPropertyDescriptor, has, has, hasPrototypeMap, initPrototypeConstructor, initPrototypeId, initPrototypeMethod, initPrototypeMethod, initPrototypeMethod, initPrototypeValue, initPrototypeValue, instanceIdInfo, put, put, setAttributes, setInstanceIdAttributes, setInstanceIdValueapplyDescriptorToAttributeBitset, 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, 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, sizepublic java.lang.String getClassName()
ScriptableObjectThis is typically the same name as the constructor. Classes extending ScriptableObject must implement this abstract method.
getClassName in interface ScriptablegetClassName in class ScriptableObjectpublic void cacheBuiltins(Scriptable scope, boolean sealed)
ScriptRuntime.initStandardObjects if the scope argument is an instance of this class. It
only has to be called by the embedding if a top-level scope is not initialized through
initStandardObjects().public static Function getBuiltinCtor(Context cx, Scriptable scope, TopLevel.Builtins type)
type
from the given scope. If the scope is not an instance of this class or does have
a cache of built-ins, the constructor is looked up via normal property lookup.cx - the current Contextscope - the top-level scopetype - the built-in typepublic static Scriptable getBuiltinPrototype(Scriptable scope, TopLevel.Builtins type)
type from
the given scope. If the scope is not an instance of this class or does have a
cache of built-ins, the prototype is looked up via normal property lookup.scope - the top-level scopetype - the built-in typepublic BaseFunction getBuiltinCtor(TopLevel.Builtins type)
type.
Returns null if cacheBuiltins(Scriptable, boolean) has not been called on this
object.type - the built-in typepublic Scriptable getBuiltinPrototype(TopLevel.Builtins type)
type.
Returns null if cacheBuiltins(Scriptable, boolean) has not been called on this
object.type - the built-in type