[JSC] add additional bit to JSTokenType bitfield
authorcaitp@igalia.com <caitp@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 3 Dec 2016 03:39:42 +0000 (03:39 +0000)
committercaitp@igalia.com <caitp@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 3 Dec 2016 03:39:42 +0000 (03:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=165091

Reviewed by Geoffrey Garen.

JSTests:

* stress/bug-165091.js: Added.
(shouldThrowSyntaxError):

Source/JavaScriptCore:

Avoid overflow which causes keyword tokens to be treated as unary
tokens now that "async" is tokenized as a keyword, by granting an
additional 64 bits to be occupied by token IDs.

* parser/ParserTokens.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@209293 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JSTests/ChangeLog
JSTests/stress/bug-165091.js [new file with mode: 0644]
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/parser/ParserTokens.h

index f1615a8..97b9a26 100644 (file)
@@ -1,3 +1,13 @@
+2016-12-02  Caitlin Potter  <caitp@igalia.com>
+
+[JSC] add additional bit to JSTokenType bitfield
+        https://bugs.webkit.org/show_bug.cgi?id=165091
+
+        Reviewed by Geoffrey Garen.
+
+        * stress/bug-165091.js: Added.
+        (shouldThrowSyntaxError):
+
 2016-12-02  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r209275 and r209276.
 2016-12-02  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r209275 and r209276.
diff --git a/JSTests/stress/bug-165091.js b/JSTests/stress/bug-165091.js
new file mode 100644 (file)
index 0000000..499319e
--- /dev/null
@@ -0,0 +1,13 @@
+function shouldThrowSyntaxError(str, message) {
+    try {
+        eval(str);
+        throw new Error("Expected `" + str + "` to throw a SyntaxError, but did not throw.")
+    } catch (e) {
+        if (e.constructor !== SyntaxError)
+            throw new Error("Expected `" + str + "` to throw a SyntaxError, but threw '" + e + "'");
+        if (message !== void 0 && e.message !== message)
+            throw new Error("Expected `" + str + "` to throw SyntaxError: '" + message + "', but threw '" + e + "'");
+    }
+}
+
+shouldThrowSyntaxError("0/-async J", "SyntaxError: Cannot parse member expression.")
\ No newline at end of file
index 5bffe06..1062cb1 100644 (file)
@@ -1,3 +1,16 @@
+2016-12-02  Caitlin Potter  <caitp@igalia.com>
+
+[JSC] add additional bit to JSTokenType bitfield
+        https://bugs.webkit.org/show_bug.cgi?id=165091
+
+        Reviewed by Geoffrey Garen.
+
+        Avoid overflow which causes keyword tokens to be treated as unary
+        tokens now that "async" is tokenized as a keyword, by granting an
+        additional 64 bits to be occupied by token IDs.
+
+        * parser/ParserTokens.h:
+
 2016-12-02  Andy Estes  <aestes@apple.com>
 
         [Cocoa] Adopt the PRODUCT_BUNDLE_IDENTIFIER build setting
 2016-12-02  Andy Estes  <aestes@apple.com>
 
         [Cocoa] Adopt the PRODUCT_BUNDLE_IDENTIFIER build setting
index 904308f..c270a8c 100644 (file)
@@ -34,9 +34,17 @@ namespace JSC {
 class Identifier;
 
 enum {
 class Identifier;
 
 enum {
-    UnaryOpTokenFlag = 64,
-    KeywordTokenFlag = 128,
-    BinaryOpTokenPrecedenceShift = 8,
+    // Token Bitfield: 0b000000000RTEIIIIIIIIPPPPKUXXXXXX
+    // R = right-associative bit
+    // T = unterminated error flag
+    // E = error flag
+    // I = binary operator allows 'in'
+    // P = binary operator precedence
+    // K = keyword flag
+    // U = unary operator flag
+    UnaryOpTokenFlag = 128,
+    KeywordTokenFlag = 256,
+    BinaryOpTokenPrecedenceShift = 9,
     BinaryOpTokenAllowsInPrecedenceAdditionalShift = 4,
     BinaryOpTokenPrecedenceMask = 15 << BinaryOpTokenPrecedenceShift,
     ErrorTokenFlag = 1 << (BinaryOpTokenAllowsInPrecedenceAdditionalShift + BinaryOpTokenPrecedenceShift + 7),
     BinaryOpTokenAllowsInPrecedenceAdditionalShift = 4,
     BinaryOpTokenPrecedenceMask = 15 << BinaryOpTokenPrecedenceShift,
     ErrorTokenFlag = 1 << (BinaryOpTokenAllowsInPrecedenceAdditionalShift + BinaryOpTokenPrecedenceShift + 7),
@@ -82,6 +90,7 @@ enum JSTokenType {
     SUPER,
 
     // Contextual keywords
     SUPER,
 
     // Contextual keywords
+    
     LET,
     YIELD,
     AWAIT,
     LET,
     YIELD,
     AWAIT,