From 03f189fc4605d650a296b76bdd872452dcd85397 Mon Sep 17 00:00:00 2001 From: Logan Smyth Date: Sat, 5 Dec 2015 12:24:00 -0800 Subject: [PATCH] Ensure that the async/generator flags carry over when converting class methods - fixes T6755 --- .../src/loose.js | 2 +- .../test/fixtures/regression/T6755/actual.js | 9 ++++++ .../fixtures/regression/T6755/expected.js | 30 +++++++++++++++++++ .../fixtures/regression/T6755/options.json | 6 ++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/actual.js create mode 100644 packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/expected.js create mode 100644 packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/options.json diff --git a/packages/babel-plugin-transform-es2015-classes/src/loose.js b/packages/babel-plugin-transform-es2015-classes/src/loose.js index a6989da008..e44ebe7089 100644 --- a/packages/babel-plugin-transform-es2015-classes/src/loose.js +++ b/packages/babel-plugin-transform-es2015-classes/src/loose.js @@ -16,7 +16,7 @@ export default class LooseClassTransformer extends VanillaTransformer { if (!node.static) classRef = t.memberExpression(classRef, t.identifier("prototype")); let methodName = t.memberExpression(classRef, node.key, node.computed || t.isLiteral(node.key)); - let func = t.functionExpression(null, node.params, node.body); + let func = t.functionExpression(null, node.params, node.body, node.generator, node.async); let key = t.toComputedKey(node, node.key); if (t.isStringLiteral(key)) { func = nameFunction({ diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/actual.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/actual.js new file mode 100644 index 0000000000..8581c6b314 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/actual.js @@ -0,0 +1,9 @@ +class Example { + async test1(){ + await Promise.resolve(2); + } + + *test2(){ + yield 3; + } +} diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/expected.js new file mode 100644 index 0000000000..fac597d962 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/expected.js @@ -0,0 +1,30 @@ +"use strict"; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Example = (function () { + function Example() { + _classCallCheck(this, Example); + } + + Example.prototype.test1 = async function test1() { + await Promise.resolve(2); + }; + + Example.prototype.test2 = regeneratorRuntime.mark(function test2() { + return regeneratorRuntime.wrap(function test2$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return 3; + + case 2: + case "end": + return _context.stop(); + } + } + }, test2, this); + }); + return Example; +})(); diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/options.json b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/options.json new file mode 100644 index 0000000000..56bdb2dbf3 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/T6755/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + "syntax-async-functions", + ["transform-es2015-classes", { "loose": true }] + ] +}