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

Method Summary
`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, setInstanceIdValue`

Methods inherited from class org.mozilla.javascript.ScriptableObject

`applyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildDataDescriptor, callMethod, callMethod, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, 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, 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