You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<li>If the sequence of tokens can be parsed as a single instance of _n_, with no tokens left over, then:
674
674
<ol>
675
675
<li>We refer to that instance of _n_ (a Parse Node, unique for a given _p_) as “the _n_ that is <dfn>covered</dfn> by _p_”.</li>
676
-
<li>Early error rules are applied to the _n_ that is covered by _p_ and to its descendants, as modified by further cases of "must cover".</li>
676
+
<li>Early error rules are applied to the _n_ that is covered by _p_ and to its descendants, as modified by further cases of “must cover”.</li>
677
677
</ol>
678
678
</li>
679
679
<li>Otherwise (if the parse fails), it is an early Syntax Error.</li>
@@ -1248,7 +1248,7 @@ <h1>The String Type</h1>
1248
1248
<p>The rationale behind this design was to keep the implementation of Strings as simple and high-performing as possible. If ECMAScript source text is in Normalized Form C, string literals are guaranteed to also be normalized, as long as they do not contain any Unicode escape sequences.</p>
1249
1249
</emu-note>
1250
1250
<p>In this specification, the phrase “the <dfn id="string-concatenation">string-concatenation</dfn> of _A_, _B_, ...” (where each argument is a String value, a code unit, or a sequence of code units) denotes the String value whose sequence of code units is the concatenation of the code units (in order) of each of the arguments (in order).</p>
1251
-
<p>The phrase “the <dfn id="substring">substring</dfn> of _string_ from _inclusiveStart_ to _exclusiveEnd_” (where _string_ is a String value or a sequence of code units and _inclusiveStart_ and _exclusiveEnd_ are integers) denotes the String value consisting of the consecutive code units of _string_ beginning at index _inclusiveStart_ and ending immediately before index _exclusiveEnd_ (which is the empty String when _inclusiveStart_ = _exclusiveEnd_). If the "to" suffix is omitted, the length of _string_ is used as the value of _exclusiveEnd_.</p>
1251
+
<p>The phrase “the <dfn id="substring">substring</dfn> of _string_ from _inclusiveStart_ to _exclusiveEnd_” (where _string_ is a String value or a sequence of code units and _inclusiveStart_ and _exclusiveEnd_ are integers) denotes the String value consisting of the consecutive code units of _string_ beginning at index _inclusiveStart_ and ending immediately before index _exclusiveEnd_ (which is the empty String when _inclusiveStart_ = _exclusiveEnd_). If the “to” suffix is omitted, the length of _string_ is used as the value of _exclusiveEnd_.</p>
1252
1252
<p>
1253
1253
The phrase “<dfn id="ASCII-word-characters">the ASCII word characters</dfn>” denotes the following String value, which consists solely of every letter and number in the Unicode Basic Latin block along with U+005F (LOW LINE):<br>
@@ -19036,7 +19036,7 @@ <h1>Static Semantics: Early Errors</h1>
19036
19036
</ul>
19037
19037
<emu-note>
19038
19038
<p>Elsewhere in this specification, there are early error rules that, under certain circumstances, require that a |LeftHandSideExpression| must cover an |AssignmentPattern|. Consequently, |ObjectLiteral| serves as a cover grammar for |ObjectAssignmentPattern|. The |CoverInitializedName| production is necessary to fully cover |AssignmentProperty|, but is not valid within an actual object initializer.</p>
19039
-
<p>Specifically, in a context where an actual |ObjectLiteral| is expected, the above early error rule prevents the use of |CoverInitializedName|. But in cases where |ObjectLiteral| is used as a cover grammar, the semantics of "must cover" state that the Parse Nodes within the |ObjectLiteral| are not subject to early error rules, and so |CoverInitializedName| is allowed.</p>
19039
+
<p>Specifically, in a context where an actual |ObjectLiteral| is expected, the above early error rule prevents the use of |CoverInitializedName|. But in cases where |ObjectLiteral| is used as a cover grammar, the semantics of “must cover” state that the Parse Nodes within the |ObjectLiteral| are not subject to early error rules, and so |CoverInitializedName| is allowed.</p>
19040
19040
<p>For example, consider:</p>
19041
19041
<pre><code class="javascript">
19042
19042
let o = {f = 1};
@@ -38645,10 +38645,17 @@ <h1>
38645
38645
1. If _regexpRecord_.[[UnicodeSets]] is *false* or every CharSetElement of _cs_ consists of a single character (including if _cs_ is empty), return CharacterSetMatcher(_regexpRecord_, _cs_, _cc_.[[Invert]], _direction_).
38646
38646
1. Assert: _cc_.[[Invert]] is *false*.
38647
38647
1. Let _listOfMatchers_ be an empty List of Matchers.
38648
-
1. For each CharSetElement _s_ in _cs_ containing more than 1 character, iterating in descending order of length, do
38649
-
1. Let _cs2_ be a one-element CharSet containing the last code point of _s_.
38648
+
1. Let _csSequences_ be a new empty List.
38649
+
1. For each CharSetElement _s_ of _cs_, do
38650
+
1. If the length of _s_ > 1, append _s_ to _csSequences_.
38651
+
1. Sort _csSequences_ according to the length of each CharSetElement in descending order.
38652
+
1. For each CharSetElement _s_ of _csSequences_, do
38653
+
1. Assert: _s_ is a sequence of 2 or more code points.
38654
+
1. Let _remaining_ be a List consisting of the code points of _s_.
38655
+
1. Let _cs2_ be a one-element CharSet containing the last element of _remaining_.
38650
38656
1. Let _m2_ be CharacterSetMatcher(_regexpRecord_, _cs2_, *false*, _direction_).
38651
-
1. For each code point _c1_ in _s_, iterating backwards from its second-to-last code point, do
38657
+
1. Remove the last element of _remaining_.
38658
+
1. For each code point _c1_ of _remaining_, in reverse List order, do
38652
38659
1. Let _cs1_ be a one-element CharSet containing _c1_.
38653
38660
1. Let _m1_ be CharacterSetMatcher(_regexpRecord_, _cs1_, *false*, _direction_).
38654
38661
1. Set _m2_ to MatchSequence(_m1_, _m2_, _direction_).
@@ -38726,10 +38733,17 @@ <h1>
38726
38733
1. Let _cs_ be CompileToCharSet of |CharacterClassEscape| with argument _regexpRecord_.
38727
38734
1. If _regexpRecord_.[[UnicodeSets]] is *false* or every CharSetElement of _cs_ consists of a single character (including if _cs_ is empty), return CharacterSetMatcher(_regexpRecord_, _cs_, *false*, _direction_).
38728
38735
1. Let _listOfMatchers_ be an empty List of Matchers.
38729
-
1. For each CharSetElement _s_ in _cs_ containing more than 1 character, iterating in descending order of length, do
38730
-
1. Let _cs2_ be a one-element CharSet containing the last code point of _s_.
38736
+
1. Let _csSequences_ be a new empty List.
38737
+
1. For each CharSetElement _s_ of _cs_, do
38738
+
1. If the length of _s_ > 1, append _s_ to _csSequences_.
38739
+
1. Sort _csSequences_ according to the length of each CharSetElement in descending order.
38740
+
1. For each CharSetElement _s_ of _csSequences_, do
38741
+
1. Assert: _s_ is a sequence of 2 or more code points.
38742
+
1. Let _remaining_ be a List consisting of the code points of _s_.
38743
+
1. Let _cs2_ be a one-element CharSet containing the last element of _remaining_.
38731
38744
1. Let _m2_ be CharacterSetMatcher(_regexpRecord_, _cs2_, *false*, _direction_).
38732
-
1. For each code point _c1_ in _s_, iterating backwards from its second-to-last code point, do
38745
+
1. Remove the last element of _remaining_.
38746
+
1. For each code point _c1_ of _remaining_, in reverse List order, do
38733
38747
1. Let _cs1_ be a one-element CharSet containing _c1_.
38734
38748
1. Let _m1_ be CharacterSetMatcher(_regexpRecord_, _cs1_, *false*, _direction_).
38735
38749
1. Set _m2_ to MatchSequence(_m1_, _m2_, _direction_).
@@ -39263,7 +39277,7 @@ <h1>
39263
39277
1. Let _otherSet_ be a new empty CharSet.
39264
39278
1. For each CharSetElement _s_ of _charSet_, do
39265
39279
1. Let _t_ be an empty sequence of characters.
39266
-
1. For each single code point _codePoint_ in _s_, do
39280
+
1. For each single code point _codePoint_ of _s_, do
<p>Invoking this method notifies the AsyncDisposable object that the caller does not intend to continue to use this object. This method should perform any necessary logic to perform explicit clean-up of the resource including, but not limited to, file system handles, streams, host objects, etc. When the promise returned by this method is rejected, it typically means that the resource could not be explicitly freed. An AsyncDisposable object is not considered "disposed" until the resulting Promise has been fulfilled.</p>
50183
+
<p>Invoking this method notifies the AsyncDisposable object that the caller does not intend to continue to use this object. This method should perform any necessary logic to perform explicit clean-up of the resource including, but not limited to, file system handles, streams, host objects, etc. When the promise returned by this method is rejected, it typically means that the resource could not be explicitly freed. An AsyncDisposable object is not considered “disposed” until the resulting Promise has been fulfilled.</p>
50170
50184
<p>Invoking this method more than once on the same object should avoid repeating clean-up logic against the already-disposed resource and should not throw an exception or return a rejected promise, even if an exception was thrown or a rejected promise was returned on the first invocation. However, this requirement is not enforced.</p>
50171
50185
<p>When using an AsyncDisposable object with an `await using` declaration, the resource will be automatically disposed when the |Block| or |Module| immediately containing the declaration has been evaluated.</p>
0 commit comments