Skip to content

Commit ca92d09

Browse files
committed
Normative: ToInteger normalizes -0 to +0 (#1827)
Fixes #1637. This only has an observable impact on `Atomics.store`.
1 parent 332d1ba commit ca92d09

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

spec.html

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4815,8 +4815,8 @@ <h1>ToInteger ( _argument_ )</h1>
48154815
<p>The abstract operation ToInteger converts _argument_ to an integral Number value. This abstract operation functions as follows:</p>
48164816
<emu-alg>
48174817
1. Let _number_ be ? ToNumber(_argument_).
4818-
1. If _number_ is *NaN*, return *+0*.
4819-
1. If _number_ is *+0*, *-0*, *+&infin;*, or *-&infin;*, return _number_.
4818+
1. If _number_ is *NaN*, *+0*, or *-0*, return *+0*.
4819+
1. If _number_ is *+&infin;*, or *-&infin;*, return _number_.
48204820
1. Return the Number value that is the same sign as _number_ and whose magnitude is floor(abs(_number_)).
48214821
</emu-alg>
48224822
</emu-clause>
@@ -5281,7 +5281,7 @@ <h1>ToIndex ( _value_ )</h1>
52815281
1. Let _integerIndex_ be ? ToInteger(_value_).
52825282
1. If _integerIndex_ &lt; 0, throw a *RangeError* exception.
52835283
1. Let _index_ be ! ToLength(_integerIndex_).
5284-
1. If SameValueZero(_integerIndex_, _index_) is *false*, throw a *RangeError* exception.
5284+
1. If ! SameValue(_integerIndex_, _index_) is *false*, throw a *RangeError* exception.
52855285
1. Return _index_.
52865286
</emu-alg>
52875287
</emu-clause>
@@ -28558,9 +28558,7 @@ <h1>TimeClip ( _time_ )</h1>
2855828558
<emu-alg>
2855928559
1. If _time_ is not finite, return *NaN*.
2856028560
1. If abs(_time_) &gt; 8.64 &times; 10<sup>15</sup>, return *NaN*.
28561-
1. Let _clippedTime_ be ! ToInteger(_time_).
28562-
1. If _clippedTime_ is *-0*, set _clippedTime_ to *+0*.
28563-
1. Return _clippedTime_.
28561+
1. Return ! ToInteger(_time_).
2856428562
</emu-alg>
2856528563
<emu-note>
2856628564
<p>The point of step 4 is that an implementation is permitted a choice of internal representations of time values, for example as a 64-bit signed integer or as a 64-bit floating-point value. Depending on the implementation, this internal representation may or may not distinguish *-0* and *+0*.</p>
@@ -33722,7 +33720,7 @@ <h1>Array.prototype.indexOf ( _searchElement_ [ , _fromIndex_ ] )</h1>
3372233720
1. Assert: If _fromIndex_ is *undefined*, then _n_ is 0.
3372333721
1. If _n_ &ge; _len_, return -1.
3372433722
1. If _n_ &ge; 0, then
33725-
1. If _n_ is *-0*, let _k_ be *+0*; else let _k_ be _n_.
33723+
1. Let _k_ be _n_.
3372633724
1. Else,
3372733725
1. Let _k_ be _len_ + _n_.
3372833726
1. If _k_ &lt; 0, set _k_ to 0.
@@ -33789,7 +33787,7 @@ <h1>Array.prototype.lastIndexOf ( _searchElement_ [ , _fromIndex_ ] )</h1>
3378933787
1. If _len_ is 0, return -1.
3379033788
1. If _fromIndex_ is present, let _n_ be ? ToInteger(_fromIndex_); else let _n_ be _len_ - 1.
3379133789
1. If _n_ &ge; 0, then
33792-
1. If _n_ is *-0*, let _k_ be *+0*; else let _k_ be min(_n_, _len_ - 1).
33790+
1. Let _k_ be min(_n_, _len_ - 1).
3379333791
1. Else,
3379433792
1. Let _k_ be _len_ + _n_.
3379533793
1. Repeat, while _k_ &ge; 0

0 commit comments

Comments
 (0)