diff --git a/packages/babel-plugin-transform-es2015-parameters/src/rest.js b/packages/babel-plugin-transform-es2015-parameters/src/rest.js index adf3dfbe5e..572afeb7e1 100644 --- a/packages/babel-plugin-transform-es2015-parameters/src/rest.js +++ b/packages/babel-plugin-transform-es2015-parameters/src/rest.js @@ -107,9 +107,17 @@ function hasRest(node) { } function optimiseIndexGetter(path, argsId, offset) { + let index; + + if (t.isNumericLiteral(path.parent.property)) { + index = t.numericLiteral(path.parent.property.value + offset); + } else { + index = t.binaryExpression("+", path.parent.property, t.numericLiteral(offset)); + } + path.parentPath.replaceWith(loadRest({ ARGUMENTS: argsId, - INDEX: t.numericLiteral(path.parent.property.value + offset) + INDEX: index, })); } diff --git a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-length/expected.js b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-length/expected.js index 21923d140e..174b8f6d46 100644 --- a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-length/expected.js +++ b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-length/expected.js @@ -1,6 +1,6 @@ var t = function (f) { - arguments[0]; - arguments[arguments.length - 1]; + arguments.length <= 1 ? undefined : arguments[1]; + arguments.length <= arguments.length - 1 - 1 + 1 ? undefined : arguments[arguments.length - 1 - 1 + 1]; }; function t(f) {