Fix some cases of keywords with escape sequences

This commit is contained in:
Brian Ng 2017-08-24 19:27:09 -05:00
parent 5e60ad6688
commit 2bc124bf49
No known key found for this signature in database
GPG Key ID: 3F2380E1E1508CA9
16 changed files with 38 additions and 180 deletions

View File

@ -134,17 +134,9 @@ language/expressions/async-function/nameless-dflt-params-duplicates.js(default)
language/expressions/function/dflt-params-duplicates.js(default)
language/expressions/function/param-dflt-yield-strict.js(strict mode)
language/expressions/generators/dflt-params-duplicates.js(default)
language/expressions/generators/named-yield-as-binding-identifier-escaped.js(default)
language/expressions/generators/named-yield-as-identifier-reference-escaped.js(default)
language/expressions/generators/named-yield-as-label-identifier-escaped.js(default)
language/expressions/generators/param-dflt-yield.js(default)
language/expressions/generators/yield-as-binding-identifier-escaped.js(default)
language/expressions/generators/yield-as-generator-expression-binding-identifier.js(default)
language/expressions/generators/yield-as-identifier-reference-escaped.js(default)
language/expressions/generators/yield-as-label-identifier-escaped.js(default)
language/expressions/generators/yield-as-parameter.js(default)
language/expressions/new.target/escaped-new.js(default)
language/expressions/new.target/escaped-new.js(strict mode)
language/expressions/new.target/escaped-target.js(default)
language/expressions/new.target/escaped-target.js(strict mode)
language/expressions/object/method-definition/async-meth-escaped-async.js(default)
@ -161,9 +153,6 @@ language/expressions/object/method-definition/escaped-get.js(strict mode)
language/expressions/object/method-definition/escaped-set.js(default)
language/expressions/object/method-definition/escaped-set.js(strict mode)
language/expressions/object/method-definition/gen-meth-dflt-params-duplicates.js(default)
language/expressions/object/method-definition/gen-yield-as-binding-identifier-escaped.js(default)
language/expressions/object/method-definition/gen-yield-as-identifier-reference-escaped.js(default)
language/expressions/object/method-definition/gen-yield-as-label-identifier-escaped.js(default)
language/expressions/object/method-definition/generator-param-id-yield.js(default)
language/expressions/object/method-definition/generator-param-init-yield.js(default)
language/expressions/object/method-definition/generator-param-redecl-const.js(default)
@ -182,146 +171,6 @@ language/expressions/yield/star-in-iteration-stmt.js(default)
language/expressions/yield/star-in-iteration-stmt.js(strict mode)
language/global-code/new.target-arrow.js(default)
language/global-code/new.target-arrow.js(strict mode)
language/identifiers/val-break-via-escape-hex.js(default)
language/identifiers/val-break-via-escape-hex.js(strict mode)
language/identifiers/val-break-via-escape-hex4.js(default)
language/identifiers/val-break-via-escape-hex4.js(strict mode)
language/identifiers/val-case-via-escape-hex.js(default)
language/identifiers/val-case-via-escape-hex.js(strict mode)
language/identifiers/val-case-via-escape-hex4.js(default)
language/identifiers/val-case-via-escape-hex4.js(strict mode)
language/identifiers/val-catch-via-escape-hex.js(default)
language/identifiers/val-catch-via-escape-hex.js(strict mode)
language/identifiers/val-catch-via-escape-hex4.js(default)
language/identifiers/val-catch-via-escape-hex4.js(strict mode)
language/identifiers/val-class-via-escape-hex.js(default)
language/identifiers/val-class-via-escape-hex.js(strict mode)
language/identifiers/val-class-via-escape-hex4.js(default)
language/identifiers/val-class-via-escape-hex4.js(strict mode)
language/identifiers/val-const-via-escape-hex.js(default)
language/identifiers/val-const-via-escape-hex.js(strict mode)
language/identifiers/val-const-via-escape-hex4.js(default)
language/identifiers/val-const-via-escape-hex4.js(strict mode)
language/identifiers/val-continue-via-escape-hex.js(default)
language/identifiers/val-continue-via-escape-hex.js(strict mode)
language/identifiers/val-continue-via-escape-hex4.js(default)
language/identifiers/val-continue-via-escape-hex4.js(strict mode)
language/identifiers/val-debugger-via-escape-hex.js(default)
language/identifiers/val-debugger-via-escape-hex.js(strict mode)
language/identifiers/val-debugger-via-escape-hex4.js(default)
language/identifiers/val-debugger-via-escape-hex4.js(strict mode)
language/identifiers/val-default-via-escape-hex.js(default)
language/identifiers/val-default-via-escape-hex.js(strict mode)
language/identifiers/val-default-via-escape-hex4.js(default)
language/identifiers/val-default-via-escape-hex4.js(strict mode)
language/identifiers/val-delete-via-escape-hex.js(default)
language/identifiers/val-delete-via-escape-hex.js(strict mode)
language/identifiers/val-delete-via-escape-hex4.js(default)
language/identifiers/val-delete-via-escape-hex4.js(strict mode)
language/identifiers/val-do-via-escape-hex.js(default)
language/identifiers/val-do-via-escape-hex.js(strict mode)
language/identifiers/val-do-via-escape-hex4.js(default)
language/identifiers/val-do-via-escape-hex4.js(strict mode)
language/identifiers/val-else-via-escape-hex.js(default)
language/identifiers/val-else-via-escape-hex.js(strict mode)
language/identifiers/val-else-via-escape-hex4.js(default)
language/identifiers/val-else-via-escape-hex4.js(strict mode)
language/identifiers/val-export-via-escape-hex.js(default)
language/identifiers/val-export-via-escape-hex.js(strict mode)
language/identifiers/val-export-via-escape-hex4.js(default)
language/identifiers/val-export-via-escape-hex4.js(strict mode)
language/identifiers/val-extends-via-escape-hex.js(default)
language/identifiers/val-extends-via-escape-hex.js(strict mode)
language/identifiers/val-extends-via-escape-hex4.js(default)
language/identifiers/val-extends-via-escape-hex4.js(strict mode)
language/identifiers/val-false-via-escape-hex.js(default)
language/identifiers/val-false-via-escape-hex.js(strict mode)
language/identifiers/val-false-via-escape-hex4.js(default)
language/identifiers/val-false-via-escape-hex4.js(strict mode)
language/identifiers/val-finally-via-escape-hex.js(default)
language/identifiers/val-finally-via-escape-hex.js(strict mode)
language/identifiers/val-finally-via-escape-hex4.js(default)
language/identifiers/val-finally-via-escape-hex4.js(strict mode)
language/identifiers/val-for-via-escape-hex.js(default)
language/identifiers/val-for-via-escape-hex.js(strict mode)
language/identifiers/val-for-via-escape-hex4.js(default)
language/identifiers/val-for-via-escape-hex4.js(strict mode)
language/identifiers/val-function-via-escape-hex.js(default)
language/identifiers/val-function-via-escape-hex.js(strict mode)
language/identifiers/val-function-via-escape-hex4.js(default)
language/identifiers/val-function-via-escape-hex4.js(strict mode)
language/identifiers/val-if-via-escape-hex.js(default)
language/identifiers/val-if-via-escape-hex.js(strict mode)
language/identifiers/val-if-via-escape-hex4.js(default)
language/identifiers/val-if-via-escape-hex4.js(strict mode)
language/identifiers/val-import-via-escape-hex.js(default)
language/identifiers/val-import-via-escape-hex.js(strict mode)
language/identifiers/val-import-via-escape-hex4.js(default)
language/identifiers/val-import-via-escape-hex4.js(strict mode)
language/identifiers/val-in-via-escape-hex.js(default)
language/identifiers/val-in-via-escape-hex.js(strict mode)
language/identifiers/val-in-via-escape-hex4.js(default)
language/identifiers/val-in-via-escape-hex4.js(strict mode)
language/identifiers/val-instanceof-via-escape-hex.js(default)
language/identifiers/val-instanceof-via-escape-hex.js(strict mode)
language/identifiers/val-instanceof-via-escape-hex4.js(default)
language/identifiers/val-instanceof-via-escape-hex4.js(strict mode)
language/identifiers/val-new-via-escape-hex.js(default)
language/identifiers/val-new-via-escape-hex.js(strict mode)
language/identifiers/val-new-via-escape-hex4.js(default)
language/identifiers/val-new-via-escape-hex4.js(strict mode)
language/identifiers/val-null-via-escape-hex.js(default)
language/identifiers/val-null-via-escape-hex.js(strict mode)
language/identifiers/val-null-via-escape-hex4.js(default)
language/identifiers/val-null-via-escape-hex4.js(strict mode)
language/identifiers/val-return-via-escape-hex.js(default)
language/identifiers/val-return-via-escape-hex.js(strict mode)
language/identifiers/val-return-via-escape-hex4.js(default)
language/identifiers/val-return-via-escape-hex4.js(strict mode)
language/identifiers/val-super-via-escape-hex.js(default)
language/identifiers/val-super-via-escape-hex.js(strict mode)
language/identifiers/val-super-via-escape-hex4.js(default)
language/identifiers/val-super-via-escape-hex4.js(strict mode)
language/identifiers/val-switch-via-escape-hex.js(default)
language/identifiers/val-switch-via-escape-hex.js(strict mode)
language/identifiers/val-switch-via-escape-hex4.js(default)
language/identifiers/val-switch-via-escape-hex4.js(strict mode)
language/identifiers/val-this-via-escape-hex.js(default)
language/identifiers/val-this-via-escape-hex.js(strict mode)
language/identifiers/val-this-via-escape-hex4.js(default)
language/identifiers/val-this-via-escape-hex4.js(strict mode)
language/identifiers/val-throw-via-escape-hex.js(default)
language/identifiers/val-throw-via-escape-hex.js(strict mode)
language/identifiers/val-throw-via-escape-hex4.js(default)
language/identifiers/val-throw-via-escape-hex4.js(strict mode)
language/identifiers/val-true-via-escape-hex.js(default)
language/identifiers/val-true-via-escape-hex.js(strict mode)
language/identifiers/val-true-via-escape-hex4.js(default)
language/identifiers/val-true-via-escape-hex4.js(strict mode)
language/identifiers/val-try-via-escape-hex.js(default)
language/identifiers/val-try-via-escape-hex.js(strict mode)
language/identifiers/val-try-via-escape-hex4.js(default)
language/identifiers/val-try-via-escape-hex4.js(strict mode)
language/identifiers/val-typeof-via-escape-hex.js(default)
language/identifiers/val-typeof-via-escape-hex.js(strict mode)
language/identifiers/val-typeof-via-escape-hex4.js(default)
language/identifiers/val-typeof-via-escape-hex4.js(strict mode)
language/identifiers/val-var-via-escape-hex.js(default)
language/identifiers/val-var-via-escape-hex.js(strict mode)
language/identifiers/val-var-via-escape-hex4.js(default)
language/identifiers/val-var-via-escape-hex4.js(strict mode)
language/identifiers/val-void-via-escape-hex.js(default)
language/identifiers/val-void-via-escape-hex.js(strict mode)
language/identifiers/val-void-via-escape-hex4.js(default)
language/identifiers/val-void-via-escape-hex4.js(strict mode)
language/identifiers/val-while-via-escape-hex.js(default)
language/identifiers/val-while-via-escape-hex.js(strict mode)
language/identifiers/val-while-via-escape-hex4.js(default)
language/identifiers/val-while-via-escape-hex4.js(strict mode)
language/identifiers/val-with-via-escape-hex.js(default)
language/identifiers/val-with-via-escape-hex.js(strict mode)
language/identifiers/val-with-via-escape-hex4.js(default)
language/identifiers/val-with-via-escape-hex4.js(strict mode)
language/import/dup-bound-names.js(default)
language/import/dup-bound-names.js(strict mode)
language/import/escaped-as-import-specifier.js(default)
@ -391,18 +240,6 @@ language/module-code/parse-err-hoist-lex-fun.js(default)
language/module-code/parse-err-hoist-lex-fun.js(strict mode)
language/module-code/parse-err-hoist-lex-gen.js(default)
language/module-code/parse-err-hoist-lex-gen.js(strict mode)
language/reserved-words/ident-reference-false-escaped.js(default)
language/reserved-words/ident-reference-false-escaped.js(strict mode)
language/reserved-words/ident-reference-null-escaped.js(default)
language/reserved-words/ident-reference-null-escaped.js(strict mode)
language/reserved-words/ident-reference-true-escaped.js(default)
language/reserved-words/ident-reference-true-escaped.js(strict mode)
language/reserved-words/label-ident-false-escaped.js(default)
language/reserved-words/label-ident-false-escaped.js(strict mode)
language/reserved-words/label-ident-null-escaped.js(default)
language/reserved-words/label-ident-null-escaped.js(strict mode)
language/reserved-words/label-ident-true-escaped.js(default)
language/reserved-words/label-ident-true-escaped.js(strict mode)
language/statements/async-function/dflt-params-duplicates.js(default)
language/statements/async-function/early-errors-declaration-await-in-formals-default.js(default)
language/statements/async-function/early-errors-declaration-await-in-formals-default.js(strict mode)
@ -488,9 +325,6 @@ language/statements/function/dflt-params-duplicates.js(default)
language/statements/function/param-dflt-yield-strict.js(strict mode)
language/statements/generators/dflt-params-duplicates.js(default)
language/statements/generators/param-dflt-yield.js(default)
language/statements/generators/yield-as-binding-identifier-escaped.js(default)
language/statements/generators/yield-as-identifier-reference-escaped.js(default)
language/statements/generators/yield-as-label-identifier-escaped.js(default)
language/statements/generators/yield-as-parameter.js(default)
language/statements/if/if-async-fun-else-async-fun.js(default)
language/statements/if/if-async-fun-else-async-fun.js(strict mode)
@ -935,25 +769,13 @@ language/expressions/async-generator/early-errors-expression-yield-as-function-b
language/expressions/async-generator/escaped-async.js(default)
language/expressions/async-generator/escaped-async.js(strict mode)
language/expressions/async-generator/named-dflt-params-duplicates.js(default)
language/expressions/async-generator/named-yield-as-binding-identifier-escaped.js(default)
language/expressions/async-generator/named-yield-as-identifier-reference-escaped.js(default)
language/expressions/async-generator/named-yield-as-label-identifier-escaped.js(default)
language/expressions/async-generator/yield-as-binding-identifier-escaped.js(default)
language/expressions/async-generator/yield-as-identifier-reference-escaped.js(default)
language/expressions/async-generator/yield-as-label-identifier-escaped.js(default)
language/expressions/object/method-definition/async-gen-meth-dflt-params-duplicates.js(default)
language/expressions/object/method-definition/async-gen-meth-escaped-async.js(default)
language/expressions/object/method-definition/async-gen-meth-escaped-async.js(strict mode)
language/expressions/object/method-definition/async-gen-yield-as-binding-identifier-escaped.js(default)
language/expressions/object/method-definition/async-gen-yield-as-identifier-reference-escaped.js(default)
language/expressions/object/method-definition/async-gen-yield-as-label-identifier-escaped.js(default)
language/expressions/object/method-definition/async-meth-dflt-params-duplicates.js(default)
language/statements/async-generator/dflt-params-duplicates.js(default)
language/statements/async-generator/escaped-async.js(default)
language/statements/async-generator/escaped-async.js(strict mode)
language/statements/async-generator/yield-as-binding-identifier-escaped.js(default)
language/statements/async-generator/yield-as-identifier-reference-escaped.js(default)
language/statements/async-generator/yield-as-label-identifier-escaped.js(default)
language/statements/class/async-gen-meth-escaped-async.js(default)
language/statements/class/async-gen-meth-escaped-async.js(strict mode)
language/statements/do-while/decl-async-gen.js(default)
@ -1497,4 +1319,6 @@ language/statements/try/optional-catch-binding-throws.js(strict mode)
language/statements/try/optional-catch-binding.js(default)
language/statements/try/optional-catch-binding.js(strict mode)
language/statements/labeled/let-identifier-with-newline.js(default)
language/statements/labeled/let-identifier-with-newline.js(default)
language/statements/labeled/value-yield-non-strict-escaped.js(default)
language/statements/let/syntax/escaped-let.js(default)

View File

@ -1105,9 +1105,15 @@ export default class Tokenizer extends LocationParser {
readWord(): void {
const word = this.readWord1();
let type = tt.name;
if (!this.state.containsEsc && this.isKeyword(word)) {
if (this.isKeyword(word)) {
if (this.state.containsEsc) {
this.raise(this.state.pos, `Escape sequence in keyword ${word}`);
}
type = keywordTypes[word];
}
return this.finishToken(type, word);
}

View File

@ -0,0 +1 @@
var co\u{6e}st = 123;

View File

@ -0,0 +1,3 @@
{
"throws": "Escape sequence in keyword const (1:14)"
}

View File

@ -0,0 +1 @@
var expor\u{74} = 123;

View File

@ -0,0 +1,3 @@
{
"throws": "Escape sequence in keyword export (1:15)"
}

View File

@ -0,0 +1 @@
\u0069\u{66} (true) {}

View File

@ -0,0 +1,3 @@
{
"throws": "Escape sequence in keyword if (1:12)"
}

View File

@ -0,0 +1 @@
var \u{69}\u{6d}\u{70}\u{6f}\u{72}\u{74} = 123;

View File

@ -0,0 +1,3 @@
{
"throws": "Escape sequence in keyword import (1:40)"
}

View File

@ -0,0 +1 @@
nul\u{6c}

View File

@ -0,0 +1,3 @@
{
"throws": "Escape sequence in keyword null (1:9)"
}

View File

@ -0,0 +1 @@
\u0074rue

View File

@ -0,0 +1,3 @@
{
"throws": "Escape sequence in keyword true (1:9)"
}

View File

@ -0,0 +1 @@
function f() { n\u0065w.target; }

View File

@ -0,0 +1,3 @@
{
"throws": "Escape sequence in keyword new (1:23)"
}