diff --git a/spec.html b/spec.html index 0879c1b71c..394e3b0c10 100644 --- a/spec.html +++ b/spec.html @@ -693,7 +693,7 @@

Algorithm Conventions

A step or substep may be written as an “if” predicate that conditions its substeps. In this case, the substeps are only applied if the predicate is true. If a step or substep begins with the word “else”, it is a predicate that is the negation of the preceding “if” predicate step at the same level.

A step may specify the iterative application of its substeps.

-

A step that begins with “Assert:” asserts an invariant condition of its algorithm. Such assertions are used to make explicit algorithmic invariants that would otherwise be implicit. Such assertions add no additional semantic requirements and hence need not be checked by an implementation. They are used simply to clarify algorithms.

+

A step that begins with “Assert:” asserts an invariant condition of its algorithm. Such assertions are used to make explicit algorithmic invariants that would otherwise be implicit. Such assertions add no additional semantic requirements and hence need not be checked by an implementation. They are used simply to clarify algorithms.

Mathematical operations such as addition, subtraction, negation, multiplication, division, and the mathematical functions defined later in this clause should always be understood as computing exact mathematical results on mathematical real numbers, which unless otherwise noted do not include infinities and do not include a negative zero that is distinguished from positive zero. Algorithms in this standard that model floating-point arithmetic include explicit steps, where necessary, to handle infinities and signed zero and to perform rounding. If a mathematical operation or function is applied to a floating-point number, it should be understood as being applied to the exact mathematical value represented by that floating-point number; such a floating-point number must be finite, and if it is *+0* or *-0* then the corresponding mathematical value is simply 0.

The mathematical function abs(_x_) produces the absolute value of _x_, which is -_x_ if _x_ is negative (less than zero) and otherwise is _x_ itself.

The mathematical function min(_x1_, _x2_, ..., _xN_) produces the mathematically smallest of _x1_ through _xN_. The mathematical function max(_x1_, _x2_, ..., _xN_) produces the mathematically largest of _x1_ through _xN_. The domain and range of these mathematical functions include *+∞* and *-∞*.

@@ -2701,30 +2701,30 @@

The Reference Specification Type

The Reference type is used to explain the behaviour of such operators as `delete`, `typeof`, the assignment operators, the `super` keyword and other language features. For example, the left-hand operand of an assignment is expected to produce a reference.

-

A Reference is a resolved name or property binding. A Reference consists of three components, the base value, the referenced name and the Boolean valued strict reference flag. The base value is either *undefined*, an Object, a Boolean, a String, a Symbol, a Number, or an Environment Record. A _base_ value of *undefined* indicates that the Reference could not be resolved to a binding. The referenced name is a String or Symbol value.

-

A Super Reference is a Reference that is used to represents a name binding that was expressed using the super keyword. A Super Reference has an additional _thisValue_ component and its _base_ value will never be an Environment Record.

+

A Reference is a resolved name or property binding. A Reference consists of three components, the base value component, the referenced name component, and the Boolean-valued strict reference flag. The base value component is either *undefined*, an Object, a Boolean, a String, a Symbol, a Number, or an Environment Record. A base value component of *undefined* indicates that the Reference could not be resolved to a binding. The referenced name component is a String or Symbol value.

+

A Super Reference is a Reference that is used to represents a name binding that was expressed using the super keyword. A Super Reference has an additional thisValue component, and its base value component will never be an Environment Record.

The following abstract operations are used in this specification to access the components of references:

The following abstract operations are used in this specification to operate on references:

@@ -2784,7 +2784,7 @@

GetThisValue (_V_)

1. Assert: IsPropertyReference(_V_) is *true*. 1. If IsSuperReference(_V_) is *true*, then - 1. Return the value of the _thisValue_ component of the reference _V_. + 1. Return the value of the thisValue component of the reference _V_. 1. Return GetBase(_V_). @@ -5647,11 +5647,11 @@

GetIdentifierReference (_lex_, _name_, _strict_)

The abstract operation GetIdentifierReference is called with a Lexical Environment _lex_, a String _name_, and a Boolean flag _strict_. The value of _lex_ may be *null*. When called, the following steps are performed:

1. If _lex_ is the value *null*, then - 1. Return a value of type Reference whose base value is *undefined*, whose referenced name is _name_, and whose strict reference flag is _strict_. + 1. Return a value of type Reference whose base value component is *undefined*, whose referenced name component is _name_, and whose strict reference flag is _strict_. 1. Let _envRec_ be _lex_'s EnvironmentRecord. 1. Let _exists_ be ? _envRec_.HasBinding(_name_). 1. If _exists_ is *true*, then - 1. Return a value of type Reference whose base value is _envRec_, whose referenced name is _name_, and whose strict reference flag is _strict_. + 1. Return a value of type Reference whose base value component is _envRec_, whose referenced name component is _name_, and whose strict reference flag is _strict_. 1. Else, 1. Let _outer_ be the value of _lex_'s outer environment reference. 1. Return ? GetIdentifierReference(_outer_, _name_, _strict_). @@ -11813,7 +11813,7 @@

Runtime Semantics: Evaluation

1. Let _bv_ be ? RequireObjectCoercible(_baseValue_). 1. Let _propertyKey_ be ? ToPropertyKey(_propertyNameValue_). 1. If the code matched by the syntactic production that is being evaluated is strict mode code, let _strict_ be *true*, else let _strict_ be *false*. - 1. Return a value of type Reference whose base value is _bv_, whose referenced name is _propertyKey_, and whose strict reference flag is _strict_. + 1. Return a value of type Reference whose base value component is _bv_, whose referenced name component is _propertyKey_, and whose strict reference flag is _strict_.
MemberExpression : MemberExpression `.` IdentifierName @@ -11822,7 +11822,7 @@

Runtime Semantics: Evaluation

1. Let _bv_ be ? RequireObjectCoercible(_baseValue_). 1. Let _propertyNameString_ be StringValue of |IdentifierName|. 1. If the code matched by the syntactic production that is being evaluated is strict mode code, let _strict_ be *true*, else let _strict_ be *false*. - 1. Return a value of type Reference whose base value is _bv_, whose referenced name is _propertyNameString_, and whose strict reference flag is _strict_. + 1. Return a value of type Reference whose base value component is _bv_, whose referenced name component is _propertyNameString_, and whose strict reference flag is _strict_.
CallExpression : CallExpression `[` Expression `]`

Is evaluated in exactly the same manner as MemberExpression : MemberExpression `[` Expression `]` except that the contained |CallExpression| is evaluated in step 1.

@@ -12002,7 +12002,7 @@

Runtime Semantics: MakeSuperPropertyReference(_propertyKey_, _strict_)

1. Let _actualThis_ be ? _env_.GetThisBinding(). 1. Let _baseValue_ be ? _env_.GetSuperBase(). 1. Let _bv_ be ? RequireObjectCoercible(_baseValue_). - 1. Return a value of type Reference that is a Super Reference whose base value is _bv_, whose referenced name is _propertyKey_, whose thisValue is _actualThis_, and whose strict reference flag is _strict_. + 1. Return a value of type Reference that is a Super Reference whose base value component is _bv_, whose referenced name component is _propertyKey_, whose thisValue component is _actualThis_, and whose strict reference flag is _strict_.