diff --git a/spec.html b/spec.html index a0dba39a37a..1502f1fbd44 100644 --- a/spec.html +++ b/spec.html @@ -2951,7 +2951,7 @@

Property Attributes

- [[Get]] + [[Getter]] accessor property @@ -2968,7 +2968,7 @@

Property Attributes

- [[Set]] + [[Setter]] accessor property @@ -2980,7 +2980,7 @@

Property Attributes

*undefined* - If the value is an Object it must be a function object. The function's [[Call]] internal method () is called with an arguments list containing the assigned value as its sole argument each time a set access of the property is performed. The effect of a property's [[Set]] internal method may, but is not required to, have an effect on the value returned by subsequent calls to the property's [[Get]] internal method. + If the value is an Object it must be a function object. The function's [[Call]] internal method () is called with an arguments list containing the assigned value as its sole argument each time a set access of the property is performed. The effect of a property's [[Setter]] internal method may, but is not required to, have an effect on the value returned by subsequent calls to the property's [[Getter]] internal method. @@ -3357,7 +3357,7 @@

[[Get]] ( _propertyKey_, _receiver_ )

If _propertyKey_ was previously observed as a non-configurable, non-writable own data property of the target with value _value_, then [[Get]] must return the SameValue as _value_.
  • - If _propertyKey_ was previously observed as a non-configurable own accessor property of the target whose [[Get]] attribute is *undefined*, the [[Get]] operation must return *undefined*. + If _propertyKey_ was previously observed as a non-configurable own accessor property of the target whose [[Getter]] attribute is *undefined*, the [[Get]] operation must return *undefined*.
  • [[Set]] ( _propertyKey_, _value_, _receiver_ )

    @@ -3369,7 +3369,7 @@

    [[Set]] ( _propertyKey_, _value_, _receiver_ )

    If _propertyKey_ was previously observed as a non-configurable, non-writable own data property of the target, then [[Set]] must return *false* unless _value_ is the SameValue as _propertyKey_'s [[Value]] attribute.
  • - If _propertyKey_ was previously observed as a non-configurable own accessor property of the target whose [[Set]] attribute is *undefined*, the [[Set]] operation must return *false*. + If _propertyKey_ was previously observed as a non-configurable own accessor property of the target whose [[Setter]] attribute is *undefined*, the [[Set]] operation must return *false*.
  • [[Delete]] ( _propertyKey_ )

    @@ -4642,7 +4642,7 @@

    The Property Descriptor Specification Type

    The Property Descriptor type is used to explain the manipulation and reification of Object property attributes. A Property Descriptor is a Record with zero or more fields, where each field's name is an attribute name and its value is a corresponding attribute value as specified in . The schema name used within this specification to tag literal descriptions of Property Descriptor records is “PropertyDescriptor”.

    -

    Property Descriptor values may be further classified as data Property Descriptors and accessor Property Descriptors based upon the existence or use of certain fields. A data Property Descriptor is one that includes any fields named either [[Value]] or [[Writable]]. An accessor Property Descriptor is one that includes any fields named either [[Get]] or [[Set]]. Any Property Descriptor may have fields named [[Enumerable]] and [[Configurable]]. A Property Descriptor value may not be both a data Property Descriptor and an accessor Property Descriptor; however, it may be neither (in which case it is a generic Property Descriptor). A fully populated Property Descriptor is one that is either an accessor Property Descriptor or a data Property Descriptor and that has all of the corresponding fields defined in .

    +

    Property Descriptor values may be further classified as data Property Descriptors and accessor Property Descriptors based upon the existence or use of certain fields. A data Property Descriptor is one that includes any fields named either [[Value]] or [[Writable]]. An accessor Property Descriptor is one that includes any fields named either [[Getter]] or [[Setter]]. Any Property Descriptor may have fields named [[Enumerable]] and [[Configurable]]. A Property Descriptor value may not be both a data Property Descriptor and an accessor Property Descriptor; however, it may be neither (in which case it is a generic Property Descriptor). A fully populated Property Descriptor is one that is either an accessor Property Descriptor or a data Property Descriptor and that has all of the corresponding fields defined in .

    The following abstract operations are used in this specification to operate upon Property Descriptor values:

    @@ -4654,8 +4654,8 @@

    - 1. If _propertyDesc_ has a [[Get]] field, return *true*. - 1. If _propertyDesc_ has a [[Set]] field, return *true*. + 1. If _propertyDesc_ has a [[Getter]] field, return *true*. + 1. If _propertyDesc_ has a [[Setter]] field, return *true*. 1. Return *false*. @@ -4706,10 +4706,10 @@

    1. Perform ! CreateDataPropertyOrThrow(_obj_, *"value"*, _propertyDesc_.[[Value]]). 1. If _propertyDesc_ has a [[Writable]] field, then 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"writable"*, _propertyDesc_.[[Writable]]). - 1. If _propertyDesc_ has a [[Get]] field, then - 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"get"*, _propertyDesc_.[[Get]]). - 1. If _propertyDesc_ has a [[Set]] field, then - 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"set"*, _propertyDesc_.[[Set]]). + 1. If _propertyDesc_ has a [[Getter]] field, then + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"get"*, _propertyDesc_.[[Getter]]). + 1. If _propertyDesc_ has a [[Setter]] field, then + 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"set"*, _propertyDesc_.[[Setter]]). 1. If _propertyDesc_ has an [[Enumerable]] field, then 1. Perform ! CreateDataPropertyOrThrow(_obj_, *"enumerable"*, _propertyDesc_.[[Enumerable]]). 1. If _propertyDesc_ has a [[Configurable]] field, then @@ -4749,13 +4749,13 @@

    1. If _hasGet_ is *true*, then 1. Let _getter_ be ? Get(_obj_, *"get"*). 1. If IsCallable(_getter_) is *false* and _getter_ is not *undefined*, throw a *TypeError* exception. - 1. Set _propertyDesc_.[[Get]] to _getter_. + 1. Set _propertyDesc_.[[Getter]] to _getter_. 1. Let _hasSet_ be ? HasProperty(_obj_, *"set"*). 1. If _hasSet_ is *true*, then 1. Let _setter_ be ? Get(_obj_, *"set"*). 1. If IsCallable(_setter_) is *false* and _setter_ is not *undefined*, throw a *TypeError* exception. - 1. Set _propertyDesc_.[[Set]] to _setter_. - 1. If _propertyDesc_ has a [[Get]] field or _propertyDesc_ has a [[Set]] field, then + 1. Set _propertyDesc_.[[Setter]] to _setter_. + 1. If _propertyDesc_ has a [[Getter]] field or _propertyDesc_ has a [[Setter]] field, then 1. If _propertyDesc_ has a [[Value]] field or _propertyDesc_ has a [[Writable]] field, throw a *TypeError* exception. 1. Return _propertyDesc_. @@ -4770,13 +4770,13 @@

    - 1. Let _like_ be the Record { [[Value]]: *undefined*, [[Writable]]: *false*, [[Get]]: *undefined*, [[Set]]: *undefined*, [[Enumerable]]: *false*, [[Configurable]]: *false* }. + 1. Let _like_ be the Record { [[Value]]: *undefined*, [[Writable]]: *false*, [[Getter]]: *undefined*, [[Setter]]: *undefined*, [[Enumerable]]: *false*, [[Configurable]]: *false* }. 1. If IsGenericDescriptor(_propertyDesc_) is *true* or IsDataDescriptor(_propertyDesc_) is *true*, then 1. If _propertyDesc_ does not have a [[Value]] field, set _propertyDesc_.[[Value]] to _like_.[[Value]]. 1. If _propertyDesc_ does not have a [[Writable]] field, set _propertyDesc_.[[Writable]] to _like_.[[Writable]]. 1. Else, - 1. If _propertyDesc_ does not have a [[Get]] field, set _propertyDesc_.[[Get]] to _like_.[[Get]]. - 1. If _propertyDesc_ does not have a [[Set]] field, set _propertyDesc_.[[Set]] to _like_.[[Set]]. + 1. If _propertyDesc_ does not have a [[Getter]] field, set _propertyDesc_.[[Getter]] to _like_.[[Getter]]. + 1. If _propertyDesc_ does not have a [[Setter]] field, set _propertyDesc_.[[Setter]] to _like_.[[Setter]]. 1. If _propertyDesc_ does not have an [[Enumerable]] field, set _propertyDesc_.[[Enumerable]] to _like_.[[Enumerable]]. 1. If _propertyDesc_ does not have a [[Configurable]] field, set _propertyDesc_.[[Configurable]] to _like_.[[Configurable]]. 1. Return ~unused~. @@ -4958,7 +4958,7 @@

    The PrivateElement Specification Type

    - [[Get]] + [[Getter]] ~accessor~ @@ -4972,7 +4972,7 @@

    The PrivateElement Specification Type

    - [[Set]] + [[Setter]] ~accessor~ @@ -6807,8 +6807,8 @@

    1. If _entry_.[[Kind]] is either ~field~ or ~method~, then 1. Return _entry_.[[Value]]. 1. Assert: _entry_.[[Kind]] is ~accessor~. - 1. If _entry_.[[Get]] is *undefined*, throw a *TypeError* exception. - 1. Let _getter_ be _entry_.[[Get]]. + 1. If _entry_.[[Getter]] is *undefined*, throw a *TypeError* exception. + 1. Let _getter_ be _entry_.[[Getter]]. 1. Return ? Call(_getter_, _obj_). @@ -6831,8 +6831,8 @@

    1. Set _entry_.[[Value]] to _value_. 1. Else, 1. Assert: _entry_.[[Kind]] is ~accessor~. - 1. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception. - 1. Let _setter_ be _entry_.[[Set]]. + 1. If _entry_.[[Setter]] is *undefined*, throw a *TypeError* exception. + 1. Let _setter_ be _entry_.[[Setter]]. 1. Perform ? Call(_setter_, _obj_, « _value_ »). 1. Return ~unused~. @@ -13181,8 +13181,8 @@

    1. Set _propertyDesc_.[[Writable]] to the value of _ownProperty_'s [[Writable]] attribute. 1. Else, 1. Assert: _ownProperty_ is an accessor property. - 1. Set _propertyDesc_.[[Get]] to the value of _ownProperty_'s [[Get]] attribute. - 1. Set _propertyDesc_.[[Set]] to the value of _ownProperty_'s [[Set]] attribute. + 1. Set _propertyDesc_.[[Getter]] to the value of _ownProperty_'s [[Getter]] attribute. + 1. Set _propertyDesc_.[[Setter]] to the value of _ownProperty_'s [[Setter]] attribute. 1. Set _propertyDesc_.[[Enumerable]] to the value of _ownProperty_'s [[Enumerable]] attribute. 1. Set _propertyDesc_.[[Configurable]] to the value of _ownProperty_'s [[Configurable]] attribute. 1. Return _propertyDesc_. @@ -13257,7 +13257,7 @@

    1. If _extensible_ is *false*, return *false*. 1. If _obj_ is *undefined*, return *true*. 1. If IsAccessorDescriptor(_propertyDesc_) is *true*, then - 1. Create an own accessor property named _propertyKey_ of object _obj_ whose [[Get]], [[Set]], [[Enumerable]], and [[Configurable]] attributes are set to the value of the corresponding field in _propertyDesc_ if _propertyDesc_ has that field, or to the attribute's default value otherwise. + 1. Create an own accessor property named _propertyKey_ of object _obj_ whose [[Getter]], [[Setter]], [[Enumerable]], and [[Configurable]] attributes are set to the value of the corresponding field in _propertyDesc_ if _propertyDesc_ has that field, or to the attribute's default value otherwise. 1. Else, 1. Create an own data property named _propertyKey_ of object _obj_ whose [[Value]], [[Writable]], [[Enumerable]], and [[Configurable]] attributes are set to the value of the corresponding field in _propertyDesc_ if _propertyDesc_ has that field, or to the attribute's default value otherwise. 1. Return *true*. @@ -13268,8 +13268,8 @@

    1. If _propertyDesc_ has an [[Enumerable]] field and _propertyDesc_.[[Enumerable]] is not _current_.[[Enumerable]], return *false*. 1. If IsGenericDescriptor(_propertyDesc_) is *false* and IsAccessorDescriptor(_propertyDesc_) is not IsAccessorDescriptor(_current_), return *false*. 1. If IsAccessorDescriptor(_current_) is *true*, then - 1. If _propertyDesc_ has a [[Get]] field and SameValue(_propertyDesc_.[[Get]], _current_.[[Get]]) is *false*, return *false*. - 1. If _propertyDesc_ has a [[Set]] field and SameValue(_propertyDesc_.[[Set]], _current_.[[Set]]) is *false*, return *false*. + 1. If _propertyDesc_ has a [[Getter]] field and SameValue(_propertyDesc_.[[Getter]], _current_.[[Getter]]) is *false*, return *false*. + 1. If _propertyDesc_ has a [[Setter]] field and SameValue(_propertyDesc_.[[Setter]], _current_.[[Setter]]) is *false*, return *false*. 1. Else if _current_.[[Writable]] is *false*, then 1. If _propertyDesc_ has a [[Writable]] field and _propertyDesc_.[[Writable]] is *true*, return *false*. 1. NOTE: SameValue returns *true* for *NaN* values which may be distinguishable by other means. Returning here ensures that any existing property of _obj_ remains unmodified. @@ -13278,7 +13278,7 @@

    1. If IsDataDescriptor(_current_) is *true* and IsAccessorDescriptor(_propertyDesc_) is *true*, then 1. If _propertyDesc_ has a [[Configurable]] field, let _configurable_ be _propertyDesc_.[[Configurable]]; else let _configurable_ be _current_.[[Configurable]]. 1. If _propertyDesc_ has an [[Enumerable]] field, let _enumerable_ be _propertyDesc_.[[Enumerable]]; else let _enumerable_ be _current_.[[Enumerable]]. - 1. Replace the property named _propertyKey_ of object _obj_ with an accessor property whose [[Configurable]] and [[Enumerable]] attributes are set to _configurable_ and _enumerable_, respectively, and whose [[Get]] and [[Set]] attributes are set to the value of the corresponding field in _propertyDesc_ if _propertyDesc_ has that field, or to the attribute's default value otherwise. + 1. Replace the property named _propertyKey_ of object _obj_ with an accessor property whose [[Configurable]] and [[Enumerable]] attributes are set to _configurable_ and _enumerable_, respectively, and whose [[Getter]] and [[Setter]] attributes are set to the value of the corresponding field in _propertyDesc_ if _propertyDesc_ has that field, or to the attribute's default value otherwise. 1. Else if IsAccessorDescriptor(_current_) is *true* and IsDataDescriptor(_propertyDesc_) is *true*, then 1. If _propertyDesc_ has a [[Configurable]] field, let _configurable_ be _propertyDesc_.[[Configurable]]; else let _configurable_ be _current_.[[Configurable]]. 1. If _propertyDesc_ has an [[Enumerable]] field, let _enumerable_ be _propertyDesc_.[[Enumerable]]; else let _enumerable_ be _current_.[[Enumerable]]. @@ -13359,7 +13359,7 @@

    1. Return ? _parent_.[[Get]](_propertyKey_, _receiver_). 1. If IsDataDescriptor(_propertyDesc_) is *true*, return _propertyDesc_.[[Value]]. 1. Assert: IsAccessorDescriptor(_propertyDesc_) is *true*. - 1. Let _getter_ be _propertyDesc_.[[Get]]. + 1. Let _getter_ be _propertyDesc_.[[Getter]]. 1. If _getter_ is *undefined*, return *undefined*. 1. Return ? Call(_getter_, _receiver_). @@ -13430,7 +13430,7 @@

    1. Let _valueDesc_ be the PropertyDescriptor { [[Value]]: _value_ }. 1. Return ? _receiver_.[[DefineOwnProperty]](_propertyKey_, _valueDesc_). 1. Assert: IsAccessorDescriptor(_ownDesc_) is *true*. - 1. Let _setter_ be _ownDesc_.[[Set]]. + 1. Let _setter_ be _ownDesc_.[[Setter]]. 1. If _setter_ is *undefined*, return *false*. 1. Perform ? Call(_setter_, _receiver_, « _value_ »). 1. Return *true*. @@ -14044,8 +14044,8 @@

    1. Assert: _realm_.[[Intrinsics]].[[%ThrowTypeError%]] exists and has been initialized. 1. Let _thrower_ be _realm_.[[Intrinsics]].[[%ThrowTypeError%]]. - 1. Perform ! DefinePropertyOrThrow(_func_, *"caller"*, PropertyDescriptor { [[Get]]: _thrower_, [[Set]]: _thrower_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). - 1. Perform ! DefinePropertyOrThrow(_func_, *"arguments"*, PropertyDescriptor { [[Get]]: _thrower_, [[Set]]: _thrower_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). + 1. Perform ! DefinePropertyOrThrow(_func_, *"caller"*, PropertyDescriptor { [[Getter]]: _thrower_, [[Setter]]: _thrower_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). + 1. Perform ! DefinePropertyOrThrow(_func_, *"arguments"*, PropertyDescriptor { [[Getter]]: _thrower_, [[Setter]]: _thrower_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). 1. Return ~unused~. @@ -15028,7 +15028,7 @@

    1. Perform ! CreateDataPropertyOrThrow(_obj_, ! ToString(𝔽(_index_)), _value_). 1. Set _index_ to _index_ + 1. 1. Perform ! DefinePropertyOrThrow(_obj_, %Symbol.iterator%, PropertyDescriptor { [[Value]]: %Array.prototype.values%, [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *true* }). - 1. Perform ! DefinePropertyOrThrow(_obj_, *"callee"*, PropertyDescriptor { [[Get]]: %ThrowTypeError%, [[Set]]: %ThrowTypeError%, [[Enumerable]]: *false*, [[Configurable]]: *false* }). + 1. Perform ! DefinePropertyOrThrow(_obj_, *"callee"*, PropertyDescriptor { [[Getter]]: %ThrowTypeError%, [[Setter]]: %ThrowTypeError%, [[Enumerable]]: *false*, [[Configurable]]: *false* }). 1. Return _obj_. @@ -15073,7 +15073,7 @@

    1. If _index_ < _length_, then 1. Let _getter_ be MakeArgGetter(_name_, _envRecord_). 1. Let _setter_ be MakeArgSetter(_name_, _envRecord_). - 1. Perform ! _map_.[[DefineOwnProperty]](! ToString(𝔽(_index_)), PropertyDescriptor { [[Set]]: _setter_, [[Get]]: _getter_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). + 1. Perform ! _map_.[[DefineOwnProperty]](! ToString(𝔽(_index_)), PropertyDescriptor { [[Setter]]: _setter_, [[Getter]]: _getter_, [[Enumerable]]: *false*, [[Configurable]]: *true* }). 1. Set _index_ to _index_ - 1. 1. Perform ! DefinePropertyOrThrow(_obj_, %Symbol.iterator%, PropertyDescriptor { [[Value]]: %Array.prototype.values%, [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *true* }). 1. Perform ! DefinePropertyOrThrow(_obj_, *"callee"*, PropertyDescriptor { [[Value]]: _func_, [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *true* }). @@ -16321,7 +16321,7 @@

    1. If _targetDesc_ is not *undefined* and _targetDesc_.[[Configurable]] is *false*, then 1. If IsDataDescriptor(_targetDesc_) is *true* and _targetDesc_.[[Writable]] is *false*, then 1. If SameValue(_trapResult_, _targetDesc_.[[Value]]) is *false*, throw a *TypeError* exception. - 1. If IsAccessorDescriptor(_targetDesc_) is *true* and _targetDesc_.[[Get]] is *undefined*, then + 1. If IsAccessorDescriptor(_targetDesc_) is *true* and _targetDesc_.[[Getter]] is *undefined*, then 1. If _trapResult_ is not *undefined*, throw a *TypeError* exception. 1. Return _trapResult_. @@ -16332,7 +16332,7 @@

    The value reported for a property must be the same as the value of the corresponding target object property if the target object property is a non-writable, non-configurable own data property.
  • - The value reported for a property must be *undefined* if the corresponding target object property is a non-configurable own accessor property that has *undefined* as its [[Get]] attribute. + The value reported for a property must be *undefined* if the corresponding target object property is a non-configurable own accessor property that has *undefined* as its [[Getter]] attribute.
  • @@ -16365,7 +16365,7 @@

    1. If IsDataDescriptor(_targetDesc_) is *true* and _targetDesc_.[[Writable]] is *false*, then 1. If SameValue(_value_, _targetDesc_.[[Value]]) is *false*, throw a *TypeError* exception. 1. If IsAccessorDescriptor(_targetDesc_) is *true*, then - 1. If _targetDesc_.[[Set]] is *undefined*, throw a *TypeError* exception. + 1. If _targetDesc_.[[Setter]] is *undefined*, throw a *TypeError* exception. 1. Return *true*. @@ -16378,7 +16378,7 @@

    Cannot change the value of a property to be different from the value of the corresponding target object property if the corresponding target object property is a non-writable, non-configurable own data property.
  • - Cannot set the value of a property if the corresponding target object property is a non-configurable own accessor property that has *undefined* as its [[Set]] attribute. + Cannot set the value of a property if the corresponding target object property is a non-configurable own accessor property that has *undefined* as its [[Setter]] attribute.
  • @@ -21313,7 +21313,7 @@

    Runtime Semantics: Evaluation

    1. Return _rightValue_. -

    When this expression occurs within strict mode code, it is a runtime error if _leftRef_ in step , , , , is an unresolvable reference. If it is, a *ReferenceError* exception is thrown. Additionally, it is a runtime error if the _leftRef_ in step , , , is a reference to a data property with the attribute value { [[Writable]]: *false* }, to an accessor property with the attribute value { [[Set]]: *undefined* }, or to a non-existent property of an object for which the IsExtensible predicate returns the value *false*. In these cases a *TypeError* exception is thrown.

    +

    When this expression occurs within strict mode code, it is a runtime error if _leftRef_ in step , , , , is an unresolvable reference. If it is, a *ReferenceError* exception is thrown. Additionally, it is a runtime error if the _leftRef_ in step , , , is a reference to a data property with the attribute value { [[Writable]]: *false* }, to an accessor property with the attribute value { [[Setter]]: *undefined* }, or to a non-existent property of an object for which the IsExtensible predicate returns the value *false*. In these cases a *TypeError* exception is thrown.

    @@ -24646,8 +24646,8 @@

    1. Perform MakeMethod(_closure_, _obj_). 1. Perform SetFunctionName(_closure_, _propertyKey_, *"get"*). 1. If _propertyKey_ is a Private Name, then - 1. Return PrivateElement { [[Key]]: _propertyKey_, [[Kind]]: ~accessor~, [[Get]]: _closure_, [[Set]]: *undefined* }. - 1. Let _propertyDesc_ be the PropertyDescriptor { [[Get]]: _closure_, [[Enumerable]]: _enumerable_, [[Configurable]]: *true* }. + 1. Return PrivateElement { [[Key]]: _propertyKey_, [[Kind]]: ~accessor~, [[Getter]]: _closure_, [[Setter]]: *undefined* }. + 1. Let _propertyDesc_ be the PropertyDescriptor { [[Getter]]: _closure_, [[Enumerable]]: _enumerable_, [[Configurable]]: *true* }. 1. Perform ? DefinePropertyOrThrow(_obj_, _propertyKey_, _propertyDesc_). 1. Return ~unused~. @@ -24661,8 +24661,8 @@

    1. Perform MakeMethod(_closure_, _obj_). 1. Perform SetFunctionName(_closure_, _propertyKey_, *"set"*). 1. If _propertyKey_ is a Private Name, then - 1. Return PrivateElement { [[Key]]: _propertyKey_, [[Kind]]: ~accessor~, [[Get]]: *undefined*, [[Set]]: _closure_ }. - 1. Let _propertyDesc_ be the PropertyDescriptor { [[Set]]: _closure_, [[Enumerable]]: _enumerable_, [[Configurable]]: *true* }. + 1. Return PrivateElement { [[Key]]: _propertyKey_, [[Kind]]: ~accessor~, [[Getter]]: *undefined*, [[Setter]]: _closure_ }. + 1. Let _propertyDesc_ be the PropertyDescriptor { [[Setter]]: _closure_, [[Enumerable]]: _enumerable_, [[Configurable]]: *true* }. 1. Perform ? DefinePropertyOrThrow(_obj_, _propertyKey_, _propertyDesc_). 1. Return ~unused~. @@ -25808,10 +25808,10 @@

    1. Else, let _container_ be _staticPrivateMethods_. 1. If _container_ contains a PrivateElement _existingElement_ such that _existingElement_.[[Key]] is _element_.[[Key]], then 1. Assert: _element_.[[Kind]] and _existingElement_.[[Kind]] are both ~accessor~. - 1. If _element_.[[Get]] is *undefined*, then - 1. Let _combined_ be PrivateElement { [[Key]]: _element_.[[Key]], [[Kind]]: ~accessor~, [[Get]]: _existingElement_.[[Get]], [[Set]]: _element_.[[Set]] }. + 1. If _element_.[[Getter]] is *undefined*, then + 1. Let _combined_ be PrivateElement { [[Key]]: _element_.[[Key]], [[Kind]]: ~accessor~, [[Getter]]: _existingElement_.[[Getter]], [[Setter]]: _element_.[[Setter]] }. 1. Else, - 1. Let _combined_ be PrivateElement { [[Key]]: _element_.[[Key]], [[Kind]]: ~accessor~, [[Get]]: _element_.[[Get]], [[Set]]: _existingElement_.[[Set]] }. + 1. Let _combined_ be PrivateElement { [[Key]]: _element_.[[Key]], [[Kind]]: ~accessor~, [[Getter]]: _element_.[[Getter]], [[Setter]]: _existingElement_.[[Setter]] }. 1. Replace _existingElement_ in _container_ with _combined_. 1. Else, 1. Append _element_ to _container_. @@ -30310,7 +30310,7 @@

    Forbidden Extensions

    ECMAScript function objects defined using syntactic constructors in strict mode code must not be created with own properties named *"caller"* or *"arguments"*. Such own properties also must not be created for function objects defined using an |ArrowFunction|, |MethodDefinition|, |GeneratorDeclaration|, |GeneratorExpression|, |AsyncGeneratorDeclaration|, |AsyncGeneratorExpression|, |ClassDeclaration|, |ClassExpression|, |AsyncFunctionDeclaration|, |AsyncFunctionExpression|, or |AsyncArrowFunction| regardless of whether the definition is contained in strict mode code. Built-in functions, strict functions created using the Function constructor, generator functions created using the Generator constructor, async functions created using the AsyncFunction constructor, and functions created using the `bind` method also must not be created with such own properties.
  • - If an implementation extends any function object with an own property named *"caller"* the value of that property, as observed using [[Get]] or [[GetOwnProperty]], must not be a strict function object. If it is an accessor property, the function that is the value of the property's [[Get]] attribute must never return a strict function when called. + If an implementation extends any function object with an own property named *"caller"* the value of that property, as observed using [[Get]] or [[GetOwnProperty]], must not be a strict function object. If it is an accessor property, the function that is the value of the property's [[Getter]] attribute must never return a strict function when called.
  • Neither mapped nor unmapped arguments objects may be created with an own property named *"caller"*. @@ -31632,11 +31632,11 @@

    Object.prototype.valueOf ( )

    Object.prototype.__proto__

    -

    `Object.prototype.__proto__` is an accessor property with attributes { [[Enumerable]]: *false*, [[Configurable]]: *true* }. The [[Get]] and [[Set]] attributes are defined as follows:

    +

    `Object.prototype.__proto__` is an accessor property with attributes { [[Enumerable]]: *false*, [[Configurable]]: *true* }. The [[Getter]] and [[Setter]] attributes are defined as follows:

    get Object.prototype.__proto__

    -

    The value of the [[Get]] attribute is a built-in function that requires no arguments. It performs the following steps when called:

    +

    The value of the [[Getter]] attribute is a built-in function that requires no arguments. It performs the following steps when called:

    1. Let _obj_ be ? ToObject(*this* value). 1. Return ? _obj_.[[GetPrototypeOf]](). @@ -31645,7 +31645,7 @@

    get Object.prototype.__proto__

    set Object.prototype.__proto__

    -

    The value of the [[Set]] attribute is a built-in function that takes an argument _proto_. It performs the following steps when called:

    +

    The value of the [[Setter]] attribute is a built-in function that takes an argument _proto_. It performs the following steps when called:

    1. Let _thisValue_ be the *this* value. 1. Perform ? RequireObjectCoercible(_thisValue_). @@ -31667,7 +31667,7 @@

    Object.prototype.__defineGetter__ ( _key_, _getter_ )

    1. Let _obj_ be ? ToObject(*this* value). 1. If IsCallable(_getter_) is *false*, throw a *TypeError* exception. - 1. Let _propertyDesc_ be PropertyDescriptor { [[Get]]: _getter_, [[Enumerable]]: *true*, [[Configurable]]: *true* }. + 1. Let _propertyDesc_ be PropertyDescriptor { [[Getter]]: _getter_, [[Enumerable]]: *true*, [[Configurable]]: *true* }. 1. Let _propertyKey_ be ? ToPropertyKey(_key_). 1. Perform ? DefinePropertyOrThrow(_obj_, _propertyKey_, _propertyDesc_). 1. Return *undefined*. @@ -31680,7 +31680,7 @@

    Object.prototype.__defineSetter__ ( _key_, _setter_ )

    1. Let _obj_ be ? ToObject(*this* value). 1. If IsCallable(_setter_) is *false*, throw a *TypeError* exception. - 1. Let _propertyDesc_ be PropertyDescriptor { [[Set]]: _setter_, [[Enumerable]]: *true*, [[Configurable]]: *true* }. + 1. Let _propertyDesc_ be PropertyDescriptor { [[Setter]]: _setter_, [[Enumerable]]: *true*, [[Configurable]]: *true* }. 1. Let _propertyKey_ be ? ToPropertyKey(_key_). 1. Perform ? DefinePropertyOrThrow(_obj_, _propertyKey_, _propertyDesc_). 1. Return *undefined*. @@ -31696,7 +31696,7 @@

    Object.prototype.__lookupGetter__ ( _key_ )

    1. Repeat, 1. Let _propertyDesc_ be ? _obj_.[[GetOwnProperty]](_propertyKey_). 1. If _propertyDesc_ is not *undefined*, then - 1. If IsAccessorDescriptor(_propertyDesc_) is *true*, return _propertyDesc_.[[Get]]. + 1. If IsAccessorDescriptor(_propertyDesc_) is *true*, return _propertyDesc_.[[Getter]]. 1. Return *undefined*. 1. Set _obj_ to ? _obj_.[[GetPrototypeOf]](). 1. If _obj_ is *null*, return *undefined*. @@ -31712,7 +31712,7 @@

    Object.prototype.__lookupSetter__ ( _key_ )

    1. Repeat, 1. Let _propertyDesc_ be ? _obj_.[[GetOwnProperty]](_propertyKey_). 1. If _propertyDesc_ is not *undefined*, then - 1. If IsAccessorDescriptor(_propertyDesc_) is *true*, return _propertyDesc_.[[Set]]. + 1. If IsAccessorDescriptor(_propertyDesc_) is *true*, return _propertyDesc_.[[Setter]]. 1. Return *undefined*. 1. Set _obj_ to ? _obj_.[[GetPrototypeOf]](). 1. If _obj_ is *null*, return *undefined*. @@ -49456,11 +49456,11 @@

    Properties of the Iterator Prototype Object

    Iterator.prototype.constructor

    -

    `Iterator.prototype.constructor` is an accessor property with attributes { [[Enumerable]]: *false*, [[Configurable]]: *true* }. The [[Get]] and [[Set]] attributes are defined as follows:

    +

    `Iterator.prototype.constructor` is an accessor property with attributes { [[Enumerable]]: *false*, [[Configurable]]: *true* }. The [[Getter]] and [[Setter]] attributes are defined as follows:

    get Iterator.prototype.constructor

    -

    The value of the [[Get]] attribute is a built-in function that requires no arguments. It performs the following steps when called:

    +

    The value of the [[Getter]] attribute is a built-in function that requires no arguments. It performs the following steps when called:

    1. Return %Iterator%. @@ -49468,7 +49468,7 @@

    get Iterator.prototype.constructor

    set Iterator.prototype.constructor

    -

    The value of the [[Set]] attribute is a built-in function that takes an argument _v_. It performs the following steps when called:

    +

    The value of the [[Setter]] attribute is a built-in function that takes an argument _v_. It performs the following steps when called:

    1. Perform ? SetterThatIgnoresPrototypeProperties(*this* value, %Iterator.prototype%, *"constructor"*, _v_). 1. Return *undefined*. @@ -49797,11 +49797,11 @@

    Iterator.prototype [ %Symbol.iterator% ] ( )

    Iterator.prototype [ %Symbol.toStringTag% ]

    -

    `Iterator.prototype[%Symbol.toStringTag%]` is an accessor property with attributes { [[Enumerable]]: *false*, [[Configurable]]: *true* }. The [[Get]] and [[Set]] attributes are defined as follows:

    +

    `Iterator.prototype[%Symbol.toStringTag%]` is an accessor property with attributes { [[Enumerable]]: *false*, [[Configurable]]: *true* }. The [[Getter]] and [[Setter]] attributes are defined as follows:

    get Iterator.prototype [ %Symbol.toStringTag% ]

    -

    The value of the [[Get]] attribute is a built-in function that requires no arguments. It performs the following steps when called:

    +

    The value of the [[Getter]] attribute is a built-in function that requires no arguments. It performs the following steps when called:

    1. Return *"Iterator"*. @@ -49809,7 +49809,7 @@

    get Iterator.prototype [ %Symbol.toStringTag% ]

    set Iterator.prototype [ %Symbol.toStringTag% ]

    -

    The value of the [[Set]] attribute is a built-in function that takes an argument _v_. It performs the following steps when called:

    +

    The value of the [[Setter]] attribute is a built-in function that takes an argument _v_. It performs the following steps when called:

    1. Perform ? SetterThatIgnoresPrototypeProperties(*this* value, %Iterator.prototype%, %Symbol.toStringTag%, _v_). 1. Return *undefined*. @@ -54980,7 +54980,7 @@

    The Strict Mode of ECMAScript

    A conforming implementation, when processing strict mode code, must disallow instances of the productions EscapeSequence :: LegacyOctalEscapeSequence and EscapeSequence :: NonOctalDecimalEscapeSequence.
  • - Assignment to an undeclared identifier or otherwise unresolvable reference does not create a property in the global object. When a simple assignment occurs within strict mode code, its |LeftHandSideExpression| must not evaluate to an unresolvable Reference. If it does a *ReferenceError* exception is thrown (). The |LeftHandSideExpression| also may not be a reference to a data property with the attribute value { [[Writable]]: *false* }, to an accessor property with the attribute value { [[Set]]: *undefined* }, nor to a non-existent property of an object whose [[Extensible]] internal slot is *false*. In these cases a `TypeError` exception is thrown (). + Assignment to an undeclared identifier or otherwise unresolvable reference does not create a property in the global object. When a simple assignment occurs within strict mode code, its |LeftHandSideExpression| must not evaluate to an unresolvable Reference. If it does a *ReferenceError* exception is thrown (). The |LeftHandSideExpression| also may not be a reference to a data property with the attribute value { [[Writable]]: *false* }, to an accessor property with the attribute value { [[Setter]]: *undefined* }, nor to a non-existent property of an object whose [[Extensible]] internal slot is *false*. In these cases a `TypeError` exception is thrown ().
  • An |IdentifierReference| with the StringValue *"eval"* or *"arguments"* may not appear as the |LeftHandSideExpression| of an Assignment operator () or of an |UpdateExpression| () or as the |UnaryExpression| operated upon by a Prefix Increment () or a Prefix Decrement () operator. @@ -55113,7 +55113,7 @@

    Additions and Changes That Introduce Incompatibilities with Prior Editions: In ECMAScript 2015, it is an early error for a |Catch| clause to contain a `var` declaration for the same |Identifier| that appears as the |Catch| clause parameter. In previous editions, such a variable declaration would be instantiated in the enclosing variable environment but the declaration's |Initializer| value would be assigned to the |Catch| parameter.

    , : In ECMAScript 2015, a runtime *SyntaxError* is thrown if a |Catch| clause evaluates a non-strict direct `eval` whose eval code includes a `var` or `FunctionDeclaration` declaration that binds the same |Identifier| that appears as the |Catch| clause parameter.

    : In ECMAScript 2015, the result of a |TryStatement| is never the value ~empty~. If the |Block| part of a |TryStatement| evaluates to a normal completion containing ~empty~, the result of the |TryStatement| is *undefined*. If the |Block| part of a |TryStatement| evaluates to a throw completion and it has a |Catch| part that evaluates to a normal completion containing ~empty~, the result of the |TryStatement| is *undefined* if there is no |Finally| clause or if its |Finally| clause evaluates to an ~empty~ normal completion.

    -

    In ECMAScript 2015, the function objects that are created as the values of the [[Get]] or [[Set]] attribute of accessor properties in an |ObjectLiteral| are not constructor functions and they do not have a *"prototype"* own property. In the previous edition, they were constructors and had a *"prototype"* property.

    +

    In ECMAScript 2015, the function objects that are created as the values of the [[Getter]] or [[Setter]] attribute of accessor properties in an |ObjectLiteral| are not constructor functions and they do not have a *"prototype"* own property. In the previous edition, they were constructors and had a *"prototype"* property.

    : In ECMAScript 2015, if the argument to `Object.freeze` is not an object it is treated as if it was a non-extensible ordinary object with no own properties. In the previous edition, a non-object argument always causes a *TypeError* to be thrown.

    : In ECMAScript 2015, if the argument to `Object.getOwnPropertyDescriptor` is not an object an attempt is made to coerce the argument using ToObject. If the coercion is successful the result is used in place of the original argument value. In the previous edition, a non-object argument always causes a *TypeError* to be thrown.

    : In ECMAScript 2015, if the argument to `Object.getOwnPropertyNames` is not an object an attempt is made to coerce the argument using ToObject. If the coercion is successful the result is used in place of the original argument value. In the previous edition, a non-object argument always causes a *TypeError* to be thrown.