Skip to content

SetFunctionName should require internal consistency #3851

@gibson042

Description

@gibson042

Built-in Function Objects specifies that each built-in function has an [[InitialName]] internal slot, which Function.prototype.toString is required to include in its output (absent overriding content in [[SourceText]]). The value of that slot is set when CreateBuiltinFunction calls SetFunctionName, which applies further special treatment when prefix is present (i.e., when the function is a get or set accessor—cf. ECMAScript Standard Built-in Objects) that is allowed but not required to prepend that "get" or "set" prefix to the value of [[InitialName]]—and is free to vary that choice across functions.

This strikes me as an unhelpful degree of freedom, and in fact every engine but one is already internally consistent. engine262 and SpiderMonkey uniformly omit a {get,set} prefix, and the others uniformly include it—with the exception of JavaScriptCore, which is all over the place. I would like to tighten the spec here, still permitting implementations the choice of whether or not to prepend but requiring that they make that choice once and apply it consistently.

Observations

eshost -si accessor-names.js
accessor-names.js
const getMetaEntries = obj =>
  Reflect.ownKeys(obj).map(key => [
    key,
    Object.getOwnPropertyDescriptor(obj, key),
  ]);
const extendPath = (prefix, segment) =>
  prefix +
  (segment.match?.(/^[a-z_$]+$/i)
    ? `.${segment}`
    : `[${typeof segment === "symbol" ? `%${segment.description}%` : segment}]`);

const accessorFunctionNames = [];
const collectAccessorFunctionNames = (obj, objPath) => {
  if (!obj || (typeof obj !== "object" && typeof obj !== "function")) return;
  for (const [key, { get, set }] of getMetaEntries(obj)) {
    for (const [kind, maybeFn] of Object.entries({ get, set })) {
      if (!maybeFn) continue;
      const asString = Function.prototype.toString.call(maybeFn);
      const initialName =
        // Note that Moddable XS emits text like
        // `function ["get size"] (){[native code]}`.
        asString.match(/function\s*(?:\[")?([^(]*?)(?:"\])?\s*[(]/)?.[1] ??
        asString;
      const path = extendPath(objPath, key);
      accessorFunctionNames.push({ path, kind, initialName });
    }
  }
};

const arrayIterator = [][Symbol.iterator]();
const ArrayIteratorPrototype = Object.getPrototypeOf(arrayIterator);
const IteratorPrototype = Object.getPrototypeOf(ArrayIteratorPrototype);
collectAccessorFunctionNames(IteratorPrototype, "Iterator.prototype");

for (const key of Reflect.ownKeys(globalThis)) {
  if (key === "globalThis") continue;
  const value = globalThis[key];
  const path = extendPath("globalThis", key);
  collectAccessorFunctionNames(value, path);
  const proto = value?.prototype;
  if (proto) collectAccessorFunctionNames(proto, extendPath(path, "prototype"));
}

const cmpByName = ({ path: a }, { path: b }) => (a < b ? -1 : a > b ? 1 : 0);
accessorFunctionNames.sort(cmpByName);
for (const { path, kind, initialName } of accessorFunctionNames) {
  const indicator = initialName.match(/^[gs]et /) ? "P" : ".";
  print(`${indicator} ${path} ${kind} ${JSON.stringify(initialName)}`);
}

engine262

uniformly omits a {get,set} prefix
. Iterator.prototype.constructor get "constructor"
. Iterator.prototype.constructor set "constructor"
. Iterator.prototype[%Symbol.toStringTag%] get "[Symbol.toStringTag]"
. Iterator.prototype[%Symbol.toStringTag%] set "[Symbol.toStringTag]"
. globalThis.ArrayBuffer.prototype.byteLength get "byteLength"
. globalThis.ArrayBuffer.prototype.detached get "detached"
. globalThis.ArrayBuffer.prototype.maxByteLength get "maxByteLength"
. globalThis.ArrayBuffer.prototype.resizable get "resizable"
. globalThis.ArrayBuffer[%Symbol.species%] get "[Symbol.species]"
. globalThis.Array[%Symbol.species%] get "[Symbol.species]"
. globalThis.DataView.prototype.buffer get "buffer"
. globalThis.DataView.prototype.byteLength get "byteLength"
. globalThis.DataView.prototype.byteOffset get "byteOffset"
. globalThis.Error.prototype.stack get "stack"
. globalThis.Error.prototype.stack set "stack"
. globalThis.Function.prototype.arguments get ""
. globalThis.Function.prototype.arguments set ""
. globalThis.Function.prototype.caller get ""
. globalThis.Function.prototype.caller set ""
. globalThis.Iterator.prototype.constructor get "constructor"
. globalThis.Iterator.prototype.constructor set "constructor"
. globalThis.Iterator.prototype[%Symbol.toStringTag%] get "[Symbol.toStringTag]"
. globalThis.Iterator.prototype[%Symbol.toStringTag%] set "[Symbol.toStringTag]"
. globalThis.Map.prototype.size get "size"
. globalThis.Map[%Symbol.species%] get "[Symbol.species]"
. globalThis.Object.prototype.__proto__ get "__proto__"
. globalThis.Object.prototype.__proto__ set "__proto__"
. globalThis.Promise[%Symbol.species%] get "[Symbol.species]"
. globalThis.RegExp.prototype.dotAll get "dotAll"
. globalThis.RegExp.prototype.flags get "flags"
. globalThis.RegExp.prototype.global get "global"
. globalThis.RegExp.prototype.hasIndices get "hasIndices"
. globalThis.RegExp.prototype.ignoreCase get "ignoreCase"
. globalThis.RegExp.prototype.multiline get "multiline"
. globalThis.RegExp.prototype.source get "source"
. globalThis.RegExp.prototype.sticky get "sticky"
. globalThis.RegExp.prototype.unicode get "unicode"
. globalThis.RegExp.prototype.unicodeSets get "unicodeSets"
. globalThis.RegExp[%Symbol.species%] get "[Symbol.species]"
. globalThis.Set.prototype.size get "size"
. globalThis.Set[%Symbol.species%] get "[Symbol.species]"
. globalThis.Symbol.prototype.description get "description"

GraalJS

uniformly includes a {get,set} prefix (except on Function.prototype.{arguments,caller} accessor functions, because those are all the same unique-per-realm %ThrowTypeError%)
P globalThis.ArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.ArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Array[%Symbol.species%] get "get [Symbol.species]"
P globalThis.DataView.prototype.buffer get "get buffer"
P globalThis.DataView.prototype.byteLength get "get byteLength"
P globalThis.DataView.prototype.byteOffset get "get byteOffset"
. globalThis.Function.prototype.arguments get ""
. globalThis.Function.prototype.arguments set ""
. globalThis.Function.prototype.caller get ""
. globalThis.Function.prototype.caller set ""
P globalThis.Map.prototype.size get "get size"
P globalThis.Map[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Object.prototype.__proto__ get "get __proto__"
P globalThis.Object.prototype.__proto__ set "set __proto__"
P globalThis.Promise[%Symbol.species%] get "get [Symbol.species]"
P globalThis.RegExp.$_ get "get input"
P globalThis.RegExp.$_ set "set input"
P globalThis.RegExp.input get "get input"
P globalThis.RegExp.input set "set input"
P globalThis.RegExp.lastMatch get "get lastMatch"
P globalThis.RegExp.lastParen get "get lastParen"
P globalThis.RegExp.leftContext get "get leftContext"
P globalThis.RegExp.prototype.dotAll get "get dotAll"
P globalThis.RegExp.prototype.flags get "get flags"
P globalThis.RegExp.prototype.global get "get global"
P globalThis.RegExp.prototype.hasIndices get "get hasIndices"
P globalThis.RegExp.prototype.ignoreCase get "get ignoreCase"
P globalThis.RegExp.prototype.multiline get "get multiline"
P globalThis.RegExp.prototype.source get "get source"
P globalThis.RegExp.prototype.sticky get "get sticky"
P globalThis.RegExp.prototype.unicode get "get unicode"
P globalThis.RegExp.rightContext get "get rightContext"
P globalThis.RegExp[$&] get "get lastMatch"
P globalThis.RegExp[$'] get "get rightContext"
P globalThis.RegExp[$+] get "get lastParen"
P globalThis.RegExp[$1] get "get $1"
P globalThis.RegExp[$2] get "get $2"
P globalThis.RegExp[$3] get "get $3"
P globalThis.RegExp[$4] get "get $4"
P globalThis.RegExp[$5] get "get $5"
P globalThis.RegExp[$6] get "get $6"
P globalThis.RegExp[$7] get "get $7"
P globalThis.RegExp[$8] get "get $8"
P globalThis.RegExp[$9] get "get $9"
P globalThis.RegExp[$`] get "get leftContext"
P globalThis.RegExp[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Set.prototype.size get "get size"
P globalThis.Set[%Symbol.species%] get "get [Symbol.species]"
P globalThis.SharedArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.SharedArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Symbol.prototype.description get "get description"

Hermes

uniformly includes a {get,set} prefix (except on Function.prototype.{arguments,caller} accessor functions, because those are all the same unique-per-realm %ThrowTypeError%)
P globalThis.ArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.DataView.prototype.buffer get "get buffer"
P globalThis.DataView.prototype.byteLength get "get byteLength"
P globalThis.DataView.prototype.byteOffset get "get byteOffset"
P globalThis.DebuggerInternal.isDebuggerAttached get "get isDebuggerAttached"
P globalThis.DebuggerInternal.shouldPauseOnThrow get "get shouldPauseOnThrow"
P globalThis.Map.prototype.size get "get size"
P globalThis.Object.prototype.__proto__ get "get __proto__"
P globalThis.Object.prototype.__proto__ set "set __proto__"
. globalThis.Promise.arguments get ""
. globalThis.Promise.arguments set ""
. globalThis.Promise.caller get ""
. globalThis.Promise.caller set ""
P globalThis.RegExp.$_ get "get $_"
P globalThis.RegExp.input get "get input"
P globalThis.RegExp.lastMatch get "get lastMatch"
P globalThis.RegExp.lastParen get "get lastParen"
P globalThis.RegExp.leftContext get "get leftContext"
P globalThis.RegExp.prototype.dotAll get "get dotAll"
P globalThis.RegExp.prototype.flags get "get flags"
P globalThis.RegExp.prototype.global get "get global"
P globalThis.RegExp.prototype.ignoreCase get "get ignoreCase"
P globalThis.RegExp.prototype.multiline get "get multiline"
P globalThis.RegExp.prototype.source get "get source"
P globalThis.RegExp.prototype.sticky get "get sticky"
P globalThis.RegExp.prototype.unicode get "get unicode"
P globalThis.RegExp.rightContext get "get rightContext"
P globalThis.RegExp[$&] get "get $&"
P globalThis.RegExp[$'] get "get $'"
P globalThis.RegExp[$+] get "get $+"
P globalThis.RegExp[$1] get "get $1"
P globalThis.RegExp[$2] get "get $2"
P globalThis.RegExp[$3] get "get $3"
P globalThis.RegExp[$4] get "get $4"
P globalThis.RegExp[$5] get "get $5"
P globalThis.RegExp[$6] get "get $6"
P globalThis.RegExp[$7] get "get $7"
P globalThis.RegExp[$8] get "get $8"
P globalThis.RegExp[$9] get "get $9"
P globalThis.RegExp[$`] get "get $`"
P globalThis.Set.prototype.size get "get size"
P globalThis.Symbol.prototype.description get "get description"
P globalThis[$262].agent get "get agent"

JavaScriptCore

completely inconsistent (e.g., the getter for DataView.prototype.byteLength has a "get" prefix but the getter for DataView.prototype.byteOffset does not)
. Iterator.prototype.constructor get "constructor"
. Iterator.prototype.constructor set "constructor"
. Iterator.prototype[%Symbol.toStringTag%] get ""
. Iterator.prototype[%Symbol.toStringTag%] set ""
P globalThis.ArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.ArrayBuffer.prototype.detached get "get detached"
P globalThis.ArrayBuffer.prototype.maxByteLength get "get maxByteLength"
P globalThis.ArrayBuffer.prototype.resizable get "get resizable"
P globalThis.ArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Array[%Symbol.species%] get "get [Symbol.species]"
. globalThis.DataView.prototype.buffer get "buffer"
P globalThis.DataView.prototype.byteLength get "get byteLength"
. globalThis.DataView.prototype.byteOffset get "byteOffset"
. globalThis.Function.prototype.arguments get "arguments"
. globalThis.Function.prototype.arguments set "arguments"
. globalThis.Function.prototype.caller get "caller"
. globalThis.Function.prototype.caller set "caller"
. globalThis.Iterator.prototype.constructor get "constructor"
. globalThis.Iterator.prototype.constructor set "constructor"
. globalThis.Iterator.prototype[%Symbol.toStringTag%] get ""
. globalThis.Iterator.prototype[%Symbol.toStringTag%] set ""
P globalThis.Map.prototype.size get "get size"
P globalThis.Map[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Object.prototype.__proto__ get "get __proto__"
P globalThis.Object.prototype.__proto__ set "set __proto__"
P globalThis.Promise[%Symbol.species%] get "get [Symbol.species]"
. globalThis.RegExp.$_ get "$_"
. globalThis.RegExp.$_ set "$_"
. globalThis.RegExp.input get "input"
. globalThis.RegExp.input set "input"
. globalThis.RegExp.lastMatch get "lastMatch"
. globalThis.RegExp.lastParen get "lastParen"
. globalThis.RegExp.leftContext get "leftContext"
. globalThis.RegExp.multiline get "multiline"
. globalThis.RegExp.multiline set "multiline"
P globalThis.RegExp.prototype.dotAll get "get dotAll"
P globalThis.RegExp.prototype.flags get "get flags"
P globalThis.RegExp.prototype.global get "get global"
P globalThis.RegExp.prototype.hasIndices get "get hasIndices"
P globalThis.RegExp.prototype.ignoreCase get "get ignoreCase"
P globalThis.RegExp.prototype.multiline get "get multiline"
P globalThis.RegExp.prototype.source get "get source"
P globalThis.RegExp.prototype.sticky get "get sticky"
P globalThis.RegExp.prototype.unicode get "get unicode"
P globalThis.RegExp.prototype.unicodeSets get "get unicodeSets"
. globalThis.RegExp.rightContext get "rightContext"
. globalThis.RegExp[$&] get "$&"
. globalThis.RegExp[$'] get "$'"
. globalThis.RegExp[$*] get "$*"
. globalThis.RegExp[$*] set "$*"
. globalThis.RegExp[$+] get "$+"
. globalThis.RegExp[$1] get "$1"
. globalThis.RegExp[$2] get "$2"
. globalThis.RegExp[$3] get "$3"
. globalThis.RegExp[$4] get "$4"
. globalThis.RegExp[$5] get "$5"
. globalThis.RegExp[$6] get "$6"
. globalThis.RegExp[$7] get "$7"
. globalThis.RegExp[$8] get "$8"
. globalThis.RegExp[$9] get "$9"
. globalThis.RegExp[$`] get "$`"
P globalThis.RegExp[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Set.prototype.size get "get size"
P globalThis.Set[%Symbol.species%] get "get [Symbol.species]"
P globalThis.SharedArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.SharedArrayBuffer.prototype.growable get "get growable"
P globalThis.SharedArrayBuffer.prototype.maxByteLength get "get maxByteLength"
P globalThis.SharedArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
. globalThis.Symbol.prototype.description get "description"
P globalThis.WebAssembly.JSTag get "get JSTag"

LibJS

uniformly includes a {get,set} prefix (except on Function.prototype.{arguments,caller} accessor functions, because those are all the same unique-per-realm %ThrowTypeError%)
P globalThis.ArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.ArrayBuffer.prototype.detached get "get detached"
P globalThis.ArrayBuffer.prototype.maxByteLength get "get maxByteLength"
P globalThis.ArrayBuffer.prototype.resizable get "get resizable"
P globalThis.ArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Array[%Symbol.species%] get "get [Symbol.species]"
P globalThis.DataView.prototype.buffer get "get buffer"
P globalThis.DataView.prototype.byteLength get "get byteLength"
P globalThis.DataView.prototype.byteOffset get "get byteOffset"
P globalThis.DisposableStack.prototype.disposed get "get disposed"
P globalThis.Error.prototype.stack get "get stack"
P globalThis.Error.prototype.stack set "set stack"
. globalThis.Function.prototype.arguments get ""
. globalThis.Function.prototype.arguments set ""
. globalThis.Function.prototype.caller get ""
. globalThis.Function.prototype.caller set ""
P globalThis.Map.prototype.size get "get size"
P globalThis.Map[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Object.prototype.__proto__ get "get __proto__"
P globalThis.Object.prototype.__proto__ set "set __proto__"
P globalThis.Promise[%Symbol.species%] get "get [Symbol.species]"
P globalThis.RegExp.$_ get "get $_"
P globalThis.RegExp.$_ set "set $_"
P globalThis.RegExp.input get "get input"
P globalThis.RegExp.input set "set input"
P globalThis.RegExp.lastMatch get "get lastMatch"
P globalThis.RegExp.lastParen get "get lastParen"
P globalThis.RegExp.leftContext get "get leftContext"
P globalThis.RegExp.prototype.dotAll get "get dotAll"
P globalThis.RegExp.prototype.flags get "get flags"
P globalThis.RegExp.prototype.global get "get global"
P globalThis.RegExp.prototype.hasIndices get "get hasIndices"
P globalThis.RegExp.prototype.ignoreCase get "get ignoreCase"
P globalThis.RegExp.prototype.multiline get "get multiline"
P globalThis.RegExp.prototype.source get "get source"
P globalThis.RegExp.prototype.sticky get "get sticky"
P globalThis.RegExp.prototype.unicode get "get unicode"
P globalThis.RegExp.prototype.unicodeSets get "get unicodeSets"
P globalThis.RegExp.rightContext get "get rightContext"
P globalThis.RegExp[$&] get "get $&"
P globalThis.RegExp[$'] get "get $'"
P globalThis.RegExp[$+] get "get $+"
P globalThis.RegExp[$1] get "get $1"
P globalThis.RegExp[$2] get "get $2"
P globalThis.RegExp[$3] get "get $3"
P globalThis.RegExp[$4] get "get $4"
P globalThis.RegExp[$5] get "get $5"
P globalThis.RegExp[$6] get "get $6"
P globalThis.RegExp[$7] get "get $7"
P globalThis.RegExp[$8] get "get $8"
P globalThis.RegExp[$9] get "get $9"
P globalThis.RegExp[$`] get "get $`"
P globalThis.RegExp[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Set.prototype.size get "get size"
P globalThis.Set[%Symbol.species%] get "get [Symbol.species]"
P globalThis.SharedArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.SharedArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Symbol.prototype.description get "get description"
P globalThis[$262].agent get "get agent() { throw new InternalError('agent.* not yet supported.'); }"

Moddable XS

uniformly includes a {get,set} prefix (except on Function.prototype.{arguments,caller} accessor functions, because those are all the same unique-per-realm %ThrowTypeError%, and on non-ECMA-262 TextDecoder.prototype properties)
P Iterator.prototype.constructor get "get constructor"
P Iterator.prototype.constructor set "set constructor"
P Iterator.prototype[%Symbol.toStringTag%] get "get [Symbol.toStringTag]"
P Iterator.prototype[%Symbol.toStringTag%] set "set [Symbol.toStringTag]"
P globalThis.ArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.ArrayBuffer.prototype.detached get "get detached"
P globalThis.ArrayBuffer.prototype.immutable get "get immutable"
P globalThis.ArrayBuffer.prototype.maxByteLength get "get maxByteLength"
P globalThis.ArrayBuffer.prototype.resizable get "get resizable"
P globalThis.ArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Array[%Symbol.species%] get "get [Symbol.species]"
P globalThis.AsyncDisposableStack.prototype.disposed get "get disposed"
P globalThis.Compartment.prototype.globalThis get "get globalThis"
P globalThis.DataView.prototype.buffer get "get buffer"
P globalThis.DataView.prototype.byteLength get "get byteLength"
P globalThis.DataView.prototype.byteOffset get "get byteOffset"
P globalThis.DisposableStack.prototype.disposed get "get disposed"
P globalThis.Error.prototype.stack get "get stack"
P globalThis.Error.prototype.stack set "set stack"
. globalThis.Function.prototype.arguments get ""
. globalThis.Function.prototype.arguments set ""
. globalThis.Function.prototype.caller get ""
. globalThis.Function.prototype.caller set ""
P globalThis.Iterator.prototype.constructor get "get constructor"
P globalThis.Iterator.prototype.constructor set "set constructor"
P globalThis.Iterator.prototype[%Symbol.toStringTag%] get "get [Symbol.toStringTag]"
P globalThis.Iterator.prototype[%Symbol.toStringTag%] set "set [Symbol.toStringTag]"
P globalThis.Map.prototype.size get "get size"
P globalThis.Map[%Symbol.species%] get "get [Symbol.species]"
P globalThis.ModuleSource.prototype.bindings get "get bindings"
P globalThis.ModuleSource.prototype.needsImport get "get needsImport"
P globalThis.ModuleSource.prototype.needsImportMeta get "get needsImportMeta"
P globalThis.ModuleSource.prototype.options get "get options"
P globalThis.Object.prototype.__proto__ get "get __proto__"
P globalThis.Object.prototype.__proto__ set "set __proto__"
P globalThis.Promise[%Symbol.species%] get "get [Symbol.species]"
P globalThis.RegExp.prototype.dotAll get "get dotAll"
P globalThis.RegExp.prototype.flags get "get flags"
P globalThis.RegExp.prototype.global get "get global"
P globalThis.RegExp.prototype.hasIndices get "get hasIndices"
P globalThis.RegExp.prototype.ignoreCase get "get ignoreCase"
P globalThis.RegExp.prototype.multiline get "get multiline"
P globalThis.RegExp.prototype.source get "get source"
P globalThis.RegExp.prototype.sticky get "get sticky"
P globalThis.RegExp.prototype.unicode get "get unicode"
P globalThis.RegExp.prototype.unicodeSets get "get unicodeSets"
P globalThis.RegExp[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Set.prototype.size get "get size"
P globalThis.Set[%Symbol.species%] get "get [Symbol.species]"
P globalThis.SharedArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.SharedArrayBuffer.prototype.growable get "get growable"
P globalThis.SharedArrayBuffer.prototype.maxByteLength get "get maxByteLength"
P globalThis.SharedArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Symbol.prototype.description get "get description"
. globalThis.TextDecoder.prototype.encoding get ""
. globalThis.TextDecoder.prototype.fatal get ""
. globalThis.TextDecoder.prototype.ignoreBOM get ""
P globalThis.TypedArray.prototype.buffer get "get buffer"
P globalThis.TypedArray.prototype.byteLength get "get byteLength"
P globalThis.TypedArray.prototype.byteOffset get "get byteOffset"
P globalThis.TypedArray.prototype.length get "get length"
P globalThis.TypedArray.prototype[%Symbol.toStringTag%] get "get [Symbol.toStringTag]"
P globalThis.TypedArray[%Symbol.species%] get "get [Symbol.species]"

QuickJS

uniformly includes a {get,set} prefix (except on Function.prototype.{arguments,caller} accessor functions, because those are all the same unique-per-realm %ThrowTypeError%)
P globalThis.ArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.ArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Array[%Symbol.species%] get "get [Symbol.species]"
P globalThis.DataView.prototype.buffer get "get buffer"
P globalThis.DataView.prototype.byteLength get "get byteLength"
P globalThis.DataView.prototype.byteOffset get "get byteOffset"
. globalThis.Function.prototype.arguments get ""
. globalThis.Function.prototype.arguments set ""
. globalThis.Function.prototype.caller get ""
. globalThis.Function.prototype.caller set ""
P globalThis.Function.prototype.columnNumber get "get columnNumber"
P globalThis.Function.prototype.fileName get "get fileName"
P globalThis.Function.prototype.lineNumber get "get lineNumber"
P globalThis.Map.prototype.size get "get size"
P globalThis.Map[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Object.prototype.__proto__ get "get __proto__"
P globalThis.Object.prototype.__proto__ set "set __proto__"
P globalThis.Promise[%Symbol.species%] get "get [Symbol.species]"
P globalThis.RegExp.prototype.dotAll get "get dotAll"
P globalThis.RegExp.prototype.flags get "get flags"
P globalThis.RegExp.prototype.global get "get global"
P globalThis.RegExp.prototype.hasIndices get "get hasIndices"
P globalThis.RegExp.prototype.ignoreCase get "get ignoreCase"
P globalThis.RegExp.prototype.multiline get "get multiline"
P globalThis.RegExp.prototype.source get "get source"
P globalThis.RegExp.prototype.sticky get "get sticky"
P globalThis.RegExp.prototype.unicode get "get unicode"
P globalThis.RegExp.prototype.unicodeSets get "get unicodeSets"
P globalThis.RegExp[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Set.prototype.size get "get size"
P globalThis.Set[%Symbol.species%] get "get [Symbol.species]"
P globalThis.SharedArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.SharedArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Symbol.prototype.description get "get description"

SpiderMonkey

uniformly omits a {get,set} prefix
. Iterator.prototype.constructor get "constructor"
. Iterator.prototype.constructor set "constructor"
. Iterator.prototype[%Symbol.toStringTag%] get "[Symbol.toStringTag]"
. Iterator.prototype[%Symbol.toStringTag%] set "[Symbol.toStringTag]"
. globalThis.ArrayBuffer.prototype.byteLength get "byteLength"
. globalThis.ArrayBuffer.prototype.detached get "detached"
. globalThis.ArrayBuffer.prototype.maxByteLength get "maxByteLength"
. globalThis.ArrayBuffer.prototype.resizable get "resizable"
. globalThis.ArrayBuffer[%Symbol.species%] get "[Symbol.species]"
. globalThis.Array[%Symbol.species%] get "[Symbol.species]"
. globalThis.AsyncDisposableStack.prototype.disposed get "disposed"
. globalThis.DataView.prototype.buffer get "buffer"
. globalThis.DataView.prototype.byteLength get "byteLength"
. globalThis.DataView.prototype.byteOffset get "byteOffset"
. globalThis.Debugger.prototype.allowUnobservedAsmJS get "allowUnobservedAsmJS"
. globalThis.Debugger.prototype.allowUnobservedAsmJS set "allowUnobservedAsmJS"
. globalThis.Debugger.prototype.allowUnobservedWasm get "allowUnobservedWasm"
. globalThis.Debugger.prototype.allowUnobservedWasm set "allowUnobservedWasm"
. globalThis.Debugger.prototype.collectCoverageInfo get "collectCoverageInfo"
. globalThis.Debugger.prototype.collectCoverageInfo set "collectCoverageInfo"
. globalThis.Debugger.prototype.exclusiveDebuggerOnEval get "exclusiveDebuggerOnEval"
. globalThis.Debugger.prototype.exclusiveDebuggerOnEval set "exclusiveDebuggerOnEval"
. globalThis.Debugger.prototype.inspectNativeCallArguments get "inspectNativeCallArguments"
. globalThis.Debugger.prototype.inspectNativeCallArguments set "inspectNativeCallArguments"
. globalThis.Debugger.prototype.memory get "memory"
. globalThis.Debugger.prototype.onDebuggerStatement get "onDebuggerStatement"
. globalThis.Debugger.prototype.onDebuggerStatement set "onDebuggerStatement"
. globalThis.Debugger.prototype.onEnterFrame get "onEnterFrame"
. globalThis.Debugger.prototype.onEnterFrame set "onEnterFrame"
. globalThis.Debugger.prototype.onExceptionUnwind get "onExceptionUnwind"
. globalThis.Debugger.prototype.onExceptionUnwind set "onExceptionUnwind"
. globalThis.Debugger.prototype.onNativeCall get "onNativeCall"
. globalThis.Debugger.prototype.onNativeCall set "onNativeCall"
. globalThis.Debugger.prototype.onNewGlobalObject get "onNewGlobalObject"
. globalThis.Debugger.prototype.onNewGlobalObject set "onNewGlobalObject"
. globalThis.Debugger.prototype.onNewPromise get "onNewPromise"
. globalThis.Debugger.prototype.onNewPromise set "onNewPromise"
. globalThis.Debugger.prototype.onNewScript get "onNewScript"
. globalThis.Debugger.prototype.onNewScript set "onNewScript"
. globalThis.Debugger.prototype.onPromiseSettled get "onPromiseSettled"
. globalThis.Debugger.prototype.onPromiseSettled set "onPromiseSettled"
. globalThis.Debugger.prototype.shouldAvoidSideEffects get "shouldAvoidSideEffects"
. globalThis.Debugger.prototype.shouldAvoidSideEffects set "shouldAvoidSideEffects"
. globalThis.Debugger.prototype.uncaughtExceptionHook get "uncaughtExceptionHook"
. globalThis.Debugger.prototype.uncaughtExceptionHook set "uncaughtExceptionHook"
. globalThis.DisposableStack.prototype.disposed get "disposed"
. globalThis.Error.prototype.stack get "stack"
. globalThis.Error.prototype.stack set "stack"
. globalThis.FakeDOMObject.prototype.global get "global"
. globalThis.FakeDOMObject.prototype.global set "global"
. globalThis.FakeDOMObject.prototype.slot get "slot"
. globalThis.FakeDOMObject.prototype.x get "x"
. globalThis.FakeDOMObject.prototype.x set "x"
. globalThis.Function.prototype.arguments get "arguments"
. globalThis.Function.prototype.arguments set "arguments"
. globalThis.Function.prototype.caller get "caller"
. globalThis.Function.prototype.caller set "caller"
. globalThis.Iterator.prototype.constructor get "constructor"
. globalThis.Iterator.prototype.constructor set "constructor"
. globalThis.Iterator.prototype[%Symbol.toStringTag%] get "[Symbol.toStringTag]"
. globalThis.Iterator.prototype[%Symbol.toStringTag%] set "[Symbol.toStringTag]"
. globalThis.Map.prototype.size get "size"
. globalThis.Map[%Symbol.species%] get "[Symbol.species]"
. globalThis.Object.prototype.__proto__ get "__proto__"
. globalThis.Object.prototype.__proto__ set "__proto__"
. globalThis.Promise[%Symbol.species%] get "[Symbol.species]"
. globalThis.RegExp.$_ get "$_"
. globalThis.RegExp.$_ set "$_"
. globalThis.RegExp.input get "input"
. globalThis.RegExp.input set "input"
. globalThis.RegExp.lastMatch get "lastMatch"
. globalThis.RegExp.lastParen get "lastParen"
. globalThis.RegExp.leftContext get "leftContext"
. globalThis.RegExp.prototype.dotAll get "dotAll"
. globalThis.RegExp.prototype.flags get "flags"
. globalThis.RegExp.prototype.global get "global"
. globalThis.RegExp.prototype.hasIndices get "hasIndices"
. globalThis.RegExp.prototype.ignoreCase get "ignoreCase"
. globalThis.RegExp.prototype.multiline get "multiline"
. globalThis.RegExp.prototype.source get "source"
. globalThis.RegExp.prototype.sticky get "sticky"
. globalThis.RegExp.prototype.unicode get "unicode"
. globalThis.RegExp.prototype.unicodeSets get "unicodeSets"
. globalThis.RegExp.rightContext get "rightContext"
. globalThis.RegExp[$&] get "$&"
. globalThis.RegExp[$'] get "$'"
. globalThis.RegExp[$+] get "$+"
. globalThis.RegExp[$1] get "$1"
. globalThis.RegExp[$2] get "$2"
. globalThis.RegExp[$3] get "$3"
. globalThis.RegExp[$4] get "$4"
. globalThis.RegExp[$5] get "$5"
. globalThis.RegExp[$6] get "$6"
. globalThis.RegExp[$7] get "$7"
. globalThis.RegExp[$8] get "$8"
. globalThis.RegExp[$9] get "$9"
. globalThis.RegExp[$`] get "$`"
. globalThis.RegExp[%Symbol.species%] get "[Symbol.species]"
. globalThis.Set.prototype.size get "size"
. globalThis.Set[%Symbol.species%] get "[Symbol.species]"
. globalThis.SharedArrayBuffer.prototype.byteLength get "byteLength"
. globalThis.SharedArrayBuffer.prototype.growable get "growable"
. globalThis.SharedArrayBuffer.prototype.maxByteLength get "maxByteLength"
. globalThis.SharedArrayBuffer[%Symbol.species%] get "[Symbol.species]"
. globalThis.Symbol.prototype.description get "description"
. globalThis.ctypes.errno get "errno"

V8

uniformly includes a {get,set} prefix (except on non-ECMA-262 Worker.prototype properties)
P Iterator.prototype.constructor get "get constructor"
P Iterator.prototype.constructor set "set constructor"
P Iterator.prototype[%Symbol.toStringTag%] get "get [Symbol.toStringTag]"
P Iterator.prototype[%Symbol.toStringTag%] set "set [Symbol.toStringTag]"
P globalThis.ArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.ArrayBuffer.prototype.detached get "get detached"
P globalThis.ArrayBuffer.prototype.maxByteLength get "get maxByteLength"
P globalThis.ArrayBuffer.prototype.resizable get "get resizable"
P globalThis.ArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Array[%Symbol.species%] get "get [Symbol.species]"
P globalThis.AsyncDisposableStack.prototype.disposed get "get disposed"
P globalThis.DataView.prototype.buffer get "get buffer"
P globalThis.DataView.prototype.byteLength get "get byteLength"
P globalThis.DataView.prototype.byteOffset get "get byteOffset"
P globalThis.DisposableStack.prototype.disposed get "get disposed"
P globalThis.Function.prototype.arguments get "get arguments"
P globalThis.Function.prototype.arguments set "set arguments"
P globalThis.Function.prototype.caller get "get caller"
P globalThis.Function.prototype.caller set "set caller"
P globalThis.Iterator.prototype.constructor get "get constructor"
P globalThis.Iterator.prototype.constructor set "set constructor"
P globalThis.Iterator.prototype[%Symbol.toStringTag%] get "get [Symbol.toStringTag]"
P globalThis.Iterator.prototype[%Symbol.toStringTag%] set "set [Symbol.toStringTag]"
P globalThis.Map.prototype.size get "get size"
P globalThis.Map[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Object.prototype.__proto__ get "get __proto__"
P globalThis.Object.prototype.__proto__ set "set __proto__"
P globalThis.Promise[%Symbol.species%] get "get [Symbol.species]"
P globalThis.RegExp.$_ get "get $_"
P globalThis.RegExp.$_ set "set $_"
P globalThis.RegExp.input get "get input"
P globalThis.RegExp.input set "set input"
P globalThis.RegExp.lastMatch get "get lastMatch"
P globalThis.RegExp.lastMatch set "set lastMatch"
P globalThis.RegExp.lastParen get "get lastParen"
P globalThis.RegExp.lastParen set "set lastParen"
P globalThis.RegExp.leftContext get "get leftContext"
P globalThis.RegExp.leftContext set "set leftContext"
P globalThis.RegExp.prototype.dotAll get "get dotAll"
P globalThis.RegExp.prototype.flags get "get flags"
P globalThis.RegExp.prototype.global get "get global"
P globalThis.RegExp.prototype.hasIndices get "get hasIndices"
P globalThis.RegExp.prototype.ignoreCase get "get ignoreCase"
P globalThis.RegExp.prototype.multiline get "get multiline"
P globalThis.RegExp.prototype.source get "get source"
P globalThis.RegExp.prototype.sticky get "get sticky"
P globalThis.RegExp.prototype.unicode get "get unicode"
P globalThis.RegExp.prototype.unicodeSets get "get unicodeSets"
P globalThis.RegExp.rightContext get "get rightContext"
P globalThis.RegExp.rightContext set "set rightContext"
P globalThis.RegExp[$&] get "get $&"
P globalThis.RegExp[$&] set "set $&"
P globalThis.RegExp[$'] get "get $'"
P globalThis.RegExp[$'] set "set $'"
P globalThis.RegExp[$+] get "get $+"
P globalThis.RegExp[$+] set "set $+"
P globalThis.RegExp[$1] get "get $1"
P globalThis.RegExp[$1] set "set $1"
P globalThis.RegExp[$2] get "get $2"
P globalThis.RegExp[$2] set "set $2"
P globalThis.RegExp[$3] get "get $3"
P globalThis.RegExp[$3] set "set $3"
P globalThis.RegExp[$4] get "get $4"
P globalThis.RegExp[$4] set "set $4"
P globalThis.RegExp[$5] get "get $5"
P globalThis.RegExp[$5] set "set $5"
P globalThis.RegExp[$6] get "get $6"
P globalThis.RegExp[$6] set "set $6"
P globalThis.RegExp[$7] get "get $7"
P globalThis.RegExp[$7] set "set $7"
P globalThis.RegExp[$8] get "get $8"
P globalThis.RegExp[$8] set "set $8"
P globalThis.RegExp[$9] get "get $9"
P globalThis.RegExp[$9] set "set $9"
P globalThis.RegExp[$`] get "get $`"
P globalThis.RegExp[$`] set "set $`"
P globalThis.RegExp[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Set.prototype.size get "get size"
P globalThis.Set[%Symbol.species%] get "get [Symbol.species]"
P globalThis.SharedArrayBuffer.prototype.byteLength get "get byteLength"
P globalThis.SharedArrayBuffer.prototype.growable get "get growable"
P globalThis.SharedArrayBuffer.prototype.maxByteLength get "get maxByteLength"
P globalThis.SharedArrayBuffer[%Symbol.species%] get "get [Symbol.species]"
P globalThis.Symbol.prototype.description get "get description"
. globalThis.Worker.prototype.onmessage get ""
. globalThis.Worker.prototype.onmessage set ""

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs consensusThis needs committee consensus before it can be eligible to be merged.normative changeAffects behavior required to correctly evaluate some ECMAScript source text

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions