Permalink
Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
5508 lines (5239 sloc) 145 KB
#
# Built-in objects
#
# YAML conventions:
#
# - Indent by two, indent lists of objects too.
# - Quoted used for keys, explicit string values, hex data, attributes.
# Not used for classes, built-in ID values, etc, unless necessary.
# - Double quotes used throughout to allow escaping.
#
# Top level object format is mostly self explanatory, a few notes:
#
# - The "id" string is used for referencing objects from property table
# - Class names must match array in genbuiltins.py
# - If the top level object is a function:
# - varargs: if true, function is vararg (nargs = DUK_VARARGS)
# - nargs: nargs (ignored if varargs true); if missing, default from 'length' property
# - magic: see below
# - native: native function name
# - callable: true/false, depending on function
# - constructable: true/false, depending on function
# - special_call: true/false, used for .call(), .apply(), etc which
# need special casing in runtime call handling
# - To disable an object without removing its metadata, you can
# use 'disable: true'.
# - If the object is dependent on Duktape configuration, you can make the
# object optional using e.g. 'present_if: DUK_USE_BUFFEROBJECT_SUPPORT'.
# If the value is a list, the object is present if all listed options are
# enabled (logical AND).
# - If the object needs a DUK_BIDX_xxx define in Duktape source code, which
# also implies it'll get a slot in thr->builtins[] array, use 'bidx: true'.
#
# Property format:
#
# - key: verbatim string key, codepoints U+0000...U+00FF map to bytes,
# so that \u0082 is 0x82 prefix, \u00FF is 0xFF prefix, etc. Key
# can also be a symbol, with the same format as for symbol values.
# - value: see below
# - attributes: string of format /w?e?c?a?/, e.g. "wc" is writable and
# configurable
# + w: writable
# + e: enumerable
# + c: configurable
# + a: accessor (determined automatically, not necessary to give explicitly)
# - auto_lightfunc: if true (which is default), function property may be
# automatically converted to a lightfunc if other automatic lightfunc
# conversion criteria are met; use "auto_lightfunc: false" to prevent
# lightfunc conversion
# - May also have feature tags like "es6: true" to indicate property
# is related to a specific standard
# - To disable a property without removing its metadata, you can use
# 'disable: true'.
# - If the property is dependent on Duktape configuration, you can make the
# property optional using e.g. 'present_if: DUK_USE_BUFFEROBJECT_SUPPORT'.
# List of options is interpreted as for objects (logical AND).
#
# Property value format:
#
# - ECMAScript undefined:
# - type: undefined
# - Plain YAML/JSON null (parses as Python None)
# - treated as ECMAScript null
# - Plain string:
# - treated as plain string, string data as with keys
# - Plain symbol:
# - type: symbol
# - variant: global, wellknown, hidden, userhidden
# - string: symbol string without any prefix
# - NOTE: ES2015 well-known symbols are local symbols with 'string' as
# their description, and a fixed suffix never overlapping with
# runtime local symbols
# - NOTE: "hidden symbols" are Duktape specific internal properties
# (called just internal properties in 1.x)
# - Plain number:
# - treated as a fastint/ieee double
# - IEEE double:
# - type: double
# - bytes: IEEE bytes in big endian format, hex encoded
# - NOTE: if you define a NaN, make sure it is in the Duktape normalized
# form (see bi_global 'NaN' property): otherwise strange things will
# happen with packed duk_tval
# - Buffer:
# - type: buffer
# - NOTE: not supported yet, type is reserved
# - Pointer:
# - type: pointer
# - NOTE: not supported yet, type is reserved
# - Lightfunc:
# - type: lightfunc
# - native: native function name
# - magic: -128 to 127
# - length: 0 to 15
# - nargs: 0 to 14; or varargs: true
# - varargs: if true, target has variable arguments
# - Reference to a built-in object:
# - type: object
# id: ID string of target object
# - Accessor (setter/getter):
# - type: accessor
# - getter_id: object ID of getter
# - setter_id: object ID of setter
# - Native function shorthand; alternative to defining a function as a
# native object and referencing it using an ID:
# - type: function (implicitly callable)
# - callable: default is true
# - constructable: default is false
# - native: native function name
# - length: function .length (optional, defaults to 0)
# - nargs: function nargs (optional, defaults to length)
# - varargs: if true, function is vararg (nargs = DUK_VARARGS)
# - magic: magic value for function (see below)
# - name: optional, provides .name property (non-writable, non-enumerable, non-configurable)
# - special_call: recognized in shorthand
# - Accessor (setter/getter) shorthand:
# - type: accessor
# - callable: default is true
# - constructable: default is false
# - getter: native function name
# - setter: native function name
# - getter_magic: magic value for getter
# - setter_magic: magic value for setter
# - getter_nargs: nargs value for getter
# - setter_nargs: nargs value for setter
# - getter_length: length value for getter (0 if missing)
# - setter_length: length value for setter (0 if missing)
# - Structured object shorthand:
# - type: structured
# - value: arbitrary JSON-like value
# - NOTE: value is converted into object(s) with properties
# similarly to JSON.parse() results: properties will be
# writable, enumerable, and configurable, inherit from
# Object.prototype, etc.
#
# Magic format:
#
# - Plain number: direct magic value
# - Array iterator magic:
# - type: array_iter
# - funcname: function name, e.g. "forEach"
# - Built-in object index:
# - type: bidx
# - id: id of built-object, idx to thr->builtins[]
# - One-argument math function:
# - type: math_onearg
# - funcname: name of function, e.g. "cos"
# - Two-argument math function:
# - type: math_twoarg
# - funcname: name of function, e.g. "atan2"
# - Typed array constructor
# - type: typedarray_constructor
# - elem: element type, e.g. "int8"
# - shift: shift for element size (0 = 1 byte element, 2 = 4 byte element etc)
objects:
# internal prototype: implementation specific
# Smjs: Object.prototype
# Rhino: Object.prototype
# V8: *not* Object.prototype, but prototype chain includes Object.prototype
# external prototype: apparently not set
# external constructor: apparently not set
# internal class: implemented specific
# Smjs: "global"
# Rhino: "global"
# V8: "global"
#
# E5 Sections B.2.1 and B.2.2 describe non-standard properties which are
# included below but flagged as extensions.
- id: bi_global
class: global
internal_prototype: bi_object_prototype
bidx: true
properties:
# 'global' binding giving easy to access to the global object.
# Not yet standard, see https://github.com/tc39/proposal-global.
- key: "global"
value:
type: object
id: bi_global
attributes: "wc"
# This could be stripped when DUK_USE_GLOBAL_BUILTIN is disabled
# but keep for now (the property is quite fundamental).
present_if: DUK_USE_GLOBAL_BINDING
- key: "NaN"
value:
type: double
bytes: "7ff8000000000000" # DBL_NAN
attributes: ""
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "Infinity"
value:
type: double
bytes: "7ff0000000000000" # DBL_POSITIVE_INFINITY
attributes: ""
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "undefined"
value:
type: undefined
attributes: ""
# This could be stripped when DUK_USE_GLOBAL_BUILTIN is disabled
# ("void 0" is the same and safer) but it's commonly used so keep.
- key: "Object"
value:
type: object
id: bi_object_constructor
present_if: DUK_USE_OBJECT_BUILTIN
- key: "Function"
value:
type: object
id: bi_function_constructor
present_if: DUK_USE_FUNCTION_BUILTIN
- key: "Array"
value:
type: object
id: bi_array_constructor
present_if: DUK_USE_ARRAY_BUILTIN
- key: "String"
value:
type: object
id: bi_string_constructor
present_if: DUK_USE_STRING_BUILTIN
- key: "Boolean"
value:
type: object
id: bi_boolean_constructor
present_if: DUK_USE_BOOLEAN_BUILTIN
- key: "Number"
value:
type: object
id: bi_number_constructor
present_if: DUK_USE_NUMBER_BUILTIN
- key: "Date"
value:
type: object
id: bi_date_constructor
present_if: DUK_USE_DATE_BUILTIN
- key: "RegExp"
value:
type: object
id: bi_regexp_constructor
present_if: DUK_USE_REGEXP_SUPPORT
- key: "Error"
value:
type: object
id: bi_error_constructor
- key: "EvalError"
value:
type: object
id: bi_eval_error_constructor
- key: "RangeError"
value:
type: object
id: bi_range_error_constructor
- key: "ReferenceError"
value:
type: object
id: bi_reference_error_constructor
- key: "SyntaxError"
value:
type: object
id: bi_syntax_error_constructor
- key: "TypeError"
value:
type: object
id: bi_type_error_constructor
- key: "URIError"
value:
type: object
id: bi_uri_error_constructor
- key: "Math"
value:
type: object
id: bi_math
present_if: DUK_USE_MATH_BUILTIN
- key: "JSON"
value:
type: object
id: bi_json
present_if: DUK_USE_JSON_BUILTIN
# Duktape specific
- key: "Duktape"
value:
type: object
id: bi_duktape
duktape: true
# Remains present even when disabled: needed for error augmentation internally.
#present_if: DUK_USE_DUKTAPE_BUILTIN
# ES2015
- key: "Proxy"
value:
type: object
id: bi_proxy_constructor
es6: true
present_if: DUK_USE_ES6_PROXY
- key: "Reflect"
value:
type: object
id: bi_reflect
es6: true
present_if: DUK_USE_REFLECT_BUILTIN
- key: "Symbol"
value:
type: object
id: bi_symbol_constructor
es6: true
present_if: DUK_USE_SYMBOL_BUILTIN
- key: "Promise"
value:
type: object
id: bi_promise_constructor
es6: true
present_if: DUK_USE_PROMISE_BUILTIN
# Node.js Buffer
- key: "Buffer"
value:
type: object
id: bi_nodejs_buffer_constructor
nodejs_buffer: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
# TypedArray
- key: "ArrayBuffer"
value:
type: object
id: bi_arraybuffer_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "DataView"
value:
type: object
id: bi_dataview_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "Int8Array"
value:
type: object
id: bi_int8array_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "Uint8Array"
value:
type: object
id: bi_uint8array_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "Uint8ClampedArray"
value:
type: object
id: bi_uint8clampedarray_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "Int16Array"
value:
type: object
id: bi_int16array_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "Uint16Array"
value:
type: object
id: bi_uint16array_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "Int32Array"
value:
type: object
id: bi_int32array_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "Uint32Array"
value:
type: object
id: bi_uint32array_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "Float32Array"
value:
type: object
id: bi_float32array_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
- key: "Float64Array"
value:
type: object
id: bi_float64array_constructor
typedarray: true
es6: true
present_if: DUK_USE_BUFFEROBJECT_SUPPORT
# Functions
- key: "eval"
value:
type: function
native: duk_bi_global_object_eval
length: 1
magic: 15 # see duk_js_call.c
special_call: true
auto_lightfunc: false # automatic lightfunc conversion clashes with internal implementation
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "parseInt"
value:
type: object
id: bi_parse_int
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "parseFloat"
value:
type: object
id: bi_parse_float
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "isNaN"
value:
type: function
native: duk_bi_global_object_is_nan
length: 1
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "isFinite"
value:
type: function
native: duk_bi_global_object_is_finite
length: 1
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "decodeURI"
value:
type: function
native: duk_bi_global_object_decode_uri
length: 1
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "decodeURIComponent"
value:
type: function
native: duk_bi_global_object_decode_uri_component
length: 1
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "encodeURI"
value:
type: function
native: duk_bi_global_object_encode_uri
length: 1
present_if: DUK_USE_GLOBAL_BUILTIN
- key: "encodeURIComponent"
value:
type: function
native: duk_bi_global_object_encode_uri_component
length: 1
present_if: DUK_USE_GLOBAL_BUILTIN
# Non-standard extensions: E5 Sections B.2.1 and B.2.2
#
# "length" is not specified explicitly in E5 but it follows the
# general argument count rule. V8 also agrees on the lengths.
- key: "escape"
value:
type: function
native: duk_bi_global_object_escape
length: 1
section_b: true
present_if:
- DUK_USE_SECTION_B
- DUK_USE_GLOBAL_BUILTIN
- key: "unescape"
value:
type: function
native: duk_bi_global_object_unescape
length: 1
section_b: true
present_if:
- DUK_USE_SECTION_B
- DUK_USE_GLOBAL_BUILTIN
# Encoding API: https://encoding.spec.whatwg.org/
- key: "TextEncoder"
value:
type: object
id: bi_textencoder_constructor
encoding_api: true
present_if: DUK_USE_ENCODING_BUILTINS
- key: "TextDecoder"
value:
type: object
id: bi_textdecoder_constructor
encoding_api: true
present_if: DUK_USE_ENCODING_BUILTINS
# High resolution time API: https://www.w3.org/TR/hr-time/
# Firefox and Chrome: accessor with 'ec' attributes, setter
# allows overwrite.
# Use data property with 'wec' for now.
- key: "performance"
value:
type: object
id: bi_performance
attributes: "wec"
performance_api: true
present_if: DUK_USE_PERFORMANCE_BUILTIN
- id: bi_parse_int
class: Function
internal_prototype: bi_function_prototype
native: duk_bi_global_object_parse_int
callable: true
constructable: false
bidx: false
present_if: DUK_USE_OBJECT_BUILTIN
properties:
- key: "length"
value: 2
attributes: "c"
- id: bi_parse_float
class: Function
internal_prototype: bi_function_prototype
native: duk_bi_global_object_parse_float
callable: true
constructable: false
bidx: false
present_if: DUK_USE_OBJECT_BUILTIN
properties:
- key: "length"
value: 1
attributes: "c"
- id: bi_global_env
class: ObjEnv
duktape: true
bidx: true
# The internal 'target' property is now part of duk_hobjenv and handled
# specially by RAM built-in init code. ROM built-ins provide an explicit
# initializer based on these properties.
objenv_target: bi_global
objenv_has_this: 0
properties: []
- id: bi_object_constructor
class: Function
internal_prototype: bi_function_prototype
native: duk_bi_object_constructor
callable: true
constructable: true
bidx: true
present_if: DUK_USE_OBJECT_BUILTIN
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_object_prototype
attributes: ""
- key: "name"
value: "Object"
attributes: "c"
- key: "getPrototypeOf"
value:
type: function
native: duk_bi_object_getprototype_shared
length: 1
magic: 1
- key: "setPrototypeOf"
value:
type: function
native: duk_bi_object_setprototype_shared
length: 2
magic: 1
es6: true
- key: "getOwnPropertyDescriptor"
value:
type: function
native: duk_bi_object_constructor_get_own_property_descriptor
length: 2
magic: 0
- key: "getOwnPropertyNames"
value:
type: function
native: duk_bi_object_constructor_keys_shared
length: 1
magic: 1
- key: "assign"
value:
type: function
native: duk_bi_object_constructor_assign
length: 2
varargs: true
es6: true
present_if: DUK_USE_ES6
- key: "create"
value:
type: function
native: duk_bi_object_constructor_create
length: 2
- key: "defineProperty"
value:
type: function
native: duk_bi_object_constructor_define_property
length: 3
magic: 0
- key: "defineProperties"
value:
type: function
native: duk_bi_object_constructor_define_properties
length: 2
- key: "seal"
value:
type: function
native: duk_bi_object_constructor_seal_freeze_shared
length: 1
magic: 0
- key: "freeze"
value:
type: function
native: duk_bi_object_constructor_seal_freeze_shared
length: 1
magic: 1
- key: "preventExtensions"
value:
type: function
native: duk_bi_object_constructor_prevent_extensions
length: 1
magic: 0
- key: "isSealed"
value:
type: function
native: duk_bi_object_constructor_is_sealed_frozen_shared
length: 1
magic: 0
- key: "isFrozen"
value:
type: function
native: duk_bi_object_constructor_is_sealed_frozen_shared
length: 1
magic: 1
- key: "isExtensible"
value:
type: function
native: duk_bi_object_constructor_is_extensible
length: 1
magic: 0
- key: "keys"
value:
type: function
native: duk_bi_object_constructor_keys_shared
length: 1
magic: 0
- key: "getOwnPropertySymbols"
value:
type: function
native: duk_bi_object_constructor_keys_shared
length: 1
magic: 2
es6: true
present_if: DUK_USE_ES6
- key: "is"
value:
type: function
native: duk_bi_object_constructor_is
length: 2
nargs: 2
es6: true
present_if: DUK_USE_ES6
- id: bi_object_prototype
class: Object
# internal_prototype: null
bidx: true
# Present even when DUK_USE_OBJECT_BUILTIN disabled.
properties:
- key: "constructor"
value:
type: object
id: bi_object_constructor
attributes: "wc"
present_if: DUK_USE_OBJECT_BUILTIN
- key: "__proto__"
value:
type: accessor
getter: duk_bi_object_getprototype_shared
setter: duk_bi_object_setprototype_shared
getter_nargs: 0
setter_nargs: 1
getter_magic: 0
setter_magic: 0
attributes: "c" # configurable in ES2015, also V8
es6: true # also non-standard legacy
present_if: DUK_USE_OBJECT_BUILTIN
- key: "toString"
value:
type: function
native: duk_bi_object_prototype_to_string
length: 0
present_if: DUK_USE_OBJECT_BUILTIN
- key: "toLocaleString"
value:
type: function
native: duk_bi_object_prototype_to_locale_string
length: 0
present_if: DUK_USE_OBJECT_BUILTIN
- key: "valueOf"
value:
type: function
native: duk_bi_object_prototype_value_of
length: 0
present_if: DUK_USE_OBJECT_BUILTIN
- key: "hasOwnProperty"
value:
type: function
native: duk_bi_object_prototype_has_own_property
length: 1
present_if: DUK_USE_OBJECT_BUILTIN
- key: "isPrototypeOf"
value:
type: function
native: duk_bi_object_prototype_is_prototype_of
length: 1
present_if: DUK_USE_OBJECT_BUILTIN
- key: "propertyIsEnumerable"
value:
type: function
native: duk_bi_object_prototype_property_is_enumerable
length: 1
present_if: DUK_USE_OBJECT_BUILTIN
# __defineGetter, __defineSetter__, __lookupGetter__, __lookupSetter__: ES2017 Annex B
# https://tc39.github.io/ecma262/#sec-additional-properties-of-the-object.prototype-object
- key: "__defineGetter__"
value:
type: function
native: duk_bi_object_prototype_defineaccessor
length: 2
magic: 0 # define getter
present_if: DUK_USE_ES8
- key: "__defineSetter__"
value:
type: function
native: duk_bi_object_prototype_defineaccessor
length: 2
magic: 1 # define setter
present_if: DUK_USE_ES8
- key: "__lookupGetter__"
value:
type: function
native: duk_bi_object_prototype_lookupaccessor
length: 1
magic: 0 # lookup getter
present_if: DUK_USE_ES8
- key: "__lookupSetter__"
value:
type: function
native: duk_bi_object_prototype_lookupaccessor
length: 1
magic: 1 # lookup setter
present_if: DUK_USE_ES8
- id: bi_function_constructor
class: Function
internal_prototype: bi_function_prototype
varargs: true
native: duk_bi_function_constructor
callable: true
constructable: true
bidx: true
present_if: DUK_USE_FUNCTION_BUILTIN
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_function_prototype
attributes: ""
- key: "name"
value: "Function"
attributes: "c"
# Note, unlike other prototype objects, Function.prototype is itself
# a Function and callable. When invoked, it accepts any arguments
# and returns undefined. It cannot be called as a constructor.
# See E5 Section 15.3.4.
- id: bi_function_prototype
class: Function
internal_prototype: bi_object_prototype
native: duk_bi_function_prototype
callable: true
constructable: false
bidx: true
nargs: 0 # given explicitly because .length is optional
# Present even when DUK_USE_FUNCTION_BUILTIN disabled.
properties:
- key: "length"
value: 0
attributes: "c"
present_if: DUK_USE_FUNCTION_BUILTIN
- key: "constructor"
value:
type: object
id: bi_function_constructor
attributes: "wc"
present_if: DUK_USE_FUNCTION_BUILTIN
# In ES2015 Function.prototype.name is not writable, but is configurable.
- key: "name"
value: ""
attributes: "c"
#present_if: DUK_USE_FUNCTION_BUILTIN # Kept even when prototype is otherwise empty to guarantee a .name for functions
# test262 ch15/15.3/15.3.4/15.3.4.2/S15.3.4.2_A11 checks that Function.prototype.toString.length
# is zero, cannot find specification support for that but 0 is a good value.
- key: "toString"
value:
type: function
native: duk_bi_function_prototype_to_string
length: 0
present_if: DUK_USE_FUNCTION_BUILTIN
- key: "apply"
value:
type: function
native: duk_bi_function_prototype_apply
length: 2
magic: 1 # see duk_js_call.c
special_call: true
auto_lightfunc: false # automatic lightfunc conversion clashes with internal implementation
present_if: DUK_USE_FUNCTION_BUILTIN
- key: "call"
value:
type: function
native: duk_bi_function_prototype_call
length: 1
magic: 0 # see duk_js_call.c
varargs: true
special_call: true
auto_lightfunc: false # automatic lightfunc conversion clashes with internal implementation
present_if: DUK_USE_FUNCTION_BUILTIN
- key: "bind"
value:
type: function
native: duk_bi_function_prototype_bind
length: 1
varargs: true
present_if: DUK_USE_FUNCTION_BUILTIN
# ES2015
- key: # @@hasInstance
type: symbol
variant: wellknown
string: "Symbol.hasInstance"
value:
type: function
native: duk_bi_function_prototype_hasinstance
length: 1
attributes: ""
es6: true
present_if: DUK_USE_SYMBOL_BUILTIN
# Duktape specific %NativeFunctionPrototype% which provides some getters.
#
- id: bi_native_function_prototype
class: Object
internal_prototype: bi_function_prototype
native: duk_bi_function_prototype
bidx: true
duktape: true
# Present even when DUK_USE_FUNCTION_BUILTIN disabled.
properties:
- key: "length"
value:
type: accessor
getter: duk_bi_native_function_length
getter_nargs: 0
getter_magic: 0
# Setter undefined: direct write fails (defineProperty() works).
# This mimics ES2015 function (own property) .length which is
# not writable but configurable.
attributes: "c"
#present_if: DUK_USE_FUNCTION_BUILTIN # Kept to guarantee a .length for lightfuncs
- key: "name"
value:
type: accessor
getter: duk_bi_native_function_name
getter_nargs: 0
getter_magic: 0
# Setter undefined: direct write fails (defineProperty() works).
# This mimics ES2015 function (own property) .name which is
# not writable but configurable.
attributes: "c"
#present_if: DUK_USE_FUNCTION_BUILTIN # Kept to guarantee a .name for lightfuncs
- id: bi_array_constructor
class: Function
internal_prototype: bi_function_prototype
varargs: true
native: duk_bi_array_constructor
callable: true
constructable: true
bidx: true
present_if: DUK_USE_ARRAY_BUILTIN
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_array_prototype
attributes: ""
- key: "name"
value: "Array"
attributes: "c"
- key: "isArray"
value:
type: function
native: duk_bi_array_constructor_is_array
length: 1
#- key: # @@species
# type: symbol
# variant: wellknown
# string: "Symbol.species"
# value: XXX
# es6: true
- id: bi_array_prototype
class: Array
internal_prototype: bi_object_prototype
bidx: true
# Present even when DUK_USE_ARRAY_BUILTIN disabled.
# An array prototype is an Array itself. It has a length property initialized to 0,
# with property attributes: writable, non-configurable, non-enumerable. The attributes
# are not specified very explicitly for the prototype, but are given for Array instances
# in E5 Section 15.4.5.2 (and this matches the behavior of e.g. V8).
properties:
# With duk_harray added to the internal representation, .length is now virtual.
#- key: "length"
# value: 0
# attributes: "w"
- key: "constructor"
value:
type: object
id: bi_array_constructor
attributes: "wc"
present_if: DUK_USE_ARRAY_BUILTIN
- key: "toString"
value:
type: function
native: duk_bi_array_prototype_to_string
length: 0
present_if: DUK_USE_ARRAY_BUILTIN
- key: "toLocaleString"
value:
type: function
native: duk_bi_array_prototype_join_shared
length: 0
magic: 1 # magic: to_locale_string, here 1
present_if: DUK_USE_ARRAY_BUILTIN
- key: "concat"
value:
type: function
native: duk_bi_array_prototype_concat
length: 1
varargs: true
present_if: DUK_USE_ARRAY_BUILTIN
- key: "join"
value:
type: function
native: duk_bi_array_prototype_join_shared
length: 1
magic: 0 # magic: to_locale_string, here 0
present_if: DUK_USE_ARRAY_BUILTIN
- key: "pop"
value:
type: function
native: duk_bi_array_prototype_pop
length: 0
present_if: DUK_USE_ARRAY_BUILTIN
- key: "push"
value:
type: function
native: duk_bi_array_prototype_push
length: 1
varargs: true
present_if: DUK_USE_ARRAY_BUILTIN
- key: "reverse"
value:
type: function
native: duk_bi_array_prototype_reverse
length: 0
present_if: DUK_USE_ARRAY_BUILTIN
- key: "shift"
value:
type: function
native: duk_bi_array_prototype_shift
length: 0
present_if: DUK_USE_ARRAY_BUILTIN
- key: "slice"
value:
type: function
native: duk_bi_array_prototype_slice
length: 2
present_if: DUK_USE_ARRAY_BUILTIN
- key: "sort"
value:
type: function
native: duk_bi_array_prototype_sort
length: 1
present_if: DUK_USE_ARRAY_BUILTIN
- key: "splice"
value:
type: function
native: duk_bi_array_prototype_splice
length: 2
varargs: true
present_if: DUK_USE_ARRAY_BUILTIN
- key: "unshift"
value:
type: function
native: duk_bi_array_prototype_unshift
length: 1
varargs: true
present_if: DUK_USE_ARRAY_BUILTIN
- key: "indexOf"
value:
type: function
native: duk_bi_array_prototype_indexof_shared
length: 1
varargs: true
magic: 1 # magic: idx_step = +1
present_if: DUK_USE_ARRAY_BUILTIN
- key: "lastIndexOf"
value:
type: function
native: duk_bi_array_prototype_indexof_shared
length: 1
varargs: true
magic: -1 # magic: idx_step = -1
present_if: DUK_USE_ARRAY_BUILTIN
- key: "every"
value:
type: function
native: duk_bi_array_prototype_iter_shared
length: 1
nargs: 2
magic:
type: array_iter
funcname: "every" # BI_ARRAY_ITER_EVERY
present_if: DUK_USE_ARRAY_BUILTIN
- key: "some"
value:
type: function
native: duk_bi_array_prototype_iter_shared
length: 1
nargs: 2
magic:
type: array_iter
funcname: "some" # BI_ARRAY_ITER_SOME
present_if: DUK_USE_ARRAY_BUILTIN
- key: "forEach"
value:
type: function
native: duk_bi_array_prototype_iter_shared
length: 1
nargs: 2
magic:
type: array_iter
funcname: "forEach" # BI_ARRAY_ITER_FOREACH
present_if: DUK_USE_ARRAY_BUILTIN
- key: "map"
value:
type: function
native: duk_bi_array_prototype_iter_shared
length: 1
nargs: 2
magic:
type: array_iter
funcname: "map" # BI_ARRAY_ITER_MAP
present_if: DUK_USE_ARRAY_BUILTIN
- key: "filter"
value:
type: function
native: duk_bi_array_prototype_iter_shared
length: 1
nargs: 2
magic:
type: array_iter
funcname: filter # BI_ARRAY_ITER_FILTER
present_if: DUK_USE_ARRAY_BUILTIN
- key: "reduce"
value:
type: function
native: duk_bi_array_prototype_reduce_shared
length: 1
varargs: true
magic: 1 # magic: idx_step = +1
present_if: DUK_USE_ARRAY_BUILTIN
- key: "reduceRight"
value:
type: function
native: duk_bi_array_prototype_reduce_shared
length: 1
varargs: true
magic: -1 # magic: idx_step = -1
present_if: DUK_USE_ARRAY_BUILTIN
#- key: # @@iterator
# type: symbol
# variant: wellknown
# string: "Symbol.iterator"
# value: XXX
# es6: true
#- key: # @@unscopables
# type: symbol
# variant: wellknown
# string: "Symbol.unscopables"
# value: XXX
# es6: true
- id: bi_string_constructor
class: Function
internal_prototype: bi_function_prototype
varargs: true
native: duk_bi_string_constructor
callable: true
constructable: true
bidx: true
present_if: DUK_USE_STRING_BUILTIN
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_string_prototype
attributes: ""
- key: "name"
value: "String"
attributes: "c"
- key: "fromCharCode"
value:
type: function
native: duk_bi_string_constructor_from_char_code
length: 1
varargs: true
- key: "fromCodePoint"
value:
type: function
native: duk_bi_string_constructor_from_code_point
length: 1
varargs: true
present_if: DUK_USE_ES6
- id: bi_string_prototype
class: String
internal_prototype: bi_object_prototype
bidx: true
# Present even when DUK_USE_STRING_BUILTIN disabled.
# String prototype is a String instance and must have length value 0.
# This is supplied by the String instance virtual properties and does
# not need to be included in init data.
#
# Unlike Array.prototype.length, String.prototype.length has the default
# "length" attributes of built-in objects: non-writable, non-enumerable,
# non-configurable.
#length: 0, # omitted; non-writable, non-enumerable, non-configurable
properties:
- key: "constructor"
value:
type: object
id: bi_string_constructor
attributes: "wc"
present_if: DUK_USE_STRING_BUILTIN
# Internal empty string value. Note that this value is not writable
# which prevents a String instance's internal value also from being
# written with standard methods. The internal code creating String
# instances has no such issues.
- key:
type: symbol
variant: hidden
string: "Value"
value: ""
attributes: ""
duktape: true
- key: "toString"
value:
type: function
native: duk_bi_string_prototype_to_string
length: 0
present_if: DUK_USE_STRING_BUILTIN
- key: "valueOf"
value:
type: function
native: duk_bi_string_prototype_to_string # share native function, behavior is identical
length: 0
present_if: DUK_USE_STRING_BUILTIN
- key: "charAt"
value:
type: function
native: duk_bi_string_prototype_char_at
length: 1
present_if: DUK_USE_STRING_BUILTIN
- key: "charCodeAt"
value:
type: function
native: duk_bi_string_prototype_char_code_at
length: 1
magic: 0
present_if: DUK_USE_STRING_BUILTIN
- key: "codePointAt"
value:
type: function
native: duk_bi_string_prototype_char_code_at
length: 1
magic: 1
es6: true
present_if:
- DUK_USE_ES6
- DUK_USE_STRING_BUILTIN
- key: "concat"
value:
type: function
native: duk_bi_string_prototype_concat
length: 1
varargs: true
present_if: DUK_USE_STRING_BUILTIN
- key: "indexOf"
value:
type: function
native: duk_bi_string_prototype_indexof_shared
length: 1
nargs: 2
magic: 0 # magic = 0 -> indexOf
present_if: DUK_USE_STRING_BUILTIN
- key: "lastIndexOf"
value:
type: function
native: duk_bi_string_prototype_indexof_shared
length: 1
nargs: 2
magic: 1 # magic = 1 -> lastIndexOf
present_if: DUK_USE_STRING_BUILTIN
- key: "localeCompare"
value:
type: function
native: duk_bi_string_prototype_locale_compare
length: 1
present_if: DUK_USE_STRING_BUILTIN
- key: "match"
value:
type: function
native: duk_bi_string_prototype_match
length: 1
present_if:
- DUK_USE_STRING_BUILTIN
- DUK_USE_REGEXP_SUPPORT
- key: "replace"
value:
type: function
native: duk_bi_string_prototype_replace
length: 2
present_if: DUK_USE_STRING_BUILTIN
- key: "search"
value:
type: function
native: duk_bi_string_prototype_search
length: 1
present_if:
- DUK_USE_STRING_BUILTIN
- DUK_USE_REGEXP_SUPPORT
- key: "slice"
value:
type: function
native: duk_bi_string_prototype_slice
length: 2
present_if: DUK_USE_STRING_BUILTIN
- key: "split"
value:
type: function
native: duk_bi_string_prototype_split
length: 2
present_if: DUK_USE_STRING_BUILTIN
- key: "substring"
value:
type: function
native: duk_bi_string_prototype_substring
length: 2
present_if: DUK_USE_STRING_BUILTIN
- key: "toLowerCase"
value:
type: function
native: duk_bi_string_prototype_caseconv_shared
length: 0
magic: 0 # magic = uppercase
present_if: DUK_USE_STRING_BUILTIN
- key: "toLocaleLowerCase"
value:
type: function
native: duk_bi_string_prototype_caseconv_shared
length: 0
magic: 0 # magic = uppercase; no locale specific conversion now
present_if: DUK_USE_STRING_BUILTIN
- key: "toUpperCase"
value:
type: function
native: duk_bi_string_prototype_caseconv_shared
length: 0
magic: 1 # magic = uppercase
present_if: DUK_USE_STRING_BUILTIN
- key: "toLocaleUpperCase"
value:
type: function
native: duk_bi_string_prototype_caseconv_shared
length: 0
magic: 1 # magic = uppercase; no locale specific conversion now
present_if: DUK_USE_STRING_BUILTIN
- key: "trim"
value:
type: function
native: duk_bi_string_prototype_trim
length: 0
present_if: DUK_USE_STRING_BUILTIN
- key: "repeat"
value:
type: function
native: duk_bi_string_prototype_repeat
length: 1
nargs: 1
present_if:
- DUK_USE_ES6
- DUK_USE_STRING_BUILTIN
- key: "startsWith"
value:
type: function
native: duk_bi_string_prototype_startswith_endswith
length: 1
nargs: 2
magic: 0 # 0=startsWith
present_if:
- DUK_USE_ES6
- DUK_USE_STRING_BUILTIN
- key: "endsWith"
value:
type: function
native: duk_bi_string_prototype_startswith_endswith
length: 1
nargs: 2
magic: 1 # 1=endsWith
present_if:
- DUK_USE_ES6
- DUK_USE_STRING_BUILTIN
- key: "includes"
value:
type: function
native: duk_bi_string_prototype_includes
length: 1
nargs: 2
present_if:
- DUK_USE_ES6
- DUK_USE_STRING_BUILTIN
# Non-standard extension: E5 Section B.2.3
- key: "substr"
value:
type: function
native: duk_bi_string_prototype_substr
length: 2
section_b: true
present_if:
- DUK_USE_STRING_BUILTIN
- DUK_USE_SECTION_B
#- key: # @@iterator
# type: symbol
# variant: wellknown
# string: "Symbol.iterator"
# value: XXX
# es6: true
- id: bi_boolean_constructor
class: Function
internal_prototype: bi_function_prototype
native: duk_bi_boolean_constructor
callable: true
constructable: true
bidx: true
present_if: DUK_USE_BOOLEAN_BUILTIN
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_boolean_prototype
attributes: ""
- key: "name"
value: "Boolean"
attributes: "c"
- id: bi_boolean_prototype
class: Boolean
internal_prototype: bi_object_prototype
bidx: true
# Present even when DUK_USE_BOOLEAN_BUILTIN disabled.
properties:
- key: "constructor"
value:
type: object
id: bi_boolean_constructor
attributes: "wc"
present_if: DUK_USE_BOOLEAN_BUILTIN
# Internal false boolean value. Note that this value is not writable
# which prevents a Boolean instance's internal value also from being
# written with standard methods. The internal code creating Boolean
# instances has no such issues.
- key:
type: symbol
variant: hidden
string: "Value"
value: false
attributes: ""
duktape: true
- key: "toString"
value:
type: function
native: duk_bi_boolean_prototype_tostring_shared
length: 0
magic: 1 # magic = coerce_tostring
present_if: DUK_USE_BOOLEAN_BUILTIN
- key: "valueOf"
value:
type: function
native: duk_bi_boolean_prototype_tostring_shared
length: 0
magic: 0 # magic = coerce_tostring
present_if: DUK_USE_BOOLEAN_BUILTIN
- id: bi_number_constructor
class: Function
internal_prototype: bi_function_prototype
varargs: true
native: duk_bi_number_constructor
callable: true
constructable: true
bidx: true
present_if: DUK_USE_NUMBER_BUILTIN
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_number_prototype
attributes: ""
- key: "name"
value: "Number"
attributes: "c"
- key: "MAX_VALUE"
value:
type: double
bytes: "7fefffffffffffff" # DBL_MAX_DOUBLE
attributes: ""
- key: "MIN_VALUE"
value:
type: double
bytes: "0000000000000001" # DBL_MIN_DOUBLE
attributes: ""
- key: "NaN"
value:
type: double
bytes: "7ff8000000000000" # DBL_NAN
attributes: ""
- key: "POSITIVE_INFINITY"
value:
type: double
bytes: "7ff0000000000000" # DBL_POSITIVE_INFINITY
attributes: ""
- key: "NEGATIVE_INFINITY"
value:
type: double
bytes: "fff0000000000000" # DBL_NEGATIVE_INFINITY
attributes: ""
- key: "EPSILON"
value:
type: double
bytes: "3cb0000000000000" # 3ff0000000000001 - 3ff0000000000000 = 3cb0000000000000
attributes: ""
es6: true
present_if: DUK_USE_ES6
- key: "MAX_SAFE_INTEGER"
value:
# >>> struct.pack('>d', 9007199254740991.0).encode('hex')
# '433fffffffffffff'
type: double
bytes: "433fffffffffffff"
attributes: ""
es6: true
present_if: DUK_USE_ES6
- key: "MIN_SAFE_INTEGER"
value:
# >>> struct.pack('>d', -9007199254740991.0).encode('hex')
# 'c33fffffffffffff'
type: double
bytes: "c33fffffffffffff"
attributes: ""
es6: true
present_if: DUK_USE_ES6
- key: "isFinite"
value:
type: function
native: duk_bi_number_check_shared
length: 1
magic: 0
attributes: "wc"
es6: true
present_if: DUK_USE_ES6
- key: "isInteger"
value:
type: function
native: duk_bi_number_check_shared
length: 1
magic: 1
attributes: "wc"
es6: true
present_if: DUK_USE_ES6
- key: "isNaN"
value:
type: function
native: duk_bi_number_check_shared
length: 1
magic: 2
attributes: "wc"
es6: true
present_if: DUK_USE_ES6
- key: "isSafeInteger"
value:
type: function
native: duk_bi_number_check_shared
length: 1
magic: 3
attributes: "wc"
es6: true
present_if: DUK_USE_ES6
- key: "parseInt" # Must map to the exactly same object as global parseInt()
value:
type: object
id: bi_parse_int
es6: true
present_if: DUK_USE_ES6
- key: "parseFloat" # Must map to the exactly same object as global parseFloat()
value:
type: object
id: bi_parse_float
es6: true
present_if: DUK_USE_ES6
- id: bi_number_prototype
class: Number
internal_prototype: bi_object_prototype
bidx: true
# Present even when DUK_USE_NUMBER_BUILTIN disabled.
properties:
- key: "constructor"
value:
type: object
id: bi_number_constructor
attributes: "wc"
present_if: DUK_USE_NUMBER_BUILTIN
# Internal 0.0 number value. Note that this value is not writable
# which prevents a Number instance's internal value also from being
# written with standard methods. The internal code creating Number
# instances has no such issues.
#
# Number.prototype is a Number itself in ES5.1 and ES2016+. It was
# briefly made a non-Number in ES2015 but this change was reverted
# in ES2016.
- key:
type: symbol
variant: hidden
string: "Value"
value: 0.0
attributes: ""
duktape: true
- key: "toString"
value:
type: function
native: duk_bi_number_prototype_to_string
length: 1
present_if: DUK_USE_NUMBER_BUILTIN
- key: "toLocaleString"
value:
type: function
native: duk_bi_number_prototype_to_locale_string
length: 1
present_if: DUK_USE_NUMBER_BUILTIN
- key: "valueOf"
value:
type: function
native: duk_bi_number_prototype_value_of
length: 0
present_if: DUK_USE_NUMBER_BUILTIN
- key: "toFixed"
value:
type: function
native: duk_bi_number_prototype_to_fixed
length: 1
present_if: DUK_USE_NUMBER_BUILTIN
- key: "toExponential"
value:
type: function
native: duk_bi_number_prototype_to_exponential
length: 1
present_if: DUK_USE_NUMBER_BUILTIN
- key: "toPrecision"
value:
type: function
native: duk_bi_number_prototype_to_precision
length: 1
present_if: DUK_USE_NUMBER_BUILTIN
- id: bi_date_constructor
class: Function
internal_prototype: bi_function_prototype
varargs: true
native: duk_bi_date_constructor
callable: true
constructable: true
bidx: true
present_if: DUK_USE_DATE_BUILTIN
properties:
- key: "length"
value: 7
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_date_prototype
attributes: ""
- key: "name"
value: "Date"
attributes: "c"
- key: "parse"
value:
type: function
native: duk_bi_date_constructor_parse
length: 1
- key: "UTC"
value:
type: function
native: duk_bi_date_constructor_utc
length: 7
varargs: true
- key: "now"
value:
type: function
native: duk_bi_date_constructor_now
length: 0
- id: bi_date_prototype
class: Date
internal_prototype: bi_object_prototype
bidx: true
present_if: DUK_USE_DATE_BUILTIN
# The Date prototype is an instance of Date with [[PrimitiveValue]] NaN.
#
# Setters with optional arguments must be varargs functions because
# they must detect the number of parameters actually given (cannot
# assume parameters not given are undefined).
#
# Date.prototype.valueOf() and Date.prototype.getTime() have identical
# behavior so they share the same C function, but have different
# function instances.
#
# Getters, setters, and string conversion functions use shared native
# helpers and the function "magic" value is used to pass flags and
# parameters to the helpers.
properties:
- key: "constructor"
value:
type: object
id: bi_date_constructor
attributes: "wc"
# Internal date value (E5 Section 15.9.5).
#
# Note: the value is writable, as you can e.g. do the following (V8):
# > Date.prototype.toString()
# "Invalid Date"
# > Date.prototype.setYear(2010)
# 1262296800000
# > Date.prototype.toString()
# "Fri Jan 01 2010 00:00:00 GMT+0200 (EET)"
- key:
type: symbol
variant: hidden
string: "Value"
value:
type: double
bytes: "7ff8000000000000" # DBL_NAN
attributes: "w"
duktape: true
# NOTE: The magic values for Date prototype are special. The actual control
# flags needed for the built-ins don't fit into LIGHTFUNC magic field, so
# the values here are indices to duk__date_magics[] in duk_bi_date.c which
# contains the actual control flags. Magic values here must be kept in strict
# sync with duk_bi_date.c!
- key: "toString"
value:
type: function
native: duk_bi_date_prototype_tostring_shared
length: 0
magic: 0
- key: "toDateString"
value:
type: function
native: duk_bi_date_prototype_tostring_shared
length: 0
magic: 1
- key: "toTimeString"
value:
type: function
native: duk_bi_date_prototype_tostring_shared
length: 0
magic: 2
- key: "toLocaleString"
value:
type: function
native: duk_bi_date_prototype_tostring_shared
length: 0
magic: 3
- key: "toLocaleDateString"
value:
type: function
native: duk_bi_date_prototype_tostring_shared
length: 0
magic: 4
- key: "toLocaleTimeString"
value:
type: function
native: duk_bi_date_prototype_tostring_shared
length: 0
magic: 5
- key: "toUTCString"
value:
type: function
native: duk_bi_date_prototype_tostring_shared
length: 0
magic: 6
- key: "toISOString"
value:
type: function
native: duk_bi_date_prototype_tostring_shared
length: 0
magic: 7
- key: "toJSON"
value:
type: function
native: duk_bi_date_prototype_to_json
length: 1
- key: "valueOf"
value:
type: function
native: duk_bi_date_prototype_value_of
length: 0
- key: "getTime"
value:
type: function
native: duk_bi_date_prototype_value_of # Native function shared on purpose
length: 0
- key: "getFullYear"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 8
- key: "getUTCFullYear"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 9
- key: "getMonth"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 10
- key: "getUTCMonth"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 11
- key: "getDate"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 12
- key: "getUTCDate"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 13
- key: "getDay"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 14
- key: "getUTCDay"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 15
- key: "getHours"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 16
- key: "getUTCHours"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 17
- key: "getMinutes"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 18
- key: "getUTCMinutes"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 19
- key: "getSeconds"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 20
- key: "getUTCSeconds"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 21
- key: "getMilliseconds"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 22
- key: "getUTCMilliseconds"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 23
- key: "getTimezoneOffset"
value:
type: function
native: duk_bi_date_prototype_get_timezone_offset
length: 0
- key: "setTime"
value:
type: function
native: duk_bi_date_prototype_set_time
length: 1
- key: "setMilliseconds"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 1
magic: 24
- key: "setUTCMilliseconds"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 1
magic: 25
- key: "setSeconds"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 2
varargs: true
magic: 26
- key: "setUTCSeconds"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 2
varargs: true
magic: 27
- key: "setMinutes"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 3
varargs: true
magic: 28
- key: "setUTCMinutes"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 3
varargs: true
magic: 29
- key: "setHours"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 4
varargs: true
magic: 30
- key: "setUTCHours"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 4
varargs: true
magic: 31
- key: "setDate"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 1
magic: 32
- key: "setUTCDate"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 1
magic: 33
- key: "setMonth"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 2
varargs: true
magic: 34
- key: "setUTCMonth"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 2
varargs: true
magic: 35
- key: "setFullYear"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 3
varargs: true
magic: 36
- key: "setUTCFullYear"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 3
varargs: true
magic: 37
# Note: toGMTString() is required to initially be the same Function
# object as the initial Date.prototype.toUTCString. In other words
# the following must compare true:
#
# Date.prototype.toGMTString === Date.prototype.toUTCString.
#
# This is currently handled using a small tweak in duk_hthread_builtins.c
# (for RAM objects) and genbuiltins.py (for ROM objects).
#
# Note that while Smjs respects the requirement in E5 Section B.2.6,
# V8 does not.
- key: "toGMTString"
value:
type: function
native: duk_bi_date_prototype_tostring_shared
length: 0
magic: 6
section_b: true
# Non-standard extensions: E5 Section B.2.4, B.2.5, B.2.6
#
# "length" values are not given explicitly but follows the general rule.
# The lengths below agree with V8.
- key: "getYear"
value:
type: function
native: duk_bi_date_prototype_get_shared
length: 0
magic: 38
section_b: true
- key: "setYear"
value:
type: function
native: duk_bi_date_prototype_set_shared
length: 1
magic: 39
section_b: true
- key: # @@toPrimitive
type: symbol
variant: wellknown
string: "Symbol.toPrimitive"
value:
type: function
native: duk_bi_date_prototype_toprimitive
length: 1
name: "[Symbol.toPrimitive]"
attributes: "c"
es6: true
present_if: DUK_USE_SYMBOL_BUILTIN
- id: bi_regexp_constructor
class: Function
internal_prototype: bi_function_prototype
native: duk_bi_regexp_constructor
callable: true
constructable: true
bidx: true
present_if: DUK_USE_REGEXP_SUPPORT
properties:
- key: "length"
value: 2
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_regexp_prototype
attributes: ""
- key: "name"
value: "RegExp"
attributes: "c"
#- key: # @@species
# type: symbol
# variant: wellknown
# string: "Symbol.species"
# value: XXX
# es6: true
- id: bi_regexp_prototype
class: Object # Object in ES2015; RegExp in ES5
internal_prototype: bi_object_prototype
bidx: true
present_if: DUK_USE_REGEXP_SUPPORT
properties:
- key: "constructor"
value:
type: object
id: bi_regexp_constructor
attributes: "wc"
# In ES2015 RegExp.prototype is no longer a RegExp instance.
# "lastIndex" is writable, even in the RegExp.prototype object.
# This matches at least V8.
- key: "lastIndex"
value: 0
attributes: "w"
- key: "exec"
value:
type: function
native: duk_bi_regexp_prototype_exec
length: 1
- key: "test"
value:
type: function
native: duk_bi_regexp_prototype_test
length: 1
- key: "toString"
value:
type: function
native: duk_bi_regexp_prototype_tostring
length: 0
# In ES2015 .source, .global, .ignoreCase, etc are accessors.
# .flags is ES2015 but must be present because the constructor now
# relies on its presence for e.g. new RegExp(/foo/gim).
- key: "flags"
value:
type: accessor
getter: duk_bi_regexp_prototype_flags
getter_nargs: 0
getter_magic: 0
# setter undefined
attributes: "c"
es6: true
- key: "source"
value:
type: accessor
getter: duk_bi_regexp_prototype_shared_getter
getter_nargs: 0
getter_magic: 16 # default case in shared getter (value quite arbitrary)
# setter undefined
attributes: "c"
- key: "global"
value:
type: accessor
getter: duk_bi_regexp_prototype_shared_getter
getter_nargs: 0
getter_magic: 0
# setter undefined
attributes: "c"
- key: "ignoreCase"
value:
type: accessor
getter: duk_bi_regexp_prototype_shared_getter
getter_nargs: 0
getter_magic: 1
# setter undefined
attributes: "c"
- key: "multiline"
value:
type: accessor
getter: duk_bi_regexp_prototype_shared_getter
getter_nargs: 0
getter_magic: 2
# setter undefined
attributes: "c"
# .sticky and .unicode commented out; don't provide until implemented
# to avoid interfering with application feature detection code
#- key: "sticky"
# value:
# type: accessor
# getter: duk_bi_regexp_prototype_shared_getter
# getter_nargs: 0
# getter_magic: 3
# # setter undefined
# attributes: "c"
# es6: true
# present_if: DUK_USE_ES6
#- key: "unicode"
# value:
# type: accessor
# getter: duk_bi_regexp_prototype_shared_getter
# getter_nargs: 0
# getter_magic: 4
# # setter undefined
# attributes: "c"
# es6: true
# present_if: DUK_USE_ES6
#- key: # @@match
# type: symbol
# variant: wellknown
# string: "Symbol.match"
# value: XXX
# es6: true
#- key: # @@replace
# type: symbol
# variant: wellknown
# string: "Symbol.replace"
# value: XXX
# es6: true
#- key: # @@search
# type: symbol
# variant: wellknown
# string: "Symbol.search"
# value: XXX
# es6: true
#- key: # @@split
# type: symbol
# variant: wellknown
# string: "Symbol.split"
# value: XXX
# es6: true
- id: bi_error_constructor
class: Function
internal_prototype: bi_function_prototype
native: duk_bi_error_constructor_shared
callable: true
constructable: true
magic:
type: bidx
id: bi_error_prototype
bidx: true
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_error_prototype
attributes: ""
- key: "name"
value: "Error"
attributes: "c"
- id: bi_error_prototype
class: Error
internal_prototype: bi_object_prototype
bidx: true
properties:
- key: "constructor"
value:
type: object
id: bi_error_constructor
attributes: "wc"
# Standard properties; property attributes:
#
# "message" is writable and deletable. This matches the default
# attributes of "wc". V8 and Smjs both match this.
#
# "name" is writable and deletable. This matches the default
# attributes too. Smjs behaves like this, but in V8 "name" is
# non-writable:
#
# > Object.getOwnPropertyDescriptor(Error.prototype, "name")
# { value: "Error",
# writable: false,
# enumerable: false,
# configurable: false }
#
# We go with the standard attributes ("wc").
- key: "name"
value: "Error"
- key: "message"
value: ""
# Custom properties
- key: "stack"
value:
type: accessor
getter: duk_bi_error_prototype_stack_getter
setter: duk_bi_error_prototype_stack_setter
getter_nargs: 0
setter_nargs: 1
getter_magic: 0
setter_magic: 0
attributes: "c"
duktape: true
- key: "fileName"
value:
type: accessor
getter: duk_bi_error_prototype_filename_getter
setter: duk_bi_error_prototype_filename_setter
getter_nargs: 0
setter_nargs: 1
getter_magic: 0
setter_magic: 0
attributes: "c"
duktape: true
- key: "lineNumber"
value:
type: accessor
getter: duk_bi_error_prototype_linenumber_getter
setter: duk_bi_error_prototype_linenumber_setter
getter_nargs: 0
setter_nargs: 1
getter_magic: 0
setter_magic: 0
attributes: "c"
duktape: true
- key: "toString"
value:
type: function
native: duk_bi_error_prototype_to_string
length: 0
# NOTE: Error subclass prototypes have an empty "message" property, even
# though one is inherited already from Error prototype (E5 Section 15.11.7.10).
#
# V8 does not respect this: Error subclasses ("native Errors" in E5 spec)
# do not have a "message" property at all. Also, in V8 their "name" property
# is not writable and configurable as E5 requires.
- id: bi_eval_error_constructor
class: Function
internal_prototype: bi_error_constructor
native: duk_bi_error_constructor_shared
callable: true
constructable: true
magic:
type: bidx
id: bi_eval_error_prototype
bidx: true
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_eval_error_prototype
attributes: ""
- key: "name"
value: "EvalError"
attributes: "c"
- id: bi_eval_error_prototype
class: Error
internal_prototype: bi_error_prototype
bidx: true
properties:
- key: "constructor"
value:
type: object
id: bi_eval_error_constructor
attributes: "wc"
- key: "name"
value: "EvalError"
- key: "message"
value: ""
- id: bi_range_error_constructor
class: Function
internal_prototype: bi_error_constructor
native: duk_bi_error_constructor_shared
callable: true
constructable: true
magic:
type: bidx
id: bi_range_error_prototype
bidx: true
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_range_error_prototype
attributes: ""
- key: "name"
value: "RangeError"
attributes: "c"
- id: bi_range_error_prototype
class: Error
internal_prototype: bi_error_prototype
bidx: true
properties:
- key: "constructor"
value:
type: object
id: bi_range_error_constructor
attributes: "wc"
- key: "name"
value: "RangeError"
- key: "message"
value: ""
- id: bi_reference_error_constructor
class: Function
internal_prototype: bi_error_constructor
native: duk_bi_error_constructor_shared
callable: true
constructable: true
magic:
type: bidx
id: bi_reference_error_prototype
bidx: true
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_reference_error_prototype
attributes: ""
- key: "name"
value: "ReferenceError"
attributes: "c"
- id: bi_reference_error_prototype
class: Error
internal_prototype: bi_error_prototype
bidx: true
properties:
- key: "constructor"
value:
type: object
id: bi_reference_error_constructor
attributes: "wc"
- key: "name"
value: "ReferenceError"
- key: "message"
value: ""
- id: bi_syntax_error_constructor
class: Function
internal_prototype: bi_error_constructor
native: duk_bi_error_constructor_shared
callable: true
constructable: true
magic:
type: bidx
id: bi_syntax_error_prototype
bidx: true
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_syntax_error_prototype
attributes: ""
- key: "name"
value: "SyntaxError"
attributes: "c"
- id: bi_syntax_error_prototype
class: Error
internal_prototype: bi_error_prototype
bidx: true
properties:
- key: "constructor"
value:
type: object
id: bi_syntax_error_constructor
attributes: "wc"
- key: "name"
value: "SyntaxError"
- key: "message"
value: ""
- id: bi_type_error_constructor
class: Function
internal_prototype: bi_error_constructor
native: duk_bi_error_constructor_shared
callable: true
constructable: true
magic:
type: bidx
id: bi_type_error_prototype
bidx: true
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_type_error_prototype
attributes: ""
- key: "name"
value: "TypeError"
attributes: "c"
- id: bi_type_error_prototype
class: Error
internal_prototype: bi_error_prototype
bidx: true
properties:
- key: "constructor"
value:
type: object
id: bi_type_error_constructor
attributes: "wc"
- key: "name"
value: "TypeError"
- key: "message"
value: ""
- id: bi_uri_error_constructor
class: Function
internal_prototype: bi_error_constructor
native: duk_bi_error_constructor_shared
callable: true
constructable: true
magic:
type: bidx
id: bi_uri_error_prototype
bidx: true
properties:
- key: "length"
value: 1
attributes: "c"
- key: "prototype"
value:
type: object
id: bi_uri_error_prototype
attributes: ""
- key: "name"
value: "URIError"
attributes: "c"
- id: bi_uri_error_prototype
class: Error
internal_prototype: bi_error_prototype
bidx: true
properties:
- key: "constructor"
value:
type: object
id: bi_uri_error_constructor
attributes: "wc"
- key: "name"
value: "URIError"
- key: "message"
value: ""
- id: bi_math
class: Math
internal_prototype: bi_object_prototype
bidx: false
present_if: DUK_USE_MATH_BUILTIN
# apparently no external "prototype" property
# apparently no external "constructor" property
properties:
- key: "E"
value:
type: double
bytes: "4005bf0a8b145769" # DBL_E
attributes: ""
- key: "LN10"
value:
type: double
bytes: "40026bb1bbb55516" # DBL_LN10
attributes: ""
- key: "LN2"
value:
type: double
bytes: "3fe62e42fefa39ef" # DBL_LN2
attributes: ""
- key: "LOG2E"
value:
type: double
bytes: "3ff71547652b82fe" # DBL_LOG2E
attributes: ""
- key: "LOG10E"
value:
type: double
bytes: "3fdbcb7b1526e50e" # DBL_LOG10E
attributes: ""
- key: "PI"
value:
type: double
bytes: "400921fb54442d18" # DBL_PI
attributes: ""
- key: "SQRT1_2"
value:
type: double
bytes: "3fe6a09e667f3bcd" # DBL_SQRT1_2
attributes: ""
- key: "SQRT2"
value:
type: double
bytes: "3ff6a09e667f3bcd" # DBL_SQRT2
attributes: ""
- key: "abs"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "fabs"
- key: "acos"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "acos"
- key: "asin"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "asin"
- key: "atan"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "atan"
- key: "atan2"
value:
type: function
native: duk_bi_math_object_twoarg_shared
length: 2
magic:
type: math_twoarg
funcname: "atan2"
- key: "cbrt"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "cbrt"
es6: true
present_if: DUK_USE_ES6
- key: "ceil"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "ceil"
- key: "clz32"
value:
type: function
native: duk_bi_math_object_clz32
length: 1
es6: true
present_if: DUK_USE_ES6
- key: "cos"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "cos"
- key: "exp"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "exp"
- key: "floor"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "floor"
- key: "hypot"
value:
type: function
native: duk_bi_math_object_hypot
length: 2
varargs: true
es6: true
present_if: DUK_USE_ES6
- key: "imul"
value:
type: function
native: duk_bi_math_object_imul
length: 2
es6: true
present_if: DUK_USE_ES6
- key: "log"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "log"
- key: "log2"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "log2"
es6: true
present_if: DUK_USE_ES6
- key: "log10"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "log10"
es6: true
present_if: DUK_USE_ES6
- key: "max"
value:
type: function
native: duk_bi_math_object_max
length: 2
varargs: true
- key: "min"
value:
type: function
native: duk_bi_math_object_min
length: 2
varargs: true
- key: "pow"
value:
type: function
native: duk_bi_math_object_twoarg_shared
length: 2
magic:
type: math_twoarg
funcname: "pow"
- key: "random"
value:
type: function
native: duk_bi_math_object_random
length: 0
- key: "round"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "round"
- key: "sign"
value:
type: function
native: duk_bi_math_object_sign
length: 1
es6: true
present_if: DUK_USE_ES6
- key: "sin"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "sin"
- key: "sqrt"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "sqrt"
- key: "tan"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "tan"
- key: "trunc"
value:
type: function
native: duk_bi_math_object_onearg_shared
length: 1
magic:
type: math_onearg
funcname: "trunc"
es6: true
present_if: DUK_USE_ES6
- key:
type: symbol
variant: wellknown
string: "Symbol.toStringTag"
value: "Math"
attributes: "c"
es6: true
present_if: DUK_USE_SYMBOL_BUILTIN
- id: bi_json
class: JSON
internal_prototype: bi_object_prototype
bidx: false
present_if:
- DUK_USE_JSON_BUILTIN
- DUK_USE_JSON_SUPPORT
# apparently no external "prototype" property
# apparently no external "constructor" property
properties:
- key: "parse"
value:
type: function
native: duk_bi_json_object_parse
length: 2
- key: "stringify"
value:
type: function
native: duk_bi_json_object_stringify
length: 3
#- key: # @@toStringTag
# type: symbol
# variant: wellknown
# string: "Symbol.toStringTag"
# value: XXX
# es6: true
# present_if: DUK_USE_SYMBOL_BUILTIN
# E5 Section 13.2.3
- id: bi_type_error_thrower
class: Function
internal_prototype: bi_function_prototype
native: duk_bi_type_error_thrower
callable: true
constructable: false # This is not clearly specified, but [[Construct]] is not set in E5 Section 13.2.3.
bidx: true
properties:
- key: "length"
value: 0
attributes: "c"
# Custom name, matches V8; ES2016 describes %ThrowTypeError% as being
# anonymous.
- key: "name"
value: "ThrowTypeError"
attributes: "c"
duktape: true
#
# Duktape-specific built-ins
#
- id: bi_duktape
class: Object
internal_prototype: bi_object_prototype
duktape: true
bidx: true
#present_if: DUK_USE_DUKTAPE_BUILTIN # Present even when properties disabled, error augmentation relies on it
# There are a few properties not listed here:
# - "version" is added from parameter file automatically.
# - "env" is added dynamically at runtime.
properties:
- key: "Pointer"
value:
type: object
id: bi_pointer_constructor
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
- key: "Thread"
value:
type: object
id: bi_thread_constructor
duktape: true
present_if:
- DUK_USE_COROUTINE_SUPPORT
- DUK_USE_DUKTAPE_BUILTIN
- key: "info"
value:
type: function
native: duk_bi_duktape_object_info
length: 1
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
- key: "act"
value:
type: function
native: duk_bi_duktape_object_act
length: 1
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
- key: "gc"
value:
type: function
native: duk_bi_duktape_object_gc
length: 1
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
- key: "fin"
value:
type: function
native: duk_bi_duktape_object_fin
length: 0
varargs: true
duktape: true
present_if:
- DUK_USE_FINALIZER_SUPPORT
- DUK_USE_DUKTAPE_BUILTIN
- key: "enc"
value:
type: function
native: duk_bi_duktape_object_enc
length: 0
varargs: true
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
- key: "dec"
value:
type: function
native: duk_bi_duktape_object_dec
length: 0
varargs: true
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
- key: "compact"
value:
type: function
native: duk_bi_duktape_object_compact
length: 1
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
- id: bi_thread_constructor
class: Function
internal_prototype: bi_function_prototype
varargs: true
native: duk_bi_thread_constructor
callable: true
constructable: true
duktape: true
bidx: false
present_if: DUK_USE_COROUTINE_SUPPORT
properties:
- key: "length"
value: 1
attributes: "c"
duktape: true
- key: "prototype"
value:
type: object
id: bi_thread_prototype
attributes: ""
duktape: true
- key: "name"
value: "Thread"
attributes: "c"
duktape: true
# "yield" is a reserved word but does not prevent its use as a property name
- key: "yield"
value:
type: function
native: duk_bi_thread_yield
length: 2
duktape: true
auto_lightfunc: false # automatic lightfunc conversion clashes with internal implementation
present_if: DUK_USE_COROUTINE_SUPPORT
- key: "resume"
value:
type: function
native: duk_bi_thread_resume
length: 3
duktape: true
auto_lightfunc: false # automatic lightfunc conversion clashes with internal implementation
present_if: DUK_USE_COROUTINE_SUPPORT
- key: "current"
value:
type: function
native: duk_bi_thread_current
length: 0
duktape: true
present_if: DUK_USE_COROUTINE_SUPPORT
- id: bi_thread_prototype
class: Object
internal_prototype: bi_object_prototype
duktape: true
bidx: true
# Present even when DUK_USE_DUKTAPE_BUILTIN disabled.
# Must be present even if coroutines are disabled for inheritance.
# Because Duktape.Thread.prototype is missing, the only way to access
# the prototype to e.g. add methods is to look it up from a thread
# instance.
# Note: we don't keep up with the E5 convention that prototype objects
# are some faux instances of their type (e.g. Date.prototype is a Date
# instance).
#
# Also, we don't currently have a "constructor" property because there is
# no explicit constructor object.
properties:
- key: "constructor"
value:
type: object
id: bi_thread_constructor
attributes: "wc"
duktape: true
present_if:
- DUK_USE_COROUTINE_SUPPORT
- DUK_USE_DUKTAPE_BUILTIN
# toString() and valueOf() are inherited from Object.prototype
- id: bi_pointer_constructor
class: Function
internal_prototype: bi_function_prototype
varargs: true
native: duk_bi_pointer_constructor
callable: true
constructable: true
duktape: true
bidx: false
properties:
- key: "length"
value: 1
attributes: "c"
duktape: true
- key: "prototype"
value:
type: object
id: bi_pointer_prototype
attributes: ""
duktape: true
- key: "name"
value: "Pointer"
attributes: "c"
duktape: true
- id: bi_pointer_prototype
class: Pointer
internal_prototype: bi_object_prototype
duktape: true
bidx: true
# Present even when DUK_USE_DUKTAPE_BUILTIN disabled.
properties:
- key: "constructor"
value:
type: object
id: bi_pointer_constructor
attributes: "wc"
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
- key: "toString"
value:
type: function
native: duk_bi_pointer_prototype_tostring_shared
length: 0
magic: 1 # magic = to_string
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
- key: "valueOf"
value:
type: function
native: duk_bi_pointer_prototype_tostring_shared
length: 0
magic: 0 # magic = to_string
duktape: true
present_if: DUK_USE_DUKTAPE_BUILTIN
# This is an Error *instance* used to avoid allocation when a "double error" occurs.
# The object is "frozen and sealed" to avoid code accidentally modifying the instance.
# This is important because the error is rethrown as is.
- id: bi_double_error
class: Error
internal_prototype: bi_error_prototype
extensible: false
duktape: true
bidx: true
# Note: this is the only non-extensible built-in, so there is special
# post-tweak in duk_hthread_builtins.c to handle this.
properties:
- key: "name"
value: "DoubleError"
attributes: ""
duktape: true
- key: "message"
value: "error in error handling"
attributes: ""
duktape: true
#
# ES2015
#
- id: bi_proxy_constructor
class: Function
internal_prototype: bi_function_prototype
# no external prototype
native: duk_bi_proxy_constructor
callable: true
constructable: true
es6: true
bidx: false
present_if: DUK_USE_ES6_PROXY
properties:
- key: "length"
value: 2
attributes: "c"
es6: true
- key: "name"
value: "Proxy"
attributes: "c"
es6: true
#- key: "revocable"
# value:
# type: function
# native: duk_bi_proxy_constructor_revocable
# length: 2
# es6: true
- id: bi_reflect
class: Object
internal_prototype: bi_object_prototype
bidx: false
present_if: DUK_USE_REFLECT_BUILTIN
properties:
- key: "apply"
value:
type: function
native: duk_bi_reflect_apply
length: 3
magic: 2 # see duk_js_call.c
special_call: true
auto_lightfunc: false # automatic lightfunc conversion clashes with internal implementation
es6: true
- key: "construct"
value:
type: function
native: duk_bi_reflect_construct
length: 2
magic: 3 # see duk_js_call.c
special_call: true
auto_lightfunc: false # automatic lightfunc conversion clashes with internal implementation
es6: true
- key: "defineProperty"
value:
type: function
native: duk_bi_object_constructor_define_property
length: 3
magic: 1
es6: true
- key: "deleteProperty"
value:
type: function
native: duk_bi_reflect_object_delete_property
length: 2
es6: true
- key: "get"
value:
type: function
native: duk_bi_reflect_object_get
length: 2
varargs: true
es6: true
- key: "getOwnPropertyDescriptor"
value:
type: function
native: duk_bi_object_constructor_get_own_property_descriptor
length: 2
magic: 1
es6: true
- key: "getPrototypeOf"
value:
type: function
native: duk_bi_object_getprototype_shared
length: 1
magic: 2
es6: true
- key: "has"
value:
type: function
native: duk_bi_reflect_object_has
length: 2
es6: true
- key: "isExtensible"
value:
type: function
native: duk_bi_object_constructor_is_extensible
length: 1
magic: 1
es6: true
- key: "ownKeys"
value:
type: function
native: duk_bi_object_constructor_keys_shared
length: 1
magic: 3
es6: true
- key: "preventExtensions"
value:
type: function
native: duk_bi_object_constructor_prevent_extensions
length: 1
magic: 1
es6: true
- key: "set"
value:
type: function
native: duk_bi_reflect_object_set
length: 3
varargs: true
es6: true
- key: "setPrototypeOf"
value:
type: function
native: duk_bi_object_setprototype_shared
length: 2
magic: 2
es6: true
- id: bi_symbol_constructor
class: Function
internal_prototype: bi_function_prototype
native: duk_bi_symbol_constructor_shared
callable: true
constructable: false # new Symbol() not allowed
es6: true
nargs: 1
magic: 0
bidx: false
present_if: DUK_USE_SYMBOL_BUILTIN
properties:
- key: "length"
value: 0
attributes: "c"
es6: true
- key: "name"
value: "Symbol"
attributes: "c"
es6: true
- key: "prototype"
value:
type: object
id: bi_symbol_prototype
attributes: ""
es6: true
- key: "for"
value:
type: function
native: duk_bi_symbol_constructor_shared
magic: 1
length: 1
nargs: 1
attributes: "wc"
es6: true
- key: "keyFor"
value:
type: function
native: duk_bi_symbol_key_for
length: 1
nargs: 1
attributes: "wc"
es6: true
- key: "hasInstance"
value:
type: symbol
variant: wellknown
string: "Symbol.hasInstance"
attributes: ""
es6: true
present_if: DUK_USE_SYMBOL_BUILTIN
- key: "isConcatSpreadable"
value:
type: symbol
variant: wellknown
string: "Symbol.isConcatSpreadable"
attributes: ""
es6: true
- key: "iterator"
value:
type: symbol
variant: wellknown
string: "Symbol.iterator"
attributes: ""
es6: true
present_if: DUK_USE_SYMBOL_BUILTIN
#- key: "match"
# value:
# type: symbol
# variant: wellknown
# string: "Symbol.match"
# attributes: ""
# es6: true
#- key: "replace"
# value:
# type: symbol
# variant: wellknown
# string: "Symbol.replace"
# attributes: ""
# es6: true
#- key: "search"
# value:
# type: symbol
# variant: wellknown
# string: "Symbol.search"
# attributes: ""
# es6: true
#- key: "species"
# value:
# type: symbol
# variant: wellknown
# string: "Symbol.species"
# attributes: ""
# es6: true
#- key: "split"
# value:
# type: symbol
# variant: wellknown
# string: "Symbol.split"
# attributes: ""
# es6: true
- key: "toPrimitive"
value:
type: symbol
variant: wellknown
string: "Symbol.toPrimitive"
attributes: ""
es6: true
- key: "toStringTag"
value:
type: symbol
variant: wellknown
string: "Symbol.toStringTag"
attributes: ""
es6: true
#- key: "unscopables"
# value:
# type: symbol
# variant: wellknown
# string: "Symbol.unscopables"
# attributes: ""
# es6: true
- id: bi_symbol_prototype
class: Object
internal_prototype: bi_object_prototype
es6: true
bidx: true
# Present even when DUK_USE_SYMBOL_BUILTIN disabled so that symbol values
# created from C code can inherit through the Symbol prototype.
properties:
- key: "constructor"
value:
type: object
id: bi_symbol_constructor
attributes: "wc"
es6: true
present_if: DUK_USE_SYMBOL_BUILTIN
- key: "toString"
value:
type: function
native: duk_bi_symbol_tostring_shared
nargs: 0
magic: 0
attributes: "wc"
es6: true
present_if: DUK_USE_SYMBOL_BUILTIN
- key: "valueOf"
value:
type: function
native: duk_bi_symbol_tostring_shared
nargs: 0
magic: 1
attributes: "wc"
es6: true
present_if: DUK_USE_SYMBOL_BUILTIN
- key: # @@toPrimitive