[parser] unicode escape in ident key of objlit should not throw keyword error #10438
Labels
Has PR
i: bug
outdated
A closed issue/PR that is archived due to age. Recommended to make a new issue
pkg: parser
Bug Report
Current Behavior
Identifiers can have unicode escapes in them. An object literal can have keywords as their properties. An object literal can have a key that has a unicode escape in it. The spec uses the canonical value regardless.
Babel (and Acorn) throw errors for cases that ought to be valid.
Input Code
Expected behavior/code
Should not throw an error.
This snippet is creating a binding for
x
andy
. It does not create a binding forbreak
.Environment
Babel 7.5.5
Possible Solution
Make sure the heuristics properly check whether the ident is actually a binding before throwing the error.
Additional context/Screenshots
There's a slew of (new) test262 cases failing because of this. It is, however, a minor edge case that is low prio to fix :)
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-break-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-case-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-catch-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-class-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-const-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-continue-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-debugger-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-default-escaped-ext.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-default-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-delete-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-do-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-else-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-export-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-extends-escaped-ext.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-extends-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-finally-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-for-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-function-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-if-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-import-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-in-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-instanceof-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-new-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-return-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-super-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-switch-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-this-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-throw-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-try-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-typeof-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-var-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-void-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-while-escaped.js
test262/test/language/expressions/assignment/dstr/ident-name-prop-name-literal-with-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-break-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-case-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-catch-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-class-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-const-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-continue-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-debugger-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-default-escaped-ext.js
test262/test/language/expressions/assignment/member-expr-ident-name-default-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-delete-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-do-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-else-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-export-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-extends-escaped-ext.js
test262/test/language/expressions/assignment/member-expr-ident-name-extends-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-finally-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-for-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-function-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-if-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-import-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-in-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-instanceof-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-new-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-return-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-super-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-switch-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-this-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-throw-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-try-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-typeof-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-var-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-void-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-while-escaped.js
test262/test/language/expressions/assignment/member-expr-ident-name-with-escaped.js
test262/test/language/expressions/class/ident-name-method-def-break-escaped.js
test262/test/language/expressions/class/ident-name-method-def-case-escaped.js
test262/test/language/expressions/class/ident-name-method-def-catch-escaped.js
test262/test/language/expressions/class/ident-name-method-def-class-escaped.js
test262/test/language/expressions/class/ident-name-method-def-const-escaped.js
test262/test/language/expressions/class/ident-name-method-def-continue-escaped.js
test262/test/language/expressions/class/ident-name-method-def-debugger-escaped.js
test262/test/language/expressions/class/ident-name-method-def-default-escaped-ext.js
test262/test/language/expressions/class/ident-name-method-def-default-escaped.js
test262/test/language/expressions/class/ident-name-method-def-delete-escaped.js
test262/test/language/expressions/class/ident-name-method-def-do-escaped.js
test262/test/language/expressions/class/ident-name-method-def-else-escaped.js
test262/test/language/expressions/class/ident-name-method-def-export-escaped.js
test262/test/language/expressions/class/ident-name-method-def-extends-escaped-ext.js
test262/test/language/expressions/class/ident-name-method-def-extends-escaped.js
test262/test/language/expressions/class/ident-name-method-def-finally-escaped.js
test262/test/language/expressions/class/ident-name-method-def-for-escaped.js
test262/test/language/expressions/class/ident-name-method-def-function-escaped.js
test262/test/language/expressions/class/ident-name-method-def-if-escaped.js
test262/test/language/expressions/class/ident-name-method-def-import-escaped.js
test262/test/language/expressions/class/ident-name-method-def-in-escaped.js
test262/test/language/expressions/class/ident-name-method-def-instanceof-escaped.js
test262/test/language/expressions/class/ident-name-method-def-new-escaped.js
test262/test/language/expressions/class/ident-name-method-def-return-escaped.js
test262/test/language/expressions/class/ident-name-method-def-super-escaped.js
test262/test/language/expressions/class/ident-name-method-def-switch-escaped.js
test262/test/language/expressions/class/ident-name-method-def-this-escaped.js
test262/test/language/expressions/class/ident-name-method-def-throw-escaped.js
test262/test/language/expressions/class/ident-name-method-def-try-escaped.js
test262/test/language/expressions/class/ident-name-method-def-typeof-escaped.js
test262/test/language/expressions/class/ident-name-method-def-var-escaped.js
test262/test/language/expressions/class/ident-name-method-def-void-escaped.js
test262/test/language/expressions/class/ident-name-method-def-while-escaped.js
test262/test/language/expressions/class/ident-name-method-def-with-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-break-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-case-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-catch-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-class-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-const-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-continue-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-debugger-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-default-escaped-ext.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-default-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-delete-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-do-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-else-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-export-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-extends-escaped-ext.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-extends-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-finally-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-for-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-function-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-if-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-import-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-in-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-instanceof-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-new-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-return-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-super-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-switch-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-this-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-throw-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-try-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-typeof-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-var-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-void-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-while-escaped.js
test262/test/language/expressions/object/covered-ident-name-prop-name-literal-with-escaped.js
test262/test/language/expressions/object/ident-name-method-def-break-escaped.js
test262/test/language/expressions/object/ident-name-method-def-case-escaped.js
test262/test/language/expressions/object/ident-name-method-def-catch-escaped.js
test262/test/language/expressions/object/ident-name-method-def-class-escaped.js
test262/test/language/expressions/object/ident-name-method-def-const-escaped.js
test262/test/language/expressions/object/ident-name-method-def-continue-escaped.js
test262/test/language/expressions/object/ident-name-method-def-debugger-escaped.js
test262/test/language/expressions/object/ident-name-method-def-default-escaped-ext.js
test262/test/language/expressions/object/ident-name-method-def-default-escaped.js
test262/test/language/expressions/object/ident-name-method-def-delete-escaped.js
test262/test/language/expressions/object/ident-name-method-def-do-escaped.js
test262/test/language/expressions/object/ident-name-method-def-else-escaped.js
test262/test/language/expressions/object/ident-name-method-def-export-escaped.js
test262/test/language/expressions/object/ident-name-method-def-extends-escaped-ext.js
test262/test/language/expressions/object/ident-name-method-def-extends-escaped.js
test262/test/language/expressions/object/ident-name-method-def-finally-escaped.js
test262/test/language/expressions/object/ident-name-method-def-for-escaped.js
test262/test/language/expressions/object/ident-name-method-def-function-escaped.js
test262/test/language/expressions/object/ident-name-method-def-if-escaped.js
test262/test/language/expressions/object/ident-name-method-def-import-escaped.js
test262/test/language/expressions/object/ident-name-method-def-in-escaped.js
test262/test/language/expressions/object/ident-name-method-def-instanceof-escaped.js
test262/test/language/expressions/object/ident-name-method-def-new-escaped.js
test262/test/language/expressions/object/ident-name-method-def-return-escaped.js
test262/test/language/expressions/object/ident-name-method-def-super-escaped.js
test262/test/language/expressions/object/ident-name-method-def-switch-escaped.js
test262/test/language/expressions/object/ident-name-method-def-this-escaped.js
test262/test/language/expressions/object/ident-name-method-def-throw-escaped.js
test262/test/language/expressions/object/ident-name-method-def-try-escaped.js
test262/test/language/expressions/object/ident-name-method-def-typeof-escaped.js
test262/test/language/expressions/object/ident-name-method-def-var-escaped.js
test262/test/language/expressions/object/ident-name-method-def-void-escaped.js
test262/test/language/expressions/object/ident-name-method-def-while-escaped.js
test262/test/language/expressions/object/ident-name-method-def-with-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-break-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-case-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-catch-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-class-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-const-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-continue-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-debugger-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-default-escaped-ext.js
test262/test/language/expressions/object/ident-name-prop-name-literal-default-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-delete-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-do-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-else-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-export-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-extends-escaped-ext.js
test262/test/language/expressions/object/ident-name-prop-name-literal-extends-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-finally-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-for-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-function-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-if-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-import-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-in-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-instanceof-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-new-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-return-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-super-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-switch-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-this-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-throw-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-try-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-typeof-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-var-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-void-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-while-escaped.js
test262/test/language/expressions/object/ident-name-prop-name-literal-with-escaped.js
test262/test/language/statements/class/ident-name-method-def-break-escaped.js
test262/test/language/statements/class/ident-name-method-def-case-escaped.js
test262/test/language/statements/class/ident-name-method-def-catch-escaped.js
test262/test/language/statements/class/ident-name-method-def-class-escaped.js
test262/test/language/statements/class/ident-name-method-def-const-escaped.js
test262/test/language/statements/class/ident-name-method-def-continue-escaped.js
test262/test/language/statements/class/ident-name-method-def-debugger-escaped.js
test262/test/language/statements/class/ident-name-method-def-default-escaped-ext.js
test262/test/language/statements/class/ident-name-method-def-default-escaped.js
test262/test/language/statements/class/ident-name-method-def-delete-escaped.js
test262/test/language/statements/class/ident-name-method-def-do-escaped.js
test262/test/language/statements/class/ident-name-method-def-else-escaped.js
test262/test/language/statements/class/ident-name-method-def-export-escaped.js
test262/test/language/statements/class/ident-name-method-def-extends-escaped-ext.js
test262/test/language/statements/class/ident-name-method-def-extends-escaped.js
test262/test/language/statements/class/ident-name-method-def-finally-escaped.js
test262/test/language/statements/class/ident-name-method-def-for-escaped.js
test262/test/language/statements/class/ident-name-method-def-function-escaped.js
test262/test/language/statements/class/ident-name-method-def-if-escaped.js
test262/test/language/statements/class/ident-name-method-def-import-escaped.js
test262/test/language/statements/class/ident-name-method-def-in-escaped.js
test262/test/language/statements/class/ident-name-method-def-instanceof-escaped.js
test262/test/language/statements/class/ident-name-method-def-new-escaped.js
test262/test/language/statements/class/ident-name-method-def-return-escaped.js
test262/test/language/statements/class/ident-name-method-def-super-escaped.js
test262/test/language/statements/class/ident-name-method-def-switch-escaped.js
test262/test/language/statements/class/ident-name-method-def-this-escaped.js
test262/test/language/statements/class/ident-name-method-def-throw-escaped.js
test262/test/language/statements/class/ident-name-method-def-try-escaped.js
test262/test/language/statements/class/ident-name-method-def-typeof-escaped.js
test262/test/language/statements/class/ident-name-method-def-var-escaped.js
test262/test/language/statements/class/ident-name-method-def-void-escaped.js
test262/test/language/statements/class/ident-name-method-def-while-escaped.js
test262/test/language/statements/class/ident-name-method-def-with-escaped.js
The text was updated successfully, but these errors were encountered: