Skip to content

Commit 7f904dc

Browse files
committed
Editorial: Introduce ResolveBounds
1 parent 7103589 commit 7f904dc

File tree

1 file changed

+33
-8
lines changed

1 file changed

+33
-8
lines changed

spec.emu

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,36 @@ shortname: <a href="https://github.com/tc39/proposal-immutable-arraybuffer"&g
1111
contributors: Mark S. Miller, Richard Gibson
1212
</pre>
1313

14+
<emu-clause id="sec-operations-on-objects" number="7">
15+
<h1>Operations on Objects</h1>
16+
17+
<ins class="block">
18+
19+
<emu-clause id="sec-resolvebounds" type="abstract operation">
20+
<h1>
21+
ResolveBounds (
22+
_len_: an integer,
23+
_start_: an ECMAScript language value,
24+
_end_: an ECMAScript language value,
25+
): either a normal completion containing a Record with fields [[From]] (a non-negative integer) and [[To]] (a non-negative integer) or a throw completion
26+
</h1>
27+
<dl class="header">
28+
</dl>
29+
<emu-alg>
30+
1. Let _relativeStart_ be ? ToIntegerOrInfinity(_start_).
31+
1. If _relativeStart_ = -∞, let _from_ be 0.
32+
1. Else if _relativeStart_ &lt; 0, let _from_ be max(_len_ + _relativeStart_, 0).
33+
1. Else, let _from_ be min(_relativeStart_, _len_).
34+
1. If _end_ is *undefined*, let _relativeEnd_ be _len_; else let _relativeEnd_ be ? ToIntegerOrInfinity(_end_).
35+
1. If _relativeEnd_ = -∞, let _to_ be 0.
36+
1. Else if _relativeEnd_ &lt; 0, let _to_ be max(_len_ + _relativeEnd_, 0).
37+
1. Else, let _to_ be min(_relativeEnd_, _len_).
38+
1. Return the Record { [[From]]: _from_, [[To]]: _to_ }.
39+
</emu-alg>
40+
</emu-clause>
41+
</ins>
42+
</emu-clause>
43+
1444
<emu-clause id="sec-ordinary-and-exotic-objects-behaviours" number="10">
1545
<h1>Ordinary and Exotic Objects Behaviours</h1>
1646

@@ -633,14 +663,9 @@ contributors: Mark S. Miller, Richard Gibson
633663
1. If IsSharedArrayBuffer(_O_) is *true*, throw a *TypeError* exception.
634664
1. If IsDetachedBuffer(_O_) is *true*, throw a *TypeError* exception.
635665
1. Let _len_ be _O_.[[ArrayBufferByteLength]].
636-
1. Let _relativeStart_ be ? ToIntegerOrInfinity(_start_).
637-
1. If _relativeStart_ = -∞, let _first_ be 0.
638-
1. Else if _relativeStart_ &lt; 0, let _first_ be max(_len_ + _relativeStart_, 0).
639-
1. Else, let _first_ be min(_relativeStart_, _len_).
640-
1. If _end_ is *undefined*, let _relativeEnd_ be _len_; else let _relativeEnd_ be ? ToIntegerOrInfinity(_end_).
641-
1. If _relativeEnd_ = -∞, let _final_ be 0.
642-
1. Else if _relativeEnd_ &lt; 0, let _final_ be max(_len_ + _relativeEnd_, 0).
643-
1. Else, let _final_ be min(_relativeEnd_, _len_).
666+
1. Let _bounds_ be ? ResolveBounds(_len_, _start_, _end_).
667+
1. Let _first_ be _bounds_.[[From]].
668+
1. Let _final_ be _bounds_.[[To]].
644669
1. Let _newLen_ be max(_final_ - _first_, 0).
645670
1. Let _ctor_ be ? SpeciesConstructor(_O_, %ArrayBuffer%).
646671
1. Let _new_ be ? Construct(_ctor_, « 𝔽(_newLen_) »).

0 commit comments

Comments
 (0)