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); + }); }); });