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 8d37ec91b0..749cf8a0d5 100644 --- a/packages/babel-helper-remap-async-to-generator/src/index.js +++ b/packages/babel-helper-remap-async-to-generator/src/index.js @@ -27,7 +27,9 @@ let awaitVisitor = { }, ArrowFunctionExpression(path) { - path.arrowFunctionToShadowed(); + if (!path.node.async) { + path.arrowFunctionToShadowed(); + } }, AwaitExpression({ node }) { diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/deeply-nested-asyncs/actual.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/deeply-nested-asyncs/actual.js new file mode 100644 index 0000000000..9949fbb612 --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/deeply-nested-asyncs/actual.js @@ -0,0 +1,13 @@ +async function s(x) { + let t = async (y) => { + let r = async (z) => { + await z; + return this.x; + } + await r; + + return this.g(r); + } + await t; + return this.h(t); +} diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/deeply-nested-asyncs/expected.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/deeply-nested-asyncs/expected.js new file mode 100644 index 0000000000..04d2813c76 --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/deeply-nested-asyncs/expected.js @@ -0,0 +1,28 @@ +let s = function () { + var ref = babelHelpers.asyncToGenerator(function* (x) { + let t = (() => { + var _this2 = this; + + var ref = babelHelpers.asyncToGenerator(function* (y) { + let r = (() => { + var _this = this; + + var ref = babelHelpers.asyncToGenerator(function* (z) { + yield z; + return _this.x; + }); + return _x3 => ref.apply(this, arguments); + })(); + yield r; + + return _this2.g(r); + }); + return _x2 => ref.apply(this, arguments); + })(); + yield t; + return this.h(t); + }); + return function s(_x) { + return ref.apply(this, arguments); + }; +}();