diff --git a/src/babel/transformation/helpers/replace-supers.js b/src/babel/transformation/helpers/replace-supers.js index 18ae6659d2..fbe5ffef0f 100644 --- a/src/babel/transformation/helpers/replace-supers.js +++ b/src/babel/transformation/helpers/replace-supers.js @@ -169,7 +169,13 @@ export default class ReplaceSupers { if (methodName.name === "constructor") { // constructor() { super(); } - return t.memberExpression(superRef, t.identifier("call")); + if (parent.arguments.length === 2 && t.isSpreadElement(parent.arguments[1]) && t.isIdentifier(parent.arguments[1].argument, { name: "arguments" })) { + // special case single arguments spread + parent.arguments[1] = parent.arguments[1].argument; + return t.memberExpression(superRef, t.identifier("apply")); + } else { + return t.memberExpression(superRef, t.identifier("call")); + } } else { id = superRef; diff --git a/src/babel/transformation/transformers/es6/spread.js b/src/babel/transformation/transformers/es6/spread.js index 6b7c456b17..698f394c59 100644 --- a/src/babel/transformation/transformers/es6/spread.js +++ b/src/babel/transformation/transformers/es6/spread.js @@ -1,7 +1,7 @@ import * as t from "../../../types"; function getSpreadLiteral(spread, scope) { - if (scope.hub.file.isLoose("es6.spread")) { + if (scope.hub.file.isLoose("es6.spread") && !t.isIdentifier(spread.argument, { name: "arguments" })) { return spread.argument; } else { return scope.toArray(spread.argument, true);