Merge pull request #3191 from vhf/destructuring-rest-args-initialization-order
Order of arguments initialization - fixes T6809
This commit is contained in:
@@ -3,8 +3,13 @@ import * as t from "babel-types";
|
||||
export let visitor = {
|
||||
Function(path) {
|
||||
let params: Array = path.get("params");
|
||||
|
||||
for (let i = 0; i < params.length; i++) {
|
||||
|
||||
// If there's a rest param, no need to loop through it. Also, we need to
|
||||
// hoist one more level to get `declar` at the right spot.
|
||||
let hoistTweak = t.isRestElement(params[params.length - 1]) ? 1 : 0;
|
||||
let outputParamsLength = params.length - hoistTweak;
|
||||
|
||||
for (let i = 0; i < outputParamsLength; i++) {
|
||||
let param = params[i];
|
||||
if (param.isArrayPattern() || param.isObjectPattern()) {
|
||||
let uid = path.scope.generateUidIdentifier("ref");
|
||||
@@ -12,7 +17,7 @@ export let visitor = {
|
||||
let declar = t.variableDeclaration("let", [
|
||||
t.variableDeclarator(param.node, uid)
|
||||
]);
|
||||
declar._blockHoist = params.length - i;
|
||||
declar._blockHoist = outputParamsLength - i;
|
||||
|
||||
path.ensureBlock();
|
||||
path.get("body").unshiftContainer("body", declar);
|
||||
|
||||
Reference in New Issue
Block a user