From 81bec3e5c4e559cacadbc07dd24aac8d5099caa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alu=C3=ADsio=20Augusto=20Silva=20Gon=C3=A7alves?= Date: Sat, 17 Jan 2015 22:46:02 -0200 Subject: [PATCH 1/3] Move the _blockHoist transformer after regenerator Otherwise wrapped generator functions are hoisted to the top of the scope even if we want something else to come before them. --- lib/6to5/transformation/transform.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/6to5/transformation/transform.js b/lib/6to5/transformation/transform.js index 2a5cbb26a2..74079d5d0b 100644 --- a/lib/6to5/transformation/transform.js +++ b/lib/6to5/transformation/transform.js @@ -80,13 +80,12 @@ _.each({ constants: require("./transformers/es6-constants"), letScoping: require("./transformers/es6-let-scoping"), - _blockHoist: require("./transformers/_block-hoist"), - generators: require("./transformers/es6-generators"), restParameters: require("./transformers/es6-rest-parameters"), protoToAssign: require("./transformers/optional-proto-to-assign"), + _blockHoist: require("./transformers/_block-hoist"), _declarations: require("./transformers/_declarations"), // wrap up From d4cc8fefd1c18645c44015b7b6d021aebcc1f37e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alu=C3=ADsio=20Augusto=20Silva=20Gon=C3=A7alves?= Date: Sat, 17 Jan 2015 23:02:20 -0200 Subject: [PATCH 2/3] Add transformer to import regeneratorRuntime from a module Thanks to facebook/regenerator#167 Regenerator's runtime can be now required as a module (though not in an easily self-containable way). This transformer, together with `coreAliasing` and `externalRuntime`, allows users to ditch a runtime dependency on `6to5`/`6to5-core` to depend directly on `core-js` and `regenerator`. --- lib/6to5/transformation/transform.js | 1 + .../optional-external-regenerator-runtime.js | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 lib/6to5/transformation/transformers/optional-external-regenerator-runtime.js diff --git a/lib/6to5/transformation/transform.js b/lib/6to5/transformation/transform.js index 74079d5d0b..9d32b62fa9 100644 --- a/lib/6to5/transformation/transform.js +++ b/lib/6to5/transformation/transform.js @@ -95,6 +95,7 @@ _.each({ typeofSymbol: require("./transformers/optional-typeof-symbol"), coreAliasing: require("./transformers/optional-core-aliasing"), + externalRegenerator: require("./transformers/optional-external-regenerator-runtime"), undefinedToVoid: require("./transformers/optional-undefined-to-void"), // spec diff --git a/lib/6to5/transformation/transformers/optional-external-regenerator-runtime.js b/lib/6to5/transformation/transformers/optional-external-regenerator-runtime.js new file mode 100644 index 0000000000..9294a6c76e --- /dev/null +++ b/lib/6to5/transformation/transformers/optional-external-regenerator-runtime.js @@ -0,0 +1,16 @@ +var t = require("../../types"); + +exports.optional = true; + +exports.ast = { + enter: function (ast, file) { + file._regeneratorId = file.addImport("regenerator/runtime-module", "regeneratorRuntime"); + } +}; + +exports.MemberExpression = function (node, parent, scope, context, file) { + var obj = node.object; + var prop = node.property; + if (!t.isReferenced(node, parent) || !t.isReferenced(obj, node)) return; + if (obj.name === "regeneratorRuntime") return t.memberExpression(file._regeneratorId, prop); +}; From 7e6da1d368c75fe980bf271feaa90643359e7045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alu=C3=ADsio=20Augusto=20Silva=20Gon=C3=A7alves?= Date: Sun, 18 Jan 2015 01:41:20 -0200 Subject: [PATCH 3/3] Add tests for the externalRegenerator transformer --- .../basic/actual.js | 2 ++ .../basic/expected.js | 17 +++++++++++++++++ .../options.json | 3 +++ 3 files changed, 22 insertions(+) create mode 100644 test/fixtures/transformation/optional-external-regenerator-runtime/basic/actual.js create mode 100644 test/fixtures/transformation/optional-external-regenerator-runtime/basic/expected.js create mode 100644 test/fixtures/transformation/optional-external-regenerator-runtime/options.json diff --git a/test/fixtures/transformation/optional-external-regenerator-runtime/basic/actual.js b/test/fixtures/transformation/optional-external-regenerator-runtime/basic/actual.js new file mode 100644 index 0000000000..ae6cc4d8c8 --- /dev/null +++ b/test/fixtures/transformation/optional-external-regenerator-runtime/basic/actual.js @@ -0,0 +1,2 @@ +void function* () { +}; diff --git a/test/fixtures/transformation/optional-external-regenerator-runtime/basic/expected.js b/test/fixtures/transformation/optional-external-regenerator-runtime/basic/expected.js new file mode 100644 index 0000000000..4121cc9700 --- /dev/null +++ b/test/fixtures/transformation/optional-external-regenerator-runtime/basic/expected.js @@ -0,0 +1,17 @@ +"use strict"; + +var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); +}; + +var _regeneratorRuntime = _interopRequire(require("regenerator/runtime-module")); + +void _regeneratorRuntime.mark(function callee$0$0() { + return _regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { + while (1) switch (context$1$0.prev = context$1$0.next) { + case 0: + case "end": + return context$1$0.stop(); + } + }, callee$0$0, this); +}); diff --git a/test/fixtures/transformation/optional-external-regenerator-runtime/options.json b/test/fixtures/transformation/optional-external-regenerator-runtime/options.json new file mode 100644 index 0000000000..40d336b5be --- /dev/null +++ b/test/fixtures/transformation/optional-external-regenerator-runtime/options.json @@ -0,0 +1,3 @@ +{ + "optional": ["externalRegenerator"] +}