diff --git a/lib/6to5/transformers/spread.js b/lib/6to5/transformers/spread.js index c6a4ba7adf..6c6cf6508c 100644 --- a/lib/6to5/transformers/spread.js +++ b/lib/6to5/transformers/spread.js @@ -56,7 +56,14 @@ exports.CallExpression = function (node, parent, file) { if (callee.type === "MemberExpression") { contextLiteral = callee.object; - callee.property = b.memberExpression(callee.property, b.identifier("apply"), false); + + if (callee.computed) { + callee.object = b.memberExpression(callee.object, callee.property, true); + callee.property = b.identifier("apply"); + callee.computed = false; + } else { + callee.property = b.memberExpression(callee.property, b.identifier("apply"), false); + } } else { node.callee = b.memberExpression(node.callee, b.identifier("apply"), false); } diff --git a/test/fixtures/syntax/spread/contexted-computed-method-call-multiple-args/actual.js b/test/fixtures/syntax/spread/contexted-computed-method-call-multiple-args/actual.js new file mode 100644 index 0000000000..305586e2a6 --- /dev/null +++ b/test/fixtures/syntax/spread/contexted-computed-method-call-multiple-args/actual.js @@ -0,0 +1 @@ +obj[method](foo, bar, ...args); diff --git a/test/fixtures/syntax/spread/contexted-computed-method-call-multiple-args/expected.js b/test/fixtures/syntax/spread/contexted-computed-method-call-multiple-args/expected.js new file mode 100644 index 0000000000..1d5363f0d0 --- /dev/null +++ b/test/fixtures/syntax/spread/contexted-computed-method-call-multiple-args/expected.js @@ -0,0 +1,3 @@ +"use strict"; +var _slice = Array.prototype.slice; +obj[method].apply(obj, [foo, bar].concat(_slice.call(args))); diff --git a/test/fixtures/syntax/spread/contexted-computed-method-call-single-arg/actual.js b/test/fixtures/syntax/spread/contexted-computed-method-call-single-arg/actual.js new file mode 100644 index 0000000000..65a21cba1e --- /dev/null +++ b/test/fixtures/syntax/spread/contexted-computed-method-call-single-arg/actual.js @@ -0,0 +1 @@ +obj[method](...args); diff --git a/test/fixtures/syntax/spread/contexted-computed-method-call-single-arg/expected.js b/test/fixtures/syntax/spread/contexted-computed-method-call-single-arg/expected.js new file mode 100644 index 0000000000..ced58a87d6 --- /dev/null +++ b/test/fixtures/syntax/spread/contexted-computed-method-call-single-arg/expected.js @@ -0,0 +1,3 @@ +"use strict"; +var _slice = Array.prototype.slice; +obj[method].apply(obj, _slice.call(args));