From 9d5184ffb2226bf2bf8dd25e5cafd3fae6b030d2 Mon Sep 17 00:00:00 2001 From: Eetu Latja Date: Sat, 6 Feb 2016 19:31:42 +0200 Subject: [PATCH] Fix spread to work with super method calls --- packages/babel-plugin-transform-es2015-spread/src/index.js | 4 ++++ .../contexted-method-call-super-multiple-args/actual.js | 5 +++++ .../contexted-method-call-super-multiple-args/expected.js | 5 +++++ .../spread/contexted-method-call-super-single-arg/actual.js | 5 +++++ .../contexted-method-call-super-single-arg/expected.js | 5 +++++ 5 files changed, 24 insertions(+) create mode 100644 packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-multiple-args/actual.js create mode 100644 packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-multiple-args/expected.js create mode 100644 packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-single-arg/actual.js create mode 100644 packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-single-arg/expected.js diff --git a/packages/babel-plugin-transform-es2015-spread/src/index.js b/packages/babel-plugin-transform-es2015-spread/src/index.js index 21f5f9c62f..d7768cb161 100644 --- a/packages/babel-plugin-transform-es2015-spread/src/index.js +++ b/packages/babel-plugin-transform-es2015-spread/src/index.js @@ -101,6 +101,10 @@ export default function ({ types: t }) { node.callee = t.memberExpression(node.callee, t.identifier("apply")); } + if (t.isSuper(contextLiteral)) { + contextLiteral = t.thisExpression(); + } + node.arguments.unshift(contextLiteral); }, diff --git a/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-multiple-args/actual.js b/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-multiple-args/actual.js new file mode 100644 index 0000000000..0aa5436c27 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-multiple-args/actual.js @@ -0,0 +1,5 @@ +class Foo { + bar() { + super.bar(arg1, arg2, ...args); + } +} diff --git a/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-multiple-args/expected.js b/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-multiple-args/expected.js new file mode 100644 index 0000000000..b64d1199df --- /dev/null +++ b/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-multiple-args/expected.js @@ -0,0 +1,5 @@ +class Foo { + bar() { + super.bar.apply(this, [arg1, arg2].concat(babelHelpers.toConsumableArray(args))); + } +} diff --git a/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-single-arg/actual.js b/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-single-arg/actual.js new file mode 100644 index 0000000000..2def4d153f --- /dev/null +++ b/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-single-arg/actual.js @@ -0,0 +1,5 @@ +class Foo { + bar() { + super.bar(...args); + } +} diff --git a/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-single-arg/expected.js b/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-single-arg/expected.js new file mode 100644 index 0000000000..8fecd04dde --- /dev/null +++ b/packages/babel-plugin-transform-es2015-spread/test/fixtures/spread/contexted-method-call-super-single-arg/expected.js @@ -0,0 +1,5 @@ +class Foo { + bar() { + super.bar.apply(this, babelHelpers.toConsumableArray(args)); + } +}