org.mozilla.javascript
Class TopLevel

java.lang.Object
  extended by org.mozilla.javascript.ScriptableObject
      extended by org.mozilla.javascript.IdScriptableObject
          extended by 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, 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