org.mozilla.javascript

## Class TopLevel

- java.lang.Object
- - org.mozilla.javascript.ScriptableObject
  - - org.mozilla.javascript.IdScriptableObject
    - - org.mozilla.javascript.TopLevel

All Implemented Interfaces:
  java.io.Serializable, ConstProperties, DebuggableObject, IdFunctionCall, Scriptable

Direct Known Subclasses:
  ImporterTopLevel, ModuleScope

    public class TopLevel
    extends IdScriptableObject

A top-level scope object that provides special means to cache and preserve the initial values of the built-in constructor properties for better ECMAScript compliance.

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()` to initialize the class cache for each top-level scope.

See Also:
  Serialized Form

### Nested Class Summary

Nested Classes
`static class` `TopLevel.Builtins` An enumeration of built-in ECMAScript objects.

### Field Summary

### 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
Constructor and Description
`TopLevel()`

### Method Summary

Methods
`void` `cacheBuiltins()` 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.

### Methods inherited from class org.mozilla.javascript.IdScriptableObject

`activatePrototypeMap, addIdFunctionProperty, defaultGet, defaultPut, defineOwnProperty, delete, execIdCall, exportAsJSClass, fillConstructorProperties, findInstanceIdInfo, findPrototypeId, get, getAttributes, getInstanceIdName, getInstanceIdValue, getMaxInstanceId, getOwnPropertyDescriptor, has, hasPrototypeMap, incompatibleCallError, initPrototypeConstructor, initPrototypeId, initPrototypeMethod, initPrototypeValue, instanceIdInfo, put, setAttributes, setInstanceIdAttributes, setInstanceIdValue`

### Methods inherited from class org.mozilla.javascript.ScriptableObject

`applyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildDataDescriptor, callMethod, callMethod, checkPropertyChange, checkPropertyDefinition, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, defineOwnProperty, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, ensureScriptable, ensureScriptableObject, equivalentValues, get, get, getAllIds, getArrayPrototype, getAssociatedValue, getAttributes, getAttributes, getAttributes, getClassPrototype, getDefaultValue, getDefaultValue, getFunctionPrototype, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getPropertyIds, getPrototype, getSlot, getTopLevelScope, getTopScopeValue, getTypedProperty, getTypedProperty, getTypeOf, has, hasInstance, hasProperty, hasProperty, isAccessorDescriptor, isConst, isDataDescriptor, isEmpty, isExtensible, isFalse, isGenericDescriptor, isGetterOrSetter, isSealed, isTrue, preventExtensions, put, putConst, putConstProperty, putProperty, putProperty, redefineProperty, sameValue, sealObject, setAttributes, setAttributes, setAttributes, setGetterOrSetter, setParentScope, setPrototype, size`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### TopLevel

    public TopLevel()

### Method Detail

#### 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 interface `Scriptable`
Specified by:
  `getClassName` in class `ScriptableObject`

#### cacheBuiltins

    public void cacheBuiltins()

Cache the built-in ECMAScript objects to protect them against modifications by the script. This method is called automatically by `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()`.

#### getBuiltinCtor

    public 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`. 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.

Parameters:
  `cx` - the current Context
  `scope` - the top-level scope
  `type` - the built-in type
Returns:
  the built-in constructor

#### getBuiltinPrototype

    public 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`. 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.

Parameters:
  `scope` - the top-level scope
  `type` - the built-in type
Returns:
  the built-in prototype

#### getBuiltinCtor

    public BaseFunction getBuiltinCtor(TopLevel.Builtins type)

Get the cached built-in object constructor from this scope with the given `type`. Returns null if `cacheBuiltins()` has not been called on this object.

Parameters:
  `type` - the built-in type
Returns:
  the built-in constructor

#### getBuiltinPrototype

    public Scriptable getBuiltinPrototype(TopLevel.Builtins type)

Get the cached built-in object prototype from this scope with the given `type`. Returns null if `cacheBuiltins()` has not been called on this object.

Parameters:
  `type` - the built-in type
Returns:
  the built-in prototype