summaryrefslogtreecommitdiffstats
path: root/js/src/frontend/SyntaxParseHandler.h
diff options
context:
space:
mode:
authorGaming4JC <g4jc@hyperbola.info>2019-06-08 13:02:16 -0400
committerGaming4JC <g4jc@hyperbola.info>2019-07-18 22:38:09 -0400
commit5e76f72c539cd0e2fc0d38e4475f494868b5e859 (patch)
tree78046947a2841bd399c60ab283e1e80003ab76b0 /js/src/frontend/SyntaxParseHandler.h
parentbf2610c0cfc96327178a5d3d7121181c2f375f48 (diff)
downloadUXP-5e76f72c539cd0e2fc0d38e4475f494868b5e859.tar
UXP-5e76f72c539cd0e2fc0d38e4475f494868b5e859.tar.gz
UXP-5e76f72c539cd0e2fc0d38e4475f494868b5e859.tar.lz
UXP-5e76f72c539cd0e2fc0d38e4475f494868b5e859.tar.xz
UXP-5e76f72c539cd0e2fc0d38e4475f494868b5e859.zip
1315815 - Don't treat async or await as a keyword when they contain escapes.
Diffstat (limited to 'js/src/frontend/SyntaxParseHandler.h')
-rw-r--r--js/src/frontend/SyntaxParseHandler.h29
1 files changed, 15 insertions, 14 deletions
diff --git a/js/src/frontend/SyntaxParseHandler.h b/js/src/frontend/SyntaxParseHandler.h
index 00ea9d35d..9dc3c1072 100644
--- a/js/src/frontend/SyntaxParseHandler.h
+++ b/js/src/frontend/SyntaxParseHandler.h
@@ -9,6 +9,8 @@
#include "mozilla/Attributes.h"
+#include <string.h>
+
#include "frontend/ParseNode.h"
#include "frontend/TokenStream.h"
@@ -94,10 +96,13 @@ class SyntaxParseHandler
// Nodes representing unparenthesized names.
NodeUnparenthesizedArgumentsName,
- NodeUnparenthesizedAsyncName,
NodeUnparenthesizedEvalName,
NodeUnparenthesizedName,
+ // Node representing the "async" name, which may actually be a
+ // contextual keyword.
+ NodePotentialAsyncKeyword,
+
// Valuable for recognizing potential destructuring patterns.
NodeUnparenthesizedArray,
NodeUnparenthesizedObject,
@@ -183,8 +188,8 @@ class SyntaxParseHandler
lastAtom = name;
if (name == cx->names().arguments)
return NodeUnparenthesizedArgumentsName;
- if (name == cx->names().async)
- return NodeUnparenthesizedAsyncName;
+ if (pos.begin + strlen("async") == pos.end && name == cx->names().async)
+ return NodePotentialAsyncKeyword;
if (name == cx->names().eval)
return NodeUnparenthesizedEvalName;
return NodeUnparenthesizedName;
@@ -497,7 +502,7 @@ class SyntaxParseHandler
return NodeParenthesizedArgumentsName;
if (node == NodeUnparenthesizedEvalName)
return NodeParenthesizedEvalName;
- if (node == NodeUnparenthesizedName || node == NodeUnparenthesizedAsyncName)
+ if (node == NodeUnparenthesizedName || node == NodePotentialAsyncKeyword)
return NodeParenthesizedName;
if (node == NodeUnparenthesizedArray)
@@ -528,9 +533,9 @@ class SyntaxParseHandler
bool isUnparenthesizedName(Node node) {
return node == NodeUnparenthesizedArgumentsName ||
- node == NodeUnparenthesizedAsyncName ||
node == NodeUnparenthesizedEvalName ||
- node == NodeUnparenthesizedName;
+ node == NodeUnparenthesizedName ||
+ node == NodePotentialAsyncKeyword;
}
bool isNameAnyParentheses(Node node) {
@@ -541,9 +546,7 @@ class SyntaxParseHandler
node == NodeParenthesizedName;
}
- bool nameIsEvalAnyParentheses(Node node, ExclusiveContext* cx) {
- MOZ_ASSERT(isNameAnyParentheses(node),
- "must only call this function on known names");
+ bool isEvalAnyParentheses(Node node, ExclusiveContext* cx) {
return node == NodeUnparenthesizedEvalName || node == NodeParenthesizedEvalName;
}
@@ -551,17 +554,15 @@ class SyntaxParseHandler
MOZ_ASSERT(isNameAnyParentheses(node),
"must only call this method on known names");
- if (nameIsEvalAnyParentheses(node, cx))
+ if (isEvalAnyParentheses(node, cx))
return js_eval_str;
if (node == NodeUnparenthesizedArgumentsName || node == NodeParenthesizedArgumentsName)
return js_arguments_str;
return nullptr;
}
- bool nameIsUnparenthesizedAsync(Node node, ExclusiveContext* cx) {
- MOZ_ASSERT(isNameAnyParentheses(node),
- "must only call this function on known names");
- return node == NodeUnparenthesizedAsyncName;
+ bool isAsyncKeyword(Node node, ExclusiveContext* cx) {
+ return node == NodePotentialAsyncKeyword;
}
PropertyName* maybeDottedProperty(Node node) {