Commit 20bf2b7b authored by Joshua Litt's avatar Joshua Litt Committed by Commit Bot

[scanner] Allow escaped keywords to be property names

Bug: v8:9647
Change-Id: Ib6449fadc42130a019788ba3a22e93bfd0de789b
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1803514
Commit-Queue: Joshua Litt <joshualitt@chromium.org>
Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
Cr-Commit-Position: refs/heads/master@{#63796}
parent 7c9c1039
......@@ -444,7 +444,8 @@ class V8_EXPORT_PRIVATE Scanner {
#ifdef DEBUG
bool CanAccessLiteral() const {
return token == Token::PRIVATE_NAME || token == Token::ILLEGAL ||
token == Token::UNINITIALIZED || token == Token::REGEXP_LITERAL ||
token == Token::ESCAPED_KEYWORD || token == Token::UNINITIALIZED ||
token == Token::REGEXP_LITERAL ||
IsInRange(token, Token::NUMBER, Token::STRING) ||
Token::IsAnyIdentifier(token) || Token::IsKeyword(token) ||
IsInRange(token, Token::TEMPLATE_SPAN, Token::TEMPLATE_TAIL);
......@@ -586,15 +587,18 @@ class V8_EXPORT_PRIVATE Scanner {
// token as a one-byte literal. E.g. Token::FUNCTION pretends to have a
// literal "function".
Vector<const uint8_t> literal_one_byte_string() const {
DCHECK(current().CanAccessLiteral() || Token::IsKeyword(current().token));
DCHECK(current().CanAccessLiteral() || Token::IsKeyword(current().token) ||
current().token == Token::ESCAPED_KEYWORD);
return current().literal_chars.one_byte_literal();
}
Vector<const uint16_t> literal_two_byte_string() const {
DCHECK(current().CanAccessLiteral() || Token::IsKeyword(current().token));
DCHECK(current().CanAccessLiteral() || Token::IsKeyword(current().token) ||
current().token == Token::ESCAPED_KEYWORD);
return current().literal_chars.two_byte_literal();
}
bool is_literal_one_byte() const {
DCHECK(current().CanAccessLiteral() || Token::IsKeyword(current().token));
DCHECK(current().CanAccessLiteral() || Token::IsKeyword(current().token) ||
current().token == Token::ESCAPED_KEYWORD);
return current().literal_chars.is_one_byte();
}
// Returns the literal string for the next token (the token that
......
......@@ -34,7 +34,8 @@ const int8_t Token::precedence_[2][NUM_TOKENS] = {{TOKEN_LIST(T1, T1)},
#undef T2
#undef T1
#define KT(a, b, c) IsPropertyNameBits::encode(Token::IsAnyIdentifier(a)),
#define KT(a, b, c) \
IsPropertyNameBits::encode(Token::IsAnyIdentifier(a) || a == ESCAPED_KEYWORD),
#define KK(a, b, c) \
IsKeywordBits::encode(true) | IsPropertyNameBits::encode(true),
const uint8_t Token::token_flags[] = {TOKEN_LIST(KT, KK)};
......
......@@ -545,253 +545,6 @@
'intl402/RelativeTimeFormat/constructor/constructor/locales-valid': [FAIL],
'intl402/Segmenter/constructor/constructor/locales-valid': [FAIL],
# https://bugs.chromium.org/p/v8/issues/detail?id=9647
'language/expressions/assignment/dstr/ident-name-prop-name-literal-break-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-case-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-catch-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-class-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-const-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-continue-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-debugger-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-default-escaped-ext': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-default-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-delete-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-do-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-else-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-enum-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-export-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-extends-escaped-ext': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-extends-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-finally-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-for-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-function-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-if-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-import-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-in-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-instanceof-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-new-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-return-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-super-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-switch-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-this-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-throw-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-try-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-typeof-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-var-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-void-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-while-escaped': [FAIL],
'language/expressions/assignment/dstr/ident-name-prop-name-literal-with-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-break-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-case-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-catch-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-class-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-const-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-continue-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-debugger-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-default-escaped-ext': [FAIL],
'language/expressions/assignment/member-expr-ident-name-default-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-delete-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-do-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-else-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-enum-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-export-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-extends-escaped-ext': [FAIL],
'language/expressions/assignment/member-expr-ident-name-extends-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-finally-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-for-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-function-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-if-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-import-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-in-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-instanceof-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-new-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-return-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-super-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-switch-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-this-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-throw-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-try-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-typeof-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-var-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-void-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-while-escaped': [FAIL],
'language/expressions/assignment/member-expr-ident-name-with-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-break-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-case-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-catch-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-class-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-const-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-continue-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-debugger-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-default-escaped-ext': [FAIL],
'language/expressions/class/ident-name-method-def-default-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-delete-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-do-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-else-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-enum-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-export-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-extends-escaped-ext': [FAIL],
'language/expressions/class/ident-name-method-def-extends-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-finally-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-for-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-function-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-if-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-import-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-in-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-instanceof-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-new-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-return-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-super-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-switch-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-this-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-throw-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-try-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-typeof-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-var-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-void-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-while-escaped': [FAIL],
'language/expressions/class/ident-name-method-def-with-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-break-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-case-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-catch-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-class-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-const-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-continue-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-debugger-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-default-escaped-ext': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-default-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-delete-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-do-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-else-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-enum-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-export-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-extends-escaped-ext': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-extends-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-finally-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-for-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-function-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-if-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-import-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-in-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-instanceof-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-new-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-return-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-super-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-switch-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-this-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-throw-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-try-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-typeof-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-var-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-void-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-while-escaped': [FAIL],
'language/expressions/object/covered-ident-name-prop-name-literal-with-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-break-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-case-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-catch-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-class-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-const-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-continue-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-debugger-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-default-escaped-ext': [FAIL],
'language/expressions/object/ident-name-method-def-default-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-delete-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-do-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-else-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-enum-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-export-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-extends-escaped-ext': [FAIL],
'language/expressions/object/ident-name-method-def-extends-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-finally-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-for-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-function-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-if-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-import-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-in-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-instanceof-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-new-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-return-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-super-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-switch-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-this-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-throw-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-try-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-typeof-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-var-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-void-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-while-escaped': [FAIL],
'language/expressions/object/ident-name-method-def-with-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-break-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-case-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-catch-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-class-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-const-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-continue-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-debugger-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-default-escaped-ext': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-default-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-delete-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-do-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-else-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-enum-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-export-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-extends-escaped-ext': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-extends-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-finally-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-for-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-function-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-if-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-import-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-in-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-instanceof-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-new-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-return-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-super-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-switch-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-this-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-throw-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-try-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-typeof-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-var-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-void-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-while-escaped': [FAIL],
'language/expressions/object/ident-name-prop-name-literal-with-escaped': [FAIL],
'language/statements/class/ident-name-method-def-break-escaped': [FAIL],
'language/statements/class/ident-name-method-def-case-escaped': [FAIL],
'language/statements/class/ident-name-method-def-catch-escaped': [FAIL],
'language/statements/class/ident-name-method-def-class-escaped': [FAIL],
'language/statements/class/ident-name-method-def-const-escaped': [FAIL],
'language/statements/class/ident-name-method-def-continue-escaped': [FAIL],
'language/statements/class/ident-name-method-def-debugger-escaped': [FAIL],
'language/statements/class/ident-name-method-def-default-escaped-ext': [FAIL],
'language/statements/class/ident-name-method-def-default-escaped': [FAIL],
'language/statements/class/ident-name-method-def-delete-escaped': [FAIL],
'language/statements/class/ident-name-method-def-do-escaped': [FAIL],
'language/statements/class/ident-name-method-def-else-escaped': [FAIL],
'language/statements/class/ident-name-method-def-enum-escaped': [FAIL],
'language/statements/class/ident-name-method-def-export-escaped': [FAIL],
'language/statements/class/ident-name-method-def-extends-escaped-ext': [FAIL],
'language/statements/class/ident-name-method-def-extends-escaped': [FAIL],
'language/statements/class/ident-name-method-def-finally-escaped': [FAIL],
'language/statements/class/ident-name-method-def-for-escaped': [FAIL],
'language/statements/class/ident-name-method-def-function-escaped': [FAIL],
'language/statements/class/ident-name-method-def-if-escaped': [FAIL],
'language/statements/class/ident-name-method-def-import-escaped': [FAIL],
'language/statements/class/ident-name-method-def-in-escaped': [FAIL],
'language/statements/class/ident-name-method-def-instanceof-escaped': [FAIL],
'language/statements/class/ident-name-method-def-new-escaped': [FAIL],
'language/statements/class/ident-name-method-def-return-escaped': [FAIL],
'language/statements/class/ident-name-method-def-super-escaped': [FAIL],
'language/statements/class/ident-name-method-def-switch-escaped': [FAIL],
'language/statements/class/ident-name-method-def-this-escaped': [FAIL],
'language/statements/class/ident-name-method-def-throw-escaped': [FAIL],
'language/statements/class/ident-name-method-def-try-escaped': [FAIL],
'language/statements/class/ident-name-method-def-typeof-escaped': [FAIL],
'language/statements/class/ident-name-method-def-var-escaped': [FAIL],
'language/statements/class/ident-name-method-def-void-escaped': [FAIL],
'language/statements/class/ident-name-method-def-while-escaped': [FAIL],
'language/statements/class/ident-name-method-def-with-escaped': [FAIL],
######################## NEEDS INVESTIGATION ###########################
# https://bugs.chromium.org/p/v8/issues/detail?id=7833
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment