Title: [271432] trunk
Revision
271432
Author
[email protected]
Date
2021-01-12 23:04:32 -0800 (Tue, 12 Jan 2021)

Log Message

[JSC] Class name 'await' is valid in sync context
https://bugs.webkit.org/show_bug.cgi?id=220575

Reviewed by Yusuke Suzuki.

JSTests:

* test262/expectations.yaml:
Mark four test cases as passing.

Source/_javascript_Core:

* parser/Parser.cpp:
(JSC::Parser<LexerType>::parseClass):
Check for valid 'await'.

* parser/Parser.h:
(JSC::Parser::isDisallowedIdentifierAwait):
Fix mistake -- we care if the containing function is async, we don't care about being *at* function scope.

Modified Paths

Diff

Modified: trunk/JSTests/ChangeLog (271431 => 271432)


--- trunk/JSTests/ChangeLog	2021-01-13 06:45:41 UTC (rev 271431)
+++ trunk/JSTests/ChangeLog	2021-01-13 07:04:32 UTC (rev 271432)
@@ -1,5 +1,15 @@
 2021-01-12  Ross Kirsling  <[email protected]>
 
+        [JSC] Class name 'await' is valid in sync context
+        https://bugs.webkit.org/show_bug.cgi?id=220575
+
+        Reviewed by Yusuke Suzuki.
+
+        * test262/expectations.yaml:
+        Mark four test cases as passing.
+
+2021-01-12  Ross Kirsling  <[email protected]>
+
         [JSC] Class names must be lexed as strict mode code
         https://bugs.webkit.org/show_bug.cgi?id=220567
 

Modified: trunk/JSTests/test262/expectations.yaml (271431 => 271432)


--- trunk/JSTests/test262/expectations.yaml	2021-01-13 06:45:41 UTC (rev 271431)
+++ trunk/JSTests/test262/expectations.yaml	2021-01-13 07:04:32 UTC (rev 271432)
@@ -1481,9 +1481,6 @@
 test/language/expressions/class/class-name-ident-await-escaped.js:
   default: "SyntaxError: Unexpected escaped characters in keyword token: 'aw\\u0061it'"
   strict mode: "SyntaxError: Unexpected escaped characters in keyword token: 'aw\\u0061it'"
-test/language/expressions/class/class-name-ident-await.js:
-  default: "SyntaxError: Unexpected identifier 'await'. Expected opening '{' at the start of a class body."
-  strict mode: "SyntaxError: Unexpected identifier 'await'. Expected opening '{' at the start of a class body."
 test/language/expressions/class/elements/arrow-body-direct-eval-err-contains-arguments.js:
   default: 'Test262Error: Expected a SyntaxError but got a ReferenceError'
   strict mode: 'Test262Error: Expected a SyntaxError but got a ReferenceError'
@@ -1736,9 +1733,6 @@
 test/language/statements/class/class-name-ident-await-escaped.js:
   default: "SyntaxError: Unexpected escaped characters in keyword token: 'aw\\u0061it'"
   strict mode: "SyntaxError: Unexpected escaped characters in keyword token: 'aw\\u0061it'"
-test/language/statements/class/class-name-ident-await.js:
-  default: "SyntaxError: Unexpected identifier 'await'"
-  strict mode: "SyntaxError: Unexpected identifier 'await'"
 test/language/statements/class/elements/arrow-body-direct-eval-err-contains-arguments.js:
   default: 'Test262Error: Expected a SyntaxError but got a ReferenceError'
   strict mode: 'Test262Error: Expected a SyntaxError but got a ReferenceError'

Modified: trunk/Source/_javascript_Core/ChangeLog (271431 => 271432)


--- trunk/Source/_javascript_Core/ChangeLog	2021-01-13 06:45:41 UTC (rev 271431)
+++ trunk/Source/_javascript_Core/ChangeLog	2021-01-13 07:04:32 UTC (rev 271432)
@@ -1,5 +1,20 @@
 2021-01-12  Ross Kirsling  <[email protected]>
 
+        [JSC] Class name 'await' is valid in sync context
+        https://bugs.webkit.org/show_bug.cgi?id=220575
+
+        Reviewed by Yusuke Suzuki.
+
+        * parser/Parser.cpp:
+        (JSC::Parser<LexerType>::parseClass):
+        Check for valid 'await'.
+
+        * parser/Parser.h:
+        (JSC::Parser::isDisallowedIdentifierAwait):
+        Fix mistake -- we care if the containing function is async, we don't care about being *at* function scope.
+
+2021-01-12  Ross Kirsling  <[email protected]>
+
         [JSC] Class names must be lexed as strict mode code
         https://bugs.webkit.org/show_bug.cgi?id=220567
 

Modified: trunk/Source/_javascript_Core/parser/Parser.cpp (271431 => 271432)


--- trunk/Source/_javascript_Core/parser/Parser.cpp	2021-01-13 06:45:41 UTC (rev 271431)
+++ trunk/Source/_javascript_Core/parser/Parser.cpp	2021-01-13 07:04:32 UTC (rev 271432)
@@ -2860,7 +2860,7 @@
 
     ASSERT_WITH_MESSAGE(requirements != FunctionNameRequirements::Unnamed, "Currently, there is no caller that uses FunctionNameRequirements::Unnamed for class syntax.");
     ASSERT_WITH_MESSAGE(!(requirements == FunctionNameRequirements::None && !info.className), "When specifying FunctionNameRequirements::None, we need to initialize info.className with the default value in the caller side.");
-    if (match(IDENT)) {
+    if (match(IDENT) || (match(AWAIT) && !isDisallowedIdentifierAwait(m_token))) {
         info.className = m_token.m_data.ident;
         next();
         failIfTrue(classScope->declareLexicalVariable(info.className, true) & DeclarationResult::InvalidStrictMode, "'", info.className->impl(), "' is not a valid class name");

Modified: trunk/Source/_javascript_Core/parser/Parser.h (271431 => 271432)


--- trunk/Source/_javascript_Core/parser/Parser.h	2021-01-13 06:45:41 UTC (rev 271431)
+++ trunk/Source/_javascript_Core/parser/Parser.h	2021-01-13 07:04:32 UTC (rev 271432)
@@ -1842,7 +1842,7 @@
 
     bool isDisallowedIdentifierAwait(const JSToken& token)
     {
-        return token.m_type == AWAIT && (!m_parserState.allowAwait || currentScope()->isAsyncFunctionBoundary() || m_scriptMode == JSParserScriptMode::Module);
+        return token.m_type == AWAIT && (!m_parserState.allowAwait || currentScope()->isAsyncFunction() || m_scriptMode == JSParserScriptMode::Module);
     }
 
     bool isDisallowedIdentifierYield(const JSToken& token)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to