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
    Modifier and Type | Class and Description
    --- | ---
    `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
    Modifier and Type | Method and Description
    --- | ---
    `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, defaultHas, 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, getExternalArrayData, getExternalArrayLength, 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, setExternalArrayData, 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