In 11.6.1.2 "Static Semantics: StringValue",
step 1 says:
Return the String value consisting of the sequence of code units
corresponding to IdentifierName. In determining the sequence any
occurrences of \ UnicodeEscapeSequence are first replaced with the code
point represented by the UnicodeEscapeSequence and then the code points
of the entire IdentifierName are converted to code units by UTF16Encoding
(10.1.1) each code point.
This step is fairly informal. For consistency, you could change the section body to something like:
IdentifierName :: IdentifierStart
1. Return the StringValue of IdentifierStart.
IdentifierName :: IdentifierName IdentifierPart
1. Return the result of concatenating the StringValue of IdentifierName
and the StringValue of IdentifierPart.
IdentifierStart ::
UnicodeIDStart
$
_
IdentifierPart ::
UnicodeIDContinue
$
_
<ZWNJ>
<ZWJ>
1. Return the UTF16Encoding of the code point matched by this production
IdentifierStart :: \ UnicodeEscapeSequence
IdentifierPart :: \ UnicodeEscapeSequence
1. Return SV(UnicodeEscapeSequence).