Class BaseFunction

All Implemented Interfaces:
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:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • FUNCTION_TAG

      private static final Object FUNCTION_TAG
    • FUNCTION_CLASS

      private static final String FUNCTION_CLASS
      See Also:
    • GENERATOR_FUNCTION_CLASS

      static final String GENERATOR_FUNCTION_CLASS
      See Also:
    • Id_length

      private static final int Id_length
      See Also:
    • Id_arity

      private static final int Id_arity
      See Also:
    • Id_name

      private static final int Id_name
      See Also:
    • Id_prototype

      private static final int Id_prototype
      See Also:
    • Id_arguments

      private static final int Id_arguments
      See Also:
    • MAX_INSTANCE_ID

      private static final int MAX_INSTANCE_ID
      See Also:
    • Id_constructor

      private static final int Id_constructor
      See Also:
    • Id_toString

      private static final int Id_toString
      See Also:
    • Id_toSource

      private static final int Id_toSource
      See Also:
    • Id_apply

      private static final int Id_apply
      See Also:
    • Id_call

      private static final int Id_call
      See Also:
    • Id_bind

      private static final int Id_bind
      See Also:
    • MAX_PROTOTYPE_ID

      private static final int MAX_PROTOTYPE_ID
      See Also:
    • prototypeProperty

      private Object prototypeProperty
    • argumentsObj

      private Object argumentsObj
    • 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 Details

    • BaseFunction

      public BaseFunction()
    • BaseFunction

      public BaseFunction(boolean isGenerator)
    • BaseFunction

      public BaseFunction(Scriptable scope, Scriptable prototype)
  • Method Details

    • init

      static void init(Scriptable scope, boolean sealed)
    • initAsGeneratorFunction

      static Object initAsGeneratorFunction(Scriptable scope, boolean sealed)
    • getClassName

      public 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
    • isGeneratorFunction

      protected boolean isGeneratorFunction()
    • getTypeOf

      public String getTypeOf()
      Gets the value returned by calling the typeof operator on this object.
      Overrides:
      getTypeOf in class ScriptableObject
      Returns:
      "function" or "undefined" if ScriptableObject.avoidObjectDetection() returns true
      See Also:
    • hasInstance

      public boolean hasInstance(Scriptable instance)
      Implements the instanceof operator for JavaScript Function objects.

      foo = new Foo();
      foo instanceof Foo; // true

      Specified by:
      hasInstance in interface Scriptable
      Overrides:
      hasInstance in class ScriptableObject
      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: IdScriptableObject
      Get maximum id findInstanceIdInfo can generate.
      Overrides:
      getMaxInstanceId in class IdScriptableObject
    • findInstanceIdInfo

      protected int findInstanceIdInfo(String s)
      Description copied from class: IdScriptableObject
      Map name to id of instance property. Should return 0 if not found or the result of IdScriptableObject.instanceIdInfo(int, int).
      Overrides:
      findInstanceIdInfo in class IdScriptableObject
    • getInstanceIdName

      protected String getInstanceIdName(int id)
      Description copied from class: IdScriptableObject
      Map id back to property name it defines.
      Overrides:
      getInstanceIdName in class IdScriptableObject
    • getInstanceIdValue

      protected Object getInstanceIdValue(int id)
      Description copied from class: IdScriptableObject
      Get 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:
      getInstanceIdValue in class IdScriptableObject
    • setInstanceIdValue

      protected void setInstanceIdValue(int id, Object value)
      Description copied from class: IdScriptableObject
      Set or delete id value. If value == NOT_FOUND , the implementation should make sure that the following getInstanceIdValue return NOT_FOUND.
      Overrides:
      setInstanceIdValue in class IdScriptableObject
    • setInstanceIdAttributes

      protected void setInstanceIdAttributes(int id, int attr)
      Description copied from class: IdScriptableObject
      Update 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:
      setInstanceIdAttributes in class IdScriptableObject
      Parameters:
      id - the instance property id
      attr - the new attribute bitset
    • fillConstructorProperties

      protected void fillConstructorProperties(IdFunctionObject ctor)
      Overrides:
      fillConstructorProperties in class IdScriptableObject
    • initPrototypeId

      protected void initPrototypeId(int id)
      Overrides:
      initPrototypeId in class IdScriptableObject
    • isApply

      static boolean isApply(IdFunctionObject f)
    • isApplyOrCall

      static boolean isApplyOrCall(IdFunctionObject f)
    • execIdCall

      public Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, 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:
      execIdCall in interface IdFunctionCall
      Overrides:
      execIdCall in class IdScriptableObject
    • realFunction

      private static BaseFunction realFunction(Scriptable thisObj, IdFunctionObject f)
    • setImmunePrototypeProperty

      public void setImmunePrototypeProperty(Object value)
      Make value as DontEnum, DontDelete, ReadOnly prototype property of this Function object
    • getClassPrototype

      protected Scriptable getClassPrototype()
    • call

      public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args)
      Should be overridden.
      Specified by:
      call in interface Callable
      Specified by:
      call in interface Function
      Parameters:
      cx - the current Context for this thread
      scope - 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 JavaScript this object
      args - the array of arguments
      Returns:
      the result of the call
    • construct

      public Scriptable construct(Context cx, Scriptable scope, Object[] args)
      Description copied from interface: Function
      Call the function as a constructor.

      This method is invoked by the runtime in order to satisfy a use of the JavaScript new operator. This method is expected to create a new object and return it.

      Specified by:
      construct in interface Constructable
      Specified by:
      construct in interface Function
      Parameters:
      cx - the current Context for this thread
      scope - 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 of construct(Context, Scriptable, Object[]) uses the method to to get the value for thisObj argument when invoking call(Context, Scriptable, Scriptable, Object[]). The methos is allowed to return null to indicate that call(Context, Scriptable, Scriptable, Object[]) will create a new object itself. In this case construct(Context, Scriptable, Object[]) will set scope and prototype on the result call(Context, Scriptable, Scriptable, Object[]) unless they are already set.
    • decompile

      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 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 Object getPrototypeProperty()
    • setPrototypeProperty

      protected void setPrototypeProperty(Object prototype)
    • setupDefaultPrototype

      protected Object setupDefaultPrototype()
    • getArguments

      private Object getArguments()
    • jsConstructor

      private Object jsConstructor(Context cx, Scriptable scope, Object[] args)
    • findPrototypeId

      protected int findPrototypeId(String s)
      Overrides:
      findPrototypeId in class IdScriptableObject