diff --git a/lib/6to5/transformation/transform.js b/lib/6to5/transformation/transform.js index a1c7a104ac..4c64371d3a 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 @@ -97,6 +96,7 @@ _.each({ typeofSymbol: require("./transformers/optional-typeof-symbol"), externalRuntime: require("./transformers/optional-external-runtime"), 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); +}; 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..00320c54b6 --- /dev/null +++ b/test/fixtures/transformation/optional-external-regenerator-runtime/basic/expected.js @@ -0,0 +1,13 @@ +"use strict"; + +var _regeneratorRuntime = 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"] +}