diff --git a/packages/babel-generator/src/generators/statements.js b/packages/babel-generator/src/generators/statements.js index b9e8e736b3..e1492ad77c 100644 --- a/packages/babel-generator/src/generators/statements.js +++ b/packages/babel-generator/src/generators/statements.js @@ -84,10 +84,9 @@ const buildForXStatement = function (op) { return function (node: Object) { this.word("for"); this.space(); - if (op === "await") { + if (op === "of" && node.await) { this.word("await"); this.space(); - op = "of"; } this.token("("); @@ -103,7 +102,6 @@ const buildForXStatement = function (op) { export const ForInStatement = buildForXStatement("in"); export const ForOfStatement = buildForXStatement("of"); -export const ForAwaitStatement = buildForXStatement("await"); export function DoWhileStatement(node: Object) { this.word("do"); diff --git a/packages/babel-helper-remap-async-to-generator/src/index.js b/packages/babel-helper-remap-async-to-generator/src/index.js index deca1eb650..8cabe9ee06 100644 --- a/packages/babel-helper-remap-async-to-generator/src/index.js +++ b/packages/babel-helper-remap-async-to-generator/src/index.js @@ -41,8 +41,9 @@ const awaitVisitor = { } }, - ForAwaitStatement(path, { file, wrapAwait }) { + ForOfStatement(path, { file, wrapAwait }) { const { node } = path; + if (!node.await) return; const build = rewriteForAwait(path, { getAsyncIterator: file.addHelper("asyncIterator"), diff --git a/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/for-x/expected.js b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/for-x/expected.js index 9617d7b78f..0cffd92db6 100644 --- a/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/for-x/expected.js +++ b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/for-x/expected.js @@ -18,11 +18,11 @@ async function a() { for ({ a } in {}) {} for ({ a } of []) {} async function a() { - for ({ a } of []) {} + for await ({ a } of []) {} } for (a in {}) {} for (a of []) {} async function a() { - for (a of []) {} + for await (a of []) {} } diff --git a/packages/babel-types/README.md b/packages/babel-types/README.md index 582654eb98..d058be9b71 100644 --- a/packages/babel-types/README.md +++ b/packages/babel-types/README.md @@ -694,21 +694,6 @@ See also `t.isFile(node, opts)` and `t.assertFile(node, opts)`. --- -### forAwaitStatement -```javascript -t.forAwaitStatement(left, right, body) -``` - -See also `t.isForAwaitStatement(node, opts)` and `t.assertForAwaitStatement(node, opts)`. - -Aliases: `Scopable`, `Statement`, `For`, `BlockParent`, `Loop`, `ForXStatement` - - - `left`: `VariableDeclaration | LVal` (required) - - `right`: `Expression` (required) - - `body`: `Statement` (required) - ---- - ### forInStatement ```javascript t.forInStatement(left, right, body) @@ -726,7 +711,7 @@ Aliases: `Scopable`, `Statement`, `For`, `BlockParent`, `Loop`, `ForXStatement` ### forOfStatement ```javascript -t.forOfStatement(left, right, body) +t.forOfStatement(left, right, body, await) ``` See also `t.isForOfStatement(node, opts)` and `t.assertForOfStatement(node, opts)`. @@ -736,6 +721,7 @@ Aliases: `Scopable`, `Statement`, `For`, `BlockParent`, `Loop`, `ForXStatement` - `left`: `VariableDeclaration | LVal` (required) - `right`: `Expression` (required) - `body`: `Statement` (required) + - `await`: `boolean` (default: `false`) --- diff --git a/packages/babel-types/src/definitions/es2015.js b/packages/babel-types/src/definitions/es2015.js index f0231478d3..028e6a0b18 100644 --- a/packages/babel-types/src/definitions/es2015.js +++ b/packages/babel-types/src/definitions/es2015.js @@ -178,6 +178,10 @@ defineType("ForOfStatement", { }, body: { validate: assertNodeType("Statement") + }, + await: { + default: false, + validate: assertValueType("boolean") } } }); diff --git a/packages/babel-types/src/definitions/experimental.js b/packages/babel-types/src/definitions/experimental.js index 17949eaa4c..f7561a864b 100644 --- a/packages/babel-types/src/definitions/experimental.js +++ b/packages/babel-types/src/definitions/experimental.js @@ -11,22 +11,6 @@ defineType("AwaitExpression", { } }); -defineType("ForAwaitStatement", { - visitor: ["left", "right", "body"], - aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement"], - fields: { - left: { - validate: assertNodeType("VariableDeclaration", "LVal") - }, - right: { - validate: assertNodeType("Expression") - }, - body: { - validate: assertNodeType("Statement") - } - } -}); - defineType("BindExpression", { visitor: ["object", "callee"], aliases: ["Expression"],