From 5c7f88a5fb3a7a9c99a764ebabfb9a751733c6b7 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Fri, 30 Oct 2015 17:39:57 +0000 Subject: [PATCH] fix parameters after defaults in arrow functions refering to the wrong `arguments` - fixes #2682 --- .../es6.arrow-functions/default-parameters/actual.js | 4 +++- .../es6.arrow-functions/default-parameters/expected.js | 8 +++++++- .../src/default.js | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/babel-core/test/fixtures/transformation/es6.arrow-functions/default-parameters/actual.js b/packages/babel-core/test/fixtures/transformation/es6.arrow-functions/default-parameters/actual.js index 4eee9c372e..f9c9245ffe 100644 --- a/packages/babel-core/test/fixtures/transformation/es6.arrow-functions/default-parameters/actual.js +++ b/packages/babel-core/test/fixtures/transformation/es6.arrow-functions/default-parameters/actual.js @@ -2,4 +2,6 @@ var some = (count = "30") => { console.log("count", count); }; -some(); +var collect = (since = 0, userid) => { + console.log(userid); +}; diff --git a/packages/babel-core/test/fixtures/transformation/es6.arrow-functions/default-parameters/expected.js b/packages/babel-core/test/fixtures/transformation/es6.arrow-functions/default-parameters/expected.js index 7b03aac22d..4f89ccdd0d 100644 --- a/packages/babel-core/test/fixtures/transformation/es6.arrow-functions/default-parameters/expected.js +++ b/packages/babel-core/test/fixtures/transformation/es6.arrow-functions/default-parameters/expected.js @@ -4,4 +4,10 @@ var some = function () { console.log("count", count); }; -some(); + +var collect = function () { + let since = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0]; + let userid = arguments[1]; + + console.log(userid); +}; diff --git a/packages/babel-plugin-transform-es2015-parameters/src/default.js b/packages/babel-plugin-transform-es2015-parameters/src/default.js index 9b99a3e475..6076c27b11 100644 --- a/packages/babel-plugin-transform-es2015-parameters/src/default.js +++ b/packages/babel-plugin-transform-es2015-parameters/src/default.js @@ -16,7 +16,7 @@ let buildDefaultParamAssign = template(` `); let buildCutOff = template(` - let $0 = arguments[$1]; + let $0 = $1[$2]; `); function hasDefaults(node) { @@ -131,7 +131,7 @@ export let visitor = { let param = node.params[i]; if (param._isDefaultPlaceholder) continue; - let declar = buildCutOff(param, t.numberLiteral(i)); + let declar = buildCutOff(param, argsIdentifier, t.numberLiteral(i)); declar._blockHoist = node.params.length - i; body.push(declar); }