From 256fcbc58f3bed051b13523fcc2603cd3169c3a1 Mon Sep 17 00:00:00 2001 From: Diogo Franco Date: Sun, 19 Mar 2017 11:28:52 +0900 Subject: [PATCH] Treat "await" as an invalid identifier (#4954) It is valid (outside `async` functions) in the "script" parse goal, but always invalid in the "module" parse goal. Fixes #4952. --- .../test/fixtures/function-name/await/actual.js | 3 +++ .../test/fixtures/function-name/await/expected.js | 3 +++ packages/babel-types/src/validators.js | 3 +++ packages/babel-types/test/validators.js | 4 ++++ 4 files changed, 13 insertions(+) create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/actual.js create mode 100644 packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/expected.js diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/actual.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/actual.js new file mode 100644 index 0000000000..8f9c647db8 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/actual.js @@ -0,0 +1,3 @@ +export {}; + +var obj = { await: function () {} }; diff --git a/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/expected.js b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/expected.js new file mode 100644 index 0000000000..4289b26aa5 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-function-name/test/fixtures/function-name/await/expected.js @@ -0,0 +1,3 @@ +export {}; + +var obj = { await: function _await() {} }; \ No newline at end of file diff --git a/packages/babel-types/src/validators.js b/packages/babel-types/src/validators.js index c5f25327bd..dc8143ae9d 100644 --- a/packages/babel-types/src/validators.js +++ b/packages/babel-types/src/validators.js @@ -167,6 +167,9 @@ export function isReferenced(node: Object, parent: Object): boolean { export function isValidIdentifier(name: string): boolean { if (typeof name !== "string" || esutils.keyword.isReservedWordES6(name, true)) { return false; + } else if (name === "await") { + // invalid in module, valid in script; better be safe (see #4952) + return false; } else { return esutils.keyword.isIdentifierNameES6(name); } diff --git a/packages/babel-types/test/validators.js b/packages/babel-types/test/validators.js index 2e7e55d085..ccc83f665b 100644 --- a/packages/babel-types/test/validators.js +++ b/packages/babel-types/test/validators.js @@ -26,5 +26,9 @@ suite("validators", function () { assert(t.isNodesEquivalent(parse(program), parse(program2)) === false); }); + + it("rejects 'await' as an identifier", function () { + assert(t.isValidIdentifier("await") === false); + }); }); });