From fa9f8ea4bee8c44c6d7dc20865b8963fdf668ae6 Mon Sep 17 00:00:00 2001 From: horpto <__singleton__@hackerdom.ru> Date: Mon, 11 Jan 2016 04:37:16 +0500 Subject: [PATCH] Fix for deeply nested async arrows --- .../src/index.js | 4 ++- .../deeply-nested-asyncs/actual.js | 13 +++++++++ .../deeply-nested-asyncs/expected.js | 28 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/deeply-nested-asyncs/actual.js create mode 100644 packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/deeply-nested-asyncs/expected.js 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); + }; +}();