From 1bfb7039e9169a4e251aee5f2593d3081563c592 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Wed, 4 Nov 2015 23:34:33 +0000 Subject: [PATCH] protect against replacing a class expression with itself when attempting to infer a new function name - fixes #2803 --- .../es6.classes/inferred-expression-name/actual.js | 1 + .../es6.classes/inferred-expression-name/expected.js | 3 +++ packages/babel-plugin-transform-es2015-classes/src/index.js | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 packages/babel-core/test/fixtures/transformation/es6.classes/inferred-expression-name/actual.js create mode 100644 packages/babel-core/test/fixtures/transformation/es6.classes/inferred-expression-name/expected.js diff --git a/packages/babel-core/test/fixtures/transformation/es6.classes/inferred-expression-name/actual.js b/packages/babel-core/test/fixtures/transformation/es6.classes/inferred-expression-name/actual.js new file mode 100644 index 0000000000..d710ae858c --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/es6.classes/inferred-expression-name/actual.js @@ -0,0 +1 @@ +var o = { foo: class foo {} }; diff --git a/packages/babel-core/test/fixtures/transformation/es6.classes/inferred-expression-name/expected.js b/packages/babel-core/test/fixtures/transformation/es6.classes/inferred-expression-name/expected.js new file mode 100644 index 0000000000..9b8cd0baff --- /dev/null +++ b/packages/babel-core/test/fixtures/transformation/es6.classes/inferred-expression-name/expected.js @@ -0,0 +1,3 @@ +var o = { foo: function foo() { + babelHelpers.classCallCheck(this, foo); + } }; diff --git a/packages/babel-plugin-transform-es2015-classes/src/index.js b/packages/babel-plugin-transform-es2015-classes/src/index.js index ad7dd70135..887890d343 100644 --- a/packages/babel-plugin-transform-es2015-classes/src/index.js +++ b/packages/babel-plugin-transform-es2015-classes/src/index.js @@ -20,7 +20,7 @@ export default function ({ types: t }) { ClassExpression(path, state) { let inferred = nameFunction(path); - if (inferred) return path.replaceWith(inferred); + if (inferred && inferred !== path.node) return path.replaceWith(inferred); let Constructor = VanillaTransformer; if (state.opts.loose) Constructor = LooseTransformer;