From 8c7ba20f86d44cf9bf3e9681b0b63ab4f1ed0a61 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sun, 1 Feb 2015 16:19:35 +1100 Subject: [PATCH] fix regenerator transformer order - fixes #617 --- .../transformers/es6/parameters.rest.js | 22 +++++++++---------- lib/6to5/transformation/transformers/index.js | 5 ++--- package.json | 2 +- .../destructuring-parameters/exec.js | 5 +++++ .../regenerator/destructuring/exec.js | 5 +++-- 5 files changed, 22 insertions(+), 17 deletions(-) create mode 100644 test/fixtures/transformation/regenerator/destructuring-parameters/exec.js diff --git a/lib/6to5/transformation/transformers/es6/parameters.rest.js b/lib/6to5/transformation/transformers/es6/parameters.rest.js index da79fec0ef..b885ed6e1d 100644 --- a/lib/6to5/transformation/transformers/es6/parameters.rest.js +++ b/lib/6to5/transformation/transformers/es6/parameters.rest.js @@ -58,15 +58,15 @@ exports.Function = function (node, parent, scope) { node.body.body.unshift(restDeclar); } - node.body.body.unshift( - util.template("rest", { - ARGUMENTS: argsId, - ARRAY_KEY: arrKey, - ARRAY_LEN: arrLen, - START: start, - ARRAY: rest, - KEY: key, - LEN: len, - }) - ); + var loop = util.template("rest", { + ARGUMENTS: argsId, + ARRAY_KEY: arrKey, + ARRAY_LEN: arrLen, + START: start, + ARRAY: rest, + KEY: key, + LEN: len, + }); + loop._blockHoist = node.params.length + 1; + node.body.body.unshift(loop); }; diff --git a/lib/6to5/transformation/transformers/index.js b/lib/6to5/transformation/transformers/index.js index 5ca676a1ad..ee1428402c 100644 --- a/lib/6to5/transformation/transformers/index.js +++ b/lib/6to5/transformation/transformers/index.js @@ -52,14 +52,13 @@ module.exports = { // needs to be after `es6.blockScoping` due to needing `letReferences` set on blocks "es6.blockScopingTDZ": require("./es6/block-scoping-tdz"), - // needs to be after block scoping since regenerator doesn't support it - regenerator: require("./other/regenerator"), - "es6.parameters.default": require("./es6/parameters.default"), "es6.parameters.rest": require("./es6/parameters.rest"), "es6.destructuring": require("./es6/destructuring"), + regenerator: require("./other/regenerator"), + // needs to be after `regenerator` due to needing `regeneratorRuntime` references // needs to be after `es6.forOf` due to needing `Symbol.iterator` references // needs to be before `es6.modules` due to dynamic imports diff --git a/package.json b/package.json index c63ebc5b48..52cf7cf0b2 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "lodash": "3.0.0", "output-file-sync": "1.1.0", "private": "0.1.6", - "regenerator-6to5": "0.8.9-7", + "regenerator-6to5": "0.8.9-8", "regexpu": "1.1.0", "roadrunner": "1.0.4", "source-map": "0.1.43", diff --git a/test/fixtures/transformation/regenerator/destructuring-parameters/exec.js b/test/fixtures/transformation/regenerator/destructuring-parameters/exec.js new file mode 100644 index 0000000000..a434cfd15c --- /dev/null +++ b/test/fixtures/transformation/regenerator/destructuring-parameters/exec.js @@ -0,0 +1,5 @@ +function* foo({ bar }) { + return bar; +} + +assert(foo({ bar: "bar" }).next().value, "bar"); diff --git a/test/fixtures/transformation/regenerator/destructuring/exec.js b/test/fixtures/transformation/regenerator/destructuring/exec.js index a434cfd15c..b9cf63e289 100644 --- a/test/fixtures/transformation/regenerator/destructuring/exec.js +++ b/test/fixtures/transformation/regenerator/destructuring/exec.js @@ -1,5 +1,6 @@ -function* foo({ bar }) { +function* foo() { + var { bar } = { bar: "bar" }; return bar; } -assert(foo({ bar: "bar" }).next().value, "bar"); +assert.deepEqual(foo().next().value, "bar");