Package org.htmlunit.corejs.javascript
Class BaseFunction
- java.lang.Object
-
- org.htmlunit.corejs.javascript.ScriptableObject
-
- org.htmlunit.corejs.javascript.IdScriptableObject
-
- org.htmlunit.corejs.javascript.BaseFunction
-
- All Implemented Interfaces:
java.io.Serializable,Callable,ConstProperties,Constructable,DebuggableObject,Function,IdFunctionCall,Scriptable,SymbolScriptable
- Direct Known Subclasses:
Arguments.ThrowTypeError,ArrowFunction,BoundFunction,FunctionObject,IdFunctionObject,LambdaFunction,NativeFunction,NativeJavaConstructor,NativeJavaMethod,NativeRegExpCtor,NativeScript,Require
public class BaseFunction extends IdScriptableObject implements Function
The base class for Function objects. That is one of two purposes. It is also the prototype for every "function" defined except those that are used as GeneratorFunctions via the ES6 "function *" syntax.See ECMA 15.3.
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.htmlunit.corejs.javascript.ScriptableObject
ScriptableObject.KeyComparator
-
-
Field Summary
Fields Modifier and Type Field Description private intargumentsAttributesprivate java.lang.ObjectargumentsObjprivate intarityPropertyAttributesprivate static java.lang.StringFUNCTION_CLASSprivate static java.lang.ObjectFUNCTION_TAG(package private) static java.lang.StringGENERATOR_FUNCTION_CLASSprivate static intId_applyprotected static intId_argumentsprotected static intId_arityprivate static intId_bindprivate static intId_callprivate static intId_constructorprotected static intId_lengthprotected static intId_nameprotected static intId_prototypeprivate static intId_toSourceprivate static intId_toStringprivate booleanisGeneratorFunctionprivate intlengthPropertyAttributesprotected static intMAX_INSTANCE_IDprivate static intMAX_PROTOTYPE_IDprivate intnamePropertyAttributesprivate java.lang.StringnameValueprivate java.lang.ObjectprototypePropertyprivate intprototypePropertyAttributesprivate static longserialVersionUID-
Fields inherited from class org.htmlunit.corejs.javascript.ScriptableObject
CONST, DONTENUM, EMPTY, PERMANENT, READONLY, UNINITIALIZED_CONST
-
Fields inherited from interface org.htmlunit.corejs.javascript.Scriptable
NOT_FOUND
-
-
Constructor Summary
Constructors Constructor Description BaseFunction()BaseFunction(boolean isGenerator)BaseFunction(Scriptable scope, Scriptable prototype)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description java.lang.Objectcall(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)Should be overridden.Scriptableconstruct(Context cx, Scriptable scope, java.lang.Object[] args)Call the function as a constructor.ScriptablecreateObject(Context cx, Scriptable scope)Creates new script object.(package private) java.lang.Stringdecompile(int indent, int flags)Decompile the source information associated with this js function/script back into a string.java.lang.ObjectexecIdCall(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)'thisObj' will be null if invoked as constructor, in which case * instance of Scriptable should be returned.protected voidfillConstructorProperties(IdFunctionObject ctor)protected intfindInstanceIdInfo(java.lang.String s)Map name to id of instance property.protected intfindPrototypeId(java.lang.String s)private java.lang.ObjectgetArguments()intgetArity()java.lang.StringgetClassName()Return the name of the class.protected ScriptablegetClassPrototype()java.lang.StringgetFunctionName()protected java.lang.StringgetInstanceIdName(int id)Map id back to property name it defines.protected java.lang.ObjectgetInstanceIdValue(int id)Get id value.intgetLength()protected intgetMaxInstanceId()Get maximum id findInstanceIdInfo can generate.protected java.lang.ObjectgetPrototypeProperty()java.lang.StringgetTypeOf()Gets the value returned by calling the typeof operator on this object.booleanhasInstance(Scriptable instance)Implements the instanceof operator for JavaScript Function objects.protected booleanhasPrototypeProperty()(package private) static voidinit(Context cx, Scriptable scope, boolean sealed)(package private) static voidinit(Scriptable scope, boolean sealed)Deprecated.Useinit(Context, Scriptable, boolean)instead(package private) static java.lang.ObjectinitAsGeneratorFunction(Scriptable scope, boolean sealed)protected voidinitPrototypeId(int id)(package private) static booleanisApply(IdFunctionObject f)(package private) static booleanisApplyOrCall(IdFunctionObject f)protected booleanisGeneratorFunction()private java.lang.ObjectjsConstructor(Context cx, Scriptable scope, java.lang.Object[] args)private static BaseFunctionrealFunction(Scriptable thisObj, IdFunctionObject f)voidsetImmunePrototypeProperty(java.lang.Object value)Make value as DontEnum, DontDelete, ReadOnly prototype property of this Function objectprotected voidsetInstanceIdAttributes(int id, int attr)Update the attributes of the given instance property.protected voidsetInstanceIdValue(int id, java.lang.Object value)Set or delete id value.protected voidsetPrototypeProperty(java.lang.Object prototype)voidsetPrototypePropertyAttributes(int attributes)voidsetStandardPropertyAttributes(int attributes)Sets the attributes of the "name", "length", and "arity" properties, which differ for many native objects.protected java.lang.ObjectsetupDefaultPrototype()-
Methods inherited from class org.htmlunit.corejs.javascript.IdScriptableObject
activatePrototypeMap, addIdFunctionProperty, defaultGet, defaultHas, defaultPut, defineOwnProperty, delete, delete, ensureType, exportAsJSClass, findInstanceIdInfo, findPrototypeId, get, get, getAttributes, getAttributes, getIds, getOwnPropertyDescriptor, has, has, hasPrototypeMap, initPrototypeConstructor, initPrototypeMethod, initPrototypeMethod, initPrototypeMethod, initPrototypeValue, initPrototypeValue, instanceIdInfo, put, put, setAttributes
-
Methods inherited from class org.htmlunit.corejs.javascript.ScriptableObject
addLazilyInitializedValue, applyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildClassCtor, buildDataDescriptor, callMethod, callMethod, checkPropertyChange, checkPropertyDefinition, checkValidAttributes, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, defineOwnProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, deleteProperty, ensureScriptable, ensureScriptableObject, ensureSymbolScriptable, equivalentValues, get, get, getAllIds, getArrayPrototype, getAssociatedValue, getAttributes, getAttributes, getAttributes, getBase, getBase, getClassPrototype, getDefaultValue, getDefaultValue, getExternalArrayData, getExternalArrayLength, getFunctionPrototype, getGeneratorFunctionPrototype, getGetterOrSetter, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getProperty, getPropertyIds, getPrototype, getTopLevelScope, getTopScopeValue, getTypedProperty, getTypedProperty, has, hasProperty, hasProperty, hasProperty, isAccessorDescriptor, isConst, isDataDescriptor, isEmpty, isExtensible, isFalse, isGenericDescriptor, isGetterOrSetter, isSealed, isTrue, preventExtensions, put, putConst, putConstProperty, putImpl, putProperty, putProperty, putProperty, querySlot, redefineProperty, sameValue, sealObject, setAttributes, setAttributes, setAttributes, setAttributes, setCommonDescriptorProperties, setExternalArrayData, setGetterOrSetter, setParentScope, setPrototype, size
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.htmlunit.corejs.javascript.Scriptable
delete, delete, get, get, getDefaultValue, getIds, getParentScope, getPrototype, has, has, put, put, setParentScope, setPrototype
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
FUNCTION_TAG
private static final java.lang.Object FUNCTION_TAG
-
FUNCTION_CLASS
private static final java.lang.String FUNCTION_CLASS
- See Also:
- Constant Field Values
-
GENERATOR_FUNCTION_CLASS
static final java.lang.String GENERATOR_FUNCTION_CLASS
- See Also:
- Constant Field Values
-
Id_length
protected static final int Id_length
- See Also:
- Constant Field Values
-
Id_arity
protected static final int Id_arity
- See Also:
- Constant Field Values
-
Id_name
protected static final int Id_name
- See Also:
- Constant Field Values
-
Id_prototype
protected static final int Id_prototype
- See Also:
- Constant Field Values
-
Id_arguments
protected static final int Id_arguments
- See Also:
- Constant Field Values
-
MAX_INSTANCE_ID
protected static final int MAX_INSTANCE_ID
- See Also:
- Constant Field Values
-
Id_constructor
private static final int Id_constructor
- See Also:
- Constant Field Values
-
Id_toString
private static final int Id_toString
- See Also:
- Constant Field Values
-
Id_toSource
private static final int Id_toSource
- See Also:
- Constant Field Values
-
Id_apply
private static final int Id_apply
- See Also:
- Constant Field Values
-
Id_call
private static final int Id_call
- See Also:
- Constant Field Values
-
Id_bind
private static final int Id_bind
- See Also:
- Constant Field Values
-
MAX_PROTOTYPE_ID
private static final int MAX_PROTOTYPE_ID
- See Also:
- Constant Field Values
-
prototypeProperty
private java.lang.Object prototypeProperty
-
argumentsObj
private java.lang.Object argumentsObj
-
nameValue
private java.lang.String nameValue
-
isGeneratorFunction
private boolean isGeneratorFunction
-
prototypePropertyAttributes
private int prototypePropertyAttributes
-
argumentsAttributes
private int argumentsAttributes
-
arityPropertyAttributes
private int arityPropertyAttributes
-
namePropertyAttributes
private int namePropertyAttributes
-
lengthPropertyAttributes
private int lengthPropertyAttributes
-
-
Constructor Detail
-
BaseFunction
public BaseFunction()
-
BaseFunction
public BaseFunction(boolean isGenerator)
-
BaseFunction
public BaseFunction(Scriptable scope, Scriptable prototype)
-
-
Method Detail
-
init
static void init(Context cx, Scriptable scope, boolean sealed)
-
init
@Deprecated static void init(Scriptable scope, boolean sealed)
Deprecated.Useinit(Context, Scriptable, boolean)instead
-
initAsGeneratorFunction
static java.lang.Object initAsGeneratorFunction(Scriptable scope, boolean sealed)
-
getClassName
public java.lang.String getClassName()
Description copied from class:ScriptableObjectReturn the name of the class.This is typically the same name as the constructor. Classes extending ScriptableObject must implement this abstract method.
- Specified by:
getClassNamein interfaceScriptable- Specified by:
getClassNamein classScriptableObject
-
isGeneratorFunction
protected boolean isGeneratorFunction()
-
getTypeOf
public java.lang.String getTypeOf()
Gets the value returned by calling the typeof operator on this object.- Overrides:
getTypeOfin classScriptableObject- Returns:
- "function" or "undefined" if
ScriptableObject.avoidObjectDetection()returnstrue - See Also:
ScriptableObject.getTypeOf()
-
hasInstance
public boolean hasInstance(Scriptable instance)
Implements the instanceof operator for JavaScript Function objects.foo = new Foo();
foo instanceof Foo; // true
- Specified by:
hasInstancein interfaceScriptable- Overrides:
hasInstancein classScriptableObject- Parameters:
instance- The value that appeared on the LHS of the instanceof operator- Returns:
- true if the "prototype" property of "this" appears in value's prototype chain
-
getMaxInstanceId
protected int getMaxInstanceId()
Description copied from class:IdScriptableObjectGet maximum id findInstanceIdInfo can generate.- Overrides:
getMaxInstanceIdin classIdScriptableObject
-
findInstanceIdInfo
protected int findInstanceIdInfo(java.lang.String s)
Description copied from class:IdScriptableObjectMap name to id of instance property. Should return 0 if not found or the result ofIdScriptableObject.instanceIdInfo(int, int).- Overrides:
findInstanceIdInfoin classIdScriptableObject
-
getInstanceIdName
protected java.lang.String getInstanceIdName(int id)
Description copied from class:IdScriptableObjectMap id back to property name it defines.- Overrides:
getInstanceIdNamein classIdScriptableObject
-
getInstanceIdValue
protected java.lang.Object getInstanceIdValue(int id)
Description copied from class:IdScriptableObjectGet id value. * If id value is constant, descendant can call cacheIdValue to store * value in the permanent cache. * Default implementation creates IdFunctionObject instance for given id * and cache its value- Overrides:
getInstanceIdValuein classIdScriptableObject
-
setInstanceIdValue
protected void setInstanceIdValue(int id, java.lang.Object value)Description copied from class:IdScriptableObjectSet or delete id value. If value == NOT_FOUND , the implementation should make sure that the following getInstanceIdValue return NOT_FOUND.- Overrides:
setInstanceIdValuein classIdScriptableObject
-
setInstanceIdAttributes
protected void setInstanceIdAttributes(int id, int attr)Description copied from class:IdScriptableObjectUpdate the attributes of the given instance property. Classes which want to support changing property attributes via Object.defineProperty must override this method. The default implementation throws InternalError.- Overrides:
setInstanceIdAttributesin classIdScriptableObject- Parameters:
id- the instance property idattr- the new attribute bitset
-
fillConstructorProperties
protected void fillConstructorProperties(IdFunctionObject ctor)
- Overrides:
fillConstructorPropertiesin classIdScriptableObject
-
initPrototypeId
protected void initPrototypeId(int id)
- Overrides:
initPrototypeIdin classIdScriptableObject
-
isApply
static boolean isApply(IdFunctionObject f)
-
isApplyOrCall
static boolean isApplyOrCall(IdFunctionObject f)
-
execIdCall
public java.lang.Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
Description copied from class:IdScriptableObject'thisObj' will be null if invoked as constructor, in which case * instance of Scriptable should be returned.- Specified by:
execIdCallin interfaceIdFunctionCall- Overrides:
execIdCallin classIdScriptableObject
-
realFunction
private static BaseFunction realFunction(Scriptable thisObj, IdFunctionObject f)
-
setImmunePrototypeProperty
public void setImmunePrototypeProperty(java.lang.Object value)
Make value as DontEnum, DontDelete, ReadOnly prototype property of this Function object
-
getClassPrototype
protected Scriptable getClassPrototype()
-
call
public java.lang.Object call(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
Should be overridden.- Specified by:
callin interfaceCallable- Specified by:
callin interfaceFunction- Parameters:
cx- the current Context for this threadscope- the scope to execute the function relative to. This is set to the value returned by getParentScope() except when the function is called from a closure.thisObj- the JavaScriptthisobjectargs- the array of arguments- Returns:
- the result of the call
-
construct
public Scriptable construct(Context cx, Scriptable scope, java.lang.Object[] args)
Description copied from interface:FunctionCall the function as a constructor.This method is invoked by the runtime in order to satisfy a use of the JavaScript
newoperator. This method is expected to create a new object and return it.- Specified by:
constructin interfaceConstructable- Specified by:
constructin interfaceFunction- Parameters:
cx- the current Context for this threadscope- an enclosing scope of the caller except when the function is called from a closure.args- the array of arguments- Returns:
- the allocated object
-
createObject
public Scriptable createObject(Context cx, Scriptable scope)
Creates new script object. The default implementation ofconstruct(org.htmlunit.corejs.javascript.Context, org.htmlunit.corejs.javascript.Scriptable, java.lang.Object[])uses the method to to get the value forthisObjargument when invokingcall(org.htmlunit.corejs.javascript.Context, org.htmlunit.corejs.javascript.Scriptable, org.htmlunit.corejs.javascript.Scriptable, java.lang.Object[]). The methos is allowed to returnnullto indicate thatcall(org.htmlunit.corejs.javascript.Context, org.htmlunit.corejs.javascript.Scriptable, org.htmlunit.corejs.javascript.Scriptable, java.lang.Object[])will create a new object itself. In this caseconstruct(org.htmlunit.corejs.javascript.Context, org.htmlunit.corejs.javascript.Scriptable, java.lang.Object[])will set scope and prototype on the resultcall(org.htmlunit.corejs.javascript.Context, org.htmlunit.corejs.javascript.Scriptable, org.htmlunit.corejs.javascript.Scriptable, java.lang.Object[])unless they are already set.
-
decompile
java.lang.String decompile(int indent, int flags)Decompile the source information associated with this js function/script back into a string.- Parameters:
indent- How much to indent the decompiled result.flags- Flags specifying format of decompilation output.
-
getArity
public int getArity()
-
getLength
public int getLength()
-
getFunctionName
public java.lang.String getFunctionName()
-
setStandardPropertyAttributes
public void setStandardPropertyAttributes(int attributes)
Sets the attributes of the "name", "length", and "arity" properties, which differ for many native objects.
-
setPrototypePropertyAttributes
public void setPrototypePropertyAttributes(int attributes)
-
hasPrototypeProperty
protected boolean hasPrototypeProperty()
-
getPrototypeProperty
protected java.lang.Object getPrototypeProperty()
-
setPrototypeProperty
protected void setPrototypeProperty(java.lang.Object prototype)
-
setupDefaultPrototype
protected java.lang.Object setupDefaultPrototype()
-
getArguments
private java.lang.Object getArguments()
-
jsConstructor
private java.lang.Object jsConstructor(Context cx, Scriptable scope, java.lang.Object[] args)
-
findPrototypeId
protected int findPrototypeId(java.lang.String s)
- Overrides:
findPrototypeIdin classIdScriptableObject
-
-