@@ -36135,6 +36135,94 @@ <h1>Runtime Semantics: CompileToCharSet</h1>
3613536135 <p>A `-` character can be treated literally or it can denote a range. It is treated literally if it is the first or last character of |ClassRanges|, the beginning or end limit of a range specification, or immediately follows a range specification.</p>
3613636136 </emu-note>
3613736137
36138+ <!-- ClassUnion -->
36139+ <emu-grammar>ClassUnion :: ClassRange ClassUnion?</emu-grammar>
36140+ <emu-alg>
36141+ 1. Let _A_ be CompileToCharSet of |ClassRange|.
36142+ 1. If |ClassUnion| is present, then
36143+ 1. Let _B_ be CompileToCharSet of |ClassUnion|.
36144+ 1. Return the union of CharSets _A_ and _B_.
36145+ 1. Return _A_.
36146+ </emu-alg>
36147+ <emu-grammar>ClassUnion :: ClassOperand ClassUnion?</emu-grammar>
36148+ <emu-alg>
36149+ 1. Let _A_ be CompileToCharSet of |ClassRange|.
36150+ 1. If |ClassUnion| is present, then
36151+ 1. Let _B_ be CompileToCharSet of |ClassUnion|.
36152+ 1. Return the union of CharSets _A_ and _B_.
36153+ 1. Return _A_.
36154+ </emu-alg>
36155+
36156+ <!-- ClassIntersection -->
36157+ <emu-grammar>ClassIntersection :: ClassOperand `&&` ClassOperand</emu-grammar>
36158+ <emu-alg>
36159+ 1. Let _A_ be CompileToCharSet of the first |ClassOperand|.
36160+ 1. Let _B_ be CompileToCharSet of the second |ClassOperand|.
36161+ 1. Return the intersection of CharSets _A_ and _B_.
36162+ </emu-alg>
36163+ <emu-grammar>ClassIntersection :: ClassIntersection `&&` ClassOperand</emu-grammar>
36164+ <emu-alg>
36165+ 1. Let _A_ be CompileToCharSet of the |ClassIntersection|.
36166+ 1. Let _B_ be CompileToCharSet of the |ClassOperand|.
36167+ 1. Return the intersection of CharSets _A_ and _B_.
36168+ </emu-alg>
36169+
36170+ <!-- ClassSubtraction -->
36171+ <emu-grammar>ClassSubtraction :: ClassOperand `--` ClassOperand</emu-grammar>
36172+ <emu-alg>
36173+ 1. Let _A_ be CompileToCharSet of the first |ClassOperand|.
36174+ 1. Let _B_ be CompileToCharSet of the second |ClassOperand|.
36175+ 1. Return the subtraction of CharSets _A_ and _B_.
36176+ </emu-alg>
36177+ <emu-grammar>ClassSubtraction :: ClassSubtraction `--` ClassOperand</emu-grammar>
36178+ <emu-alg>
36179+ 1. Let _A_ be CompileToCharSet of the |ClassSubtraction|.
36180+ 1. Let _B_ be CompileToCharSet of the |ClassOperand|.
36181+ 1. Return the subtraction of CharSets _A_ and _B_.
36182+ </emu-alg>
36183+
36184+ <!-- ClassOperand -->
36185+ <emu-grammar>ClassOperand :: ClassCharacter</emu-grammar>
36186+ <emu-alg>
36187+ 1. Let _A_ be CompileToCharSet of |ClassCharacter|.
36188+ 1. Return ! MaybeSimpleCaseFolding(_A_).
36189+ </emu-alg>
36190+ <emu-grammar>ClassOperand :: ClassStrings</emu-grammar>
36191+ <emu-alg>
36192+ 1. Let _A_ be CompileToCharSet of |ClassStrings|.
36193+ 1. Return ! MaybeSimpleCaseFolding(_A_).
36194+ </emu-alg>
36195+ <emu-grammar>ClassOperand :: NestedClass</emu-grammar>
36196+ <emu-alg>
36197+ 1. Return CompileToCharSet of |NestedClass|.
36198+ </emu-alg>
36199+
36200+ <!-- ClassOperand -->
36201+ <emu-grammar>NestedClass :: `[` ClassRanges `]`</emu-grammar>
36202+ <emu-alg>
36203+ 1. Return CompileToCharSet of |ClassRanges|.
36204+ </emu-alg>
36205+ <emu-grammar>NestedClass :: `[` `^` ClassRanges `]`</emu-grammar>
36206+ <emu-alg>
36207+ 1. Let _A_ be CompileToCharSet of |ClassRanges|.
36208+ 1. Return the CharSet containing all characters not in _A_.
36209+ </emu-alg>
36210+ <emu-grammar>NestedClass :: `\` CharacterClassEscape</emu-grammar>
36211+ <emu-alg>
36212+ 1. Return CompileToCharSet of |CharacterClassEscape|.
36213+ </emu-alg>
36214+
36215+ <!-- ClassRange -->
36216+ <emu-grammar>ClassRange :: ClassCharacter `-` ClassCharacter</emu-grammar>
36217+ <emu-alg>
36218+ 1. Let _A_ be CompileToCharSet of the first |ClassCharacter|.
36219+ 1. Let _B_ be CompileToCharSet of the first |ClassCharacter|.
36220+ 1. Return ! MaybeSimpleCaseFolding(! CharacterRange(_A, B_)).
36221+ </emu-alg>
36222+ <emu-note>
36223+ <p>The result will often consist of two or more ranges. When UnicodeSets is *true* and IgnoreCase is *true*, then MaybeSimpleCaseFolding([Ā-č]) will include only the odd-numbered code points of that range.</p>
36224+ </emu-note>
36225+
3613836226 <!-- ClassAtom -->
3613936227 <emu-grammar>ClassAtom :: `-`</emu-grammar>
3614036228 <emu-alg>
@@ -36222,206 +36310,67 @@ <h1>Runtime Semantics: CompileToCharSet</h1>
3622236310 1. Return ! MaybeSimpleCaseFolding(_A_).
3622336311 </emu-alg>
3622436312
36225- <emu-clause id="sec-classcontents">
36226- <h1>ClassContents</h1>
36227- <p>The production <emu-grammar>ClassContents :: ClassUnion</emu-grammar> evaluates as follows:</p>
36228- <emu-alg>
36229- 1. Return the CharSet that is the result of evaluating |ClassUnion|.
36230- </emu-alg>
36231- <p>The production <emu-grammar>ClassContents :: ClassIntersection</emu-grammar> evaluates as follows:</p>
36232- <emu-alg>
36233- 1. Return the CharSet that is the result of evaluating |ClassIntersection|.
36234- </emu-alg>
36235- <p>The production <emu-grammar>ClassContents :: ClassSubtraction</emu-grammar> evaluates as follows:</p>
36236- <emu-alg>
36237- 1. Return the CharSet that is the result of evaluating |ClassSubtraction|.
36238- </emu-alg>
36239- </emu-clause>
36240-
36241- <emu-clause id="sec-classunion">
36242- <h1>ClassUnion</h1>
36243- <p>The production <emu-grammar>ClassUnion :: ClassRange ClassUnion?</emu-grammar> evaluates as follows:</p>
36244- <emu-alg>
36245- 1. Evaluate |ClassRange| to obtain a CharSet _A_.
36246- 1. If |ClassUnion| is present, then
36247- 1. Evaluate |ClassUnion| to obtain a CharSet _B_.
36248- 1. Return the union of CharSets _A_ and _B_.
36249- 1. Return _A_.
36250- </emu-alg>
36251- <p>The production <emu-grammar>ClassUnion :: ClassOperand ClassUnion?</emu-grammar> evaluates as follows:</p>
36252- <emu-alg>
36253- 1. Evaluate |ClassOperand| to obtain a CharSet _A_.
36254- 1. If |ClassUnion| is present, then
36255- 1. Evaluate |ClassUnion| to obtain a CharSet _B_.
36256- 1. Return the union of CharSets _A_ and _B_.
36257- 1. Return _A_.
36258- </emu-alg>
36259- </emu-clause>
36260-
36261- <emu-clause id="sec-classintersection">
36262- <h1>ClassIntersection</h1>
36263- <p>The production <emu-grammar>ClassIntersection :: ClassOperand `&&` [lookahead != `&] ClassOperand</emu-grammar> evaluates as follows:</p>
36264- <emu-alg>
36265- 1. Evaluate the first |ClassOperand| to obtain a CharSet _A_.
36266- 1. Evaluate the second |ClassOperand| to obtain a CharSet _B_.
36267- 1. Return the intersection of CharSets _A_ and _B_.
36268- </emu-alg>
36269- <p>The production <emu-grammar>ClassIntersection :: ClassIntersection `&&` [lookahead != `&] ClassOperand</emu-grammar> evaluates as follows:</p>
36270- <emu-alg>
36271- 1. Evaluate the |ClassIntersection| to obtain a CharSet _A_.
36272- 1. Evaluate the |ClassOperand| to obtain a CharSet _B_.
36273- 1. Return the intersection of CharSets _A_ and _B_.
36274- </emu-alg>
36275- </emu-clause>
36276-
36277- <emu-clause id="sec-classsubtraction">
36278- <h1>ClassSubtraction</h1>
36279- <p>The production <emu-grammar>ClassSubtraction :: ClassOperand `--` ClassOperand</emu-grammar> evaluates as follows:</p>
36280- <emu-alg>
36281- 1. Evaluate the first |ClassOperand| to obtain a CharSet _A_.
36282- 1. Evaluate the second |ClassOperand| to obtain a CharSet _B_.
36283- 1. Return the subtraction of CharSet _A_ minus CharSet _B_.
36284- </emu-alg>
36285- <p>The production <emu-grammar>ClassSubtraction :: ClassSubtraction `--` ClassOperand</emu-grammar> evaluates as follows:</p>
36286- <emu-alg>
36287- 1. Evaluate the |ClassSubtraction| to obtain a CharSet _A_.
36288- 1. Evaluate the |ClassOperand| to obtain a CharSet _B_.
36289- 1. Return the subtraction of CharSet _A_ minus CharSet _B_.
36290- </emu-alg>
36291- </emu-clause>
36292-
36293- <emu-clause id="sec-classoperand">
36294- <h1>ClassOperand</h1>
36295- <p>The production <emu-grammar>ClassOperand :: ClassCharacter</emu-grammar> evaluates as follows:</p>
36296- <emu-alg>
36297- 1. Evaluate the |ClassCharacter| to obtain a CharSet _A_.
36298- 1. Return ! MaybeSimpleCaseFolding(_A_).
36299- </emu-alg>
36300- <p>The production <emu-grammar>ClassOperand :: ClassStrings</emu-grammar> evaluates as follows:</p>
36301- <emu-alg>
36302- 1. Evaluate the |ClassStrings| to obtain a CharSet _A_.
36303- 1. Return ! MaybeSimpleCaseFolding(_A_).
36304- </emu-alg>
36305- <p>The production <emu-grammar>ClassOperand :: NestedClass</emu-grammar> evaluates as follows:</p>
36306- <emu-alg>
36307- 1. Return the CharSet that is the result of evaluating |NestedClass|.
36308- </emu-alg>
36309- </emu-clause>
36310-
36311- <emu-clause id="sec-nestedclass">
36312- <h1>NestedClass</h1>
36313- <p>The production <emu-grammar>NestedClass :: `[` [lookahead != `^`] ClassRanges[+UnicodeMode, +UnicodeSetsMode] `]`</emu-grammar> evaluates as follows:</p>
36314- <emu-alg>
36315- 1. Return the CharSet that is the result of evaluating |ClassRanges|.
36316- </emu-alg>
36317- <p>The production <emu-grammar>NestedClass :: `[` `^` ClassRanges[+UnicodeMode, +UnicodeSetsMode] `]`</emu-grammar> evaluates as follows:</p>
36318- <emu-alg>
36319- 1. Let _A_ be the CharSet that is the result of evaluating |ClassRanges|.
36320- 1. Return the CharSet containing all characters not in _A_.
36321- </emu-alg>
36322- <p>The production <emu-grammar>NestedClass :: `\` CharacterClassEscape</emu-grammar> evaluates as follows:</p>
36323- <emu-alg>
36324- 1. Return the CharSet that is the result of evaluating |CharacterClassEscape|.
36325- </emu-alg>
36326- </emu-clause>
36327-
36328- <emu-clause id="sec-classrange">
36329- <h1>ClassRange</h1>
36330- <p>The production <emu-grammar>ClassRange :: ClassCharacter `-` ClassCharacter</emu-grammar> evaluates as follows:</p>
36331- <emu-alg>
36332- 1. Evaluate the first |ClassCharacter| to obtain a CharSet _A_.
36333- 1. Evaluate the second |ClassCharacter| to obtain a CharSet _B_.
36334- 1. Return ! MaybeSimpleCaseFolding(! CharacterRange(_A, B_)).
36335- </emu-alg>
36336- <emu-note>
36337- <p>The result will often consist of two or more ranges. When UnicodeSets is *true* and IgnoreCase is *true*, then MaybeSimpleCaseFolding([Ā-č]) will include only the odd-numbered code points of that range.</p>
36338- </emu-note>
36339- </emu-clause>
36340-
36341- <emu-clause id="sec-classcharacter">
36342- <h1>ClassCharacter</h1>
36343- <p>The |ClassCharacter| productions evaluate as follows:</p>
36313+ <!-- ClassCharacter -->
3634436314 <emu-grammar>
36345- ClassCharacter :: [lookahead ∉ ClassReservedDouble] SourceCharacter but not ClassSyntaxCharacter
36315+ ClassCharacter :: SourceCharacter but not ClassSyntaxCharacter
3634636316
3634736317 ClassCharacter :: `\` CharacterEscape
3634836318
3634936319 ClassCharacter :: `\` ClassAllowEscaped
36350-
3635136320 </emu-grammar>
3635236321 <emu-alg>
3635336322 1. Let _cv_ be the CharacterValue of this |ClassCharacter|.
3635436323 1. Let _c_ be the character whose character value is _cv_.
3635536324 1. Return the CharSet containing the single character _c_.
3635636325 </emu-alg>
36357- <p>The production < emu-grammar>ClassCharacter :: `\` `b`</emu-grammar> evaluates as follows:</p >
36326+ <emu-grammar>ClassCharacter :: `\` `b`</emu-grammar>
3635836327 <emu-alg>
3635936328 1. Return the CharSet containing the single character U+0008 (BACKSPACE).
3636036329 </emu-alg>
36361- </emu-clause>
3636236330
36363- <emu-clause id="sec-classranges">
36364- <h1>ClassRanges</h1>
36365- <p>The production <emu-grammar>ClassRanges :: [empty]</emu-grammar> evaluates as follows:</p>
36331+ <!-- ClassStrings -->
36332+ <emu-grammar>ClassStrings :: `(` ClassString MoreClassStrings? `)`</emu-grammar>
3636636333 <emu-alg>
36367- 1. Return the empty CharSet.
36368- </emu-alg>
36369- <p>The production <emu-grammar>ClassRanges :: NonemptyClassRanges</emu-grammar> evaluates as follows:</p>
36370- <emu-alg>
36371- 1. Return the CharSet that is the result of evaluating |NonemptyClassRanges|.
36372- </emu-alg>
36373- <p>The production <emu-grammar>ClassRanges :: ClassContents</emu-grammar> evaluates as follows:</p>
36374- <emu-alg>
36375- 1. Return the CharSet that is the result of evaluating |ClassContents|.
36376- </emu-alg>
36377- </emu-clause>
36378-
36379- <emu-clause id="sec-classstrings">
36380- <h1>ClassStrings</h1>
36381- <p>The production <emu-grammar>ClassStrings :: `(` ClassString MoreClassStrings? `)`</emu-grammar> evaluates as follows:</p>
36382- <emu-alg>
36383- 1. Evaluate |ClassString| to obtain a string _s_.
36334+ 1. Let _s_ be CompileString of |ClassString|.
3638436335 1. Let A be the CharSet that contains the one string _s_.
3638536336 1. If |MoreClassStrings| is present, then
36386- 1. Evaluate |MoreClassStrings| to obtain a CharSet _B_ .
36337+ 1. Let _B_ be CompileToCharSet of |MoreClassStrings| .
3638736338 1. Return the union of CharSets _A_ and _B_.
3638836339 1. Return _A_.
3638936340 </emu-alg>
36390- </emu-clause>
3639136341
36392- <emu-clause id="sec-moreclassstrings">
36393- <h1>MoreClassStrings</h1>
36394- <p>The production <emu-grammar>MoreClassStrings :: `|` ClassString MoreClassStrings?</emu-grammar> evaluates as follows:</p>
36342+ <!-- MoreClassStrings -->
36343+ <emu-grammar>MoreClassStrings :: `|` ClassString MoreClassStrings?</emu-grammar>
3639536344 <emu-alg>
36396- 1. Evaluate |ClassString| to obtain a string _s_ .
36345+ 1. Let _s_ be CompileString of |ClassString| .
3639736346 1. Let _A_ be the CharSet that contains the one string _s_.
3639836347 1. If |MoreClassStrings| is present, then
36399- 1. Evaluate |MoreClassStrings| to obtain a CharSet _B_ .
36348+ 1. Let _B_ be CompileToCharSet of |MoreClassStrings| .
3640036349 1. Return the union of CharSets _A_ and _B_.
3640136350 1. Return _A_.
3640236351 </emu-alg>
3640336352 </emu-clause>
3640436353
36405- <emu-clause id="sec-classstring">
36406- <h1>ClassString</h1>
36407- <p>The production <emu-grammar>ClassString :: [empty]</emu-grammar> evaluates as follows:</p>
36354+ <emu-clause id="sec-compilestring" type="sdo">
36355+ <h1>Runtime Semantics: CompileString</h1>
36356+ <dl class="header">
36357+ <dt>description</dt>
36358+ <dd>It returns a string.</dd>
36359+ </dl>
36360+
36361+ <emu-grammar>ClassString :: [empty]</emu-grammar>
3640836362 <emu-alg>
3640936363 1. Return the empty String.
3641036364 </emu-alg>
36411- <p>The production < emu-grammar>ClassString :: NonEmptyClassString</emu-grammar> evaluates as follows:</p >
36365+ <emu-grammar>ClassString :: NonEmptyClassString</emu-grammar>
3641236366 <emu-alg>
36413- 1. Evaluate |NonEmptyClassString| to obtain a string _s_.
36414- 1. Return _s_.
36367+ 1. Return CompileString of |NonEmptyClassString|.
3641536368 </emu-alg>
36416- </emu-clause>
36417-
36418- <emu-clause id="sec-nonemptyclassstring">
36419- <h1>NonEmptyClassString</h1>
36420- <p>The production <emu-grammar>NonEmptyClassString :: ClassCharacter NonEmptyClassString?</emu-grammar> evaluates as follows:</p>
36369+ <emu-grammar>NonEmptyClassString :: ClassCharacter NonEmptyClassString?</emu-grammar>
3642136370 <emu-alg>
36422- 1. Evaluate |ClassCharacter| to obtain the single-character string _s1_ .
36371+ 1. Let _s1_ be CompileToCharSet of |ClassCharacter| .
3642336372 1. If |NonEmptyClassString| is present, then
36424- 1. Evaluate |NonEmptyClassString| to obtain a string _s2_ .
36373+ 1. Let _s2_ be CompileString of |NonEmptyClassString| .
3642536374 1. Return the string that is the concatenation of _s1_ with _s2_.
3642636375 1. Return _s1_.
3642736376 </emu-alg>
0 commit comments