From 9448b46fd2a95a6e8b60484397d46a89661cf2ba Mon Sep 17 00:00:00 2001 From: Michael Dyck Date: Wed, 26 May 2021 13:53:08 -0400 Subject: [PATCH] squash: Handle StrictZeroEscapeSequence differently --- spec.html | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/spec.html b/spec.html index 0eb35ec774f..d847205005b 100644 --- a/spec.html +++ b/spec.html @@ -14164,7 +14164,7 @@

Static Semantics: MV

The MV of SignedInteger :: `-` DecimalDigits is the negative of the MV of |DecimalDigits|.
  • - The MV of DecimalDigit :: `0` or of HexDigit :: `0` or of OctalDigit :: `0` or of BinaryDigit :: `0` is 0. + The MV of DecimalDigit :: `0` or of HexDigit :: `0` or of OctalDigit :: `0` or of LegacyOctalEscapeSequence :: `0` or of BinaryDigit :: `0` is 0.
  • The MV of DecimalDigit :: `1` or of NonZeroDigit :: `1` or of HexDigit :: `1` or of OctalDigit :: `1` or of BinaryDigit :: `1` is 1. @@ -14365,6 +14365,7 @@

    Syntax

    EscapeSequence :: CharacterEscapeSequence + `0` [lookahead <! DecimalDigit] LegacyOctalEscapeSequence NonOctalDecimalEscapeSequence HexEscapeSequence @@ -14387,11 +14388,15 @@

    Syntax

    `u` LegacyOctalEscapeSequence :: - OctalDigit [lookahead <! OctalDigit] + `0` [lookahead <- {`8`, `9`}] + NonZeroOctalDigit [lookahead <! OctalDigit] ZeroToThree OctalDigit [lookahead <! OctalDigit] FourToSeven OctalDigit ZeroToThree OctalDigit OctalDigit + NonZeroOctalDigit :: + OctalDigit but not `0` + ZeroToThree :: one of `0` `1` `2` `3` @@ -14416,22 +14421,11 @@

    Syntax

    <LF> and <CR> cannot appear in a string literal, except as part of a |LineContinuation| to produce the empty code points sequence. The proper way to include either in the String value of a string literal is to use an escape sequence such as `\\n` or `\\u000A`.

    -

    Supplemental Syntax

    -

    When processing an instance of the production LegacyOctalEscapeSequence :: OctalDigit the following production is used to refine the interpretation of |LegacyOctalEscapeSequence|.

    - - StrictZeroEscapeSequence :: - `0` [lookahead <! DecimalDigit] - -

    Static Semantics: Early Errors

    EscapeSequence :: LegacyOctalEscapeSequence - -
      -
    • It is a Syntax Error if the source code matching this production is strict mode code and |EscapeSequence| is not covering a |StrictZeroEscapeSequence|.
    • -
    - + EscapeSequence :: NonOctalDecimalEscapeSequence
      @@ -14486,6 +14480,9 @@

      Static Semantics: SV

    • The SV of SingleStringCharacter :: LineContinuation is the empty String.
    • +
    • + The SV of EscapeSequence :: `0` is the String value consisting of the code unit 0x0000 (NULL). +
    • The SV of CharacterEscapeSequence :: SingleEscapeCharacter is the String value consisting of the code unit whose value is determined by the |SingleEscapeCharacter| according to .
    • @@ -41516,15 +41513,13 @@

      Lexical Grammar

      + -

      When processing an instance of the production the following production is used to refine the interpretation of |LegacyOctalEscapeSequence|.

      - -

       

      @@ -43071,7 +43066,7 @@

      The Strict Mode of ECMAScript

      A conforming implementation, when processing strict mode code, must disallow instances of the productions NumericLiteral :: LegacyOctalIntegerLiteral and DecimalIntegerLiteral :: NonOctalDecimalIntegerLiteral.
    • - A conforming implementation, when processing strict mode code, must disallow instances of the production EscapeSequence :: LegacyOctalEscapeSequence that do not cover a |StrictZeroEscapeSequence|, and instances of the production EscapeSequence :: NonOctalDecimalEscapeSequence. + A conforming implementation, when processing strict mode code, must disallow instances of the productions EscapeSequence :: LegacyOctalEscapeSequence and EscapeSequence :: NonOctalDecimalEscapeSequence.
    • Assignment to an undeclared identifier or otherwise unresolvable reference does not create a property in the global object. When a simple assignment occurs within strict mode code, its |LeftHandSideExpression| must not evaluate to an unresolvable Reference. If it does a *ReferenceError* exception is thrown (). The |LeftHandSideExpression| also may not be a reference to a data property with the attribute value { [[Writable]]: *false* }, to an accessor property with the attribute value { [[Set]]: *undefined* }, nor to a non-existent property of an object whose [[Extensible]] internal slot has the value *false*. In these cases a `TypeError` exception is thrown ().