From 6f766c2872c1c43e96b2692ac3bf07a38b32e877 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 8 Apr 2016 12:50:07 -0700 Subject: [PATCH 1/2] Correct destructuring assignment to empty object Previously, chained destructuring object assignments would fail when the leftmost target was empty because the shortcut code would forget to check whether the right-hand side was also a destructuring assignment. --- src/compiler/transformers/destructuring.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/compiler/transformers/destructuring.ts b/src/compiler/transformers/destructuring.ts index 7cd37bade6c..06e8a354d85 100644 --- a/src/compiler/transformers/destructuring.ts +++ b/src/compiler/transformers/destructuring.ts @@ -17,10 +17,16 @@ namespace ts { node: BinaryExpression, needsValue: boolean, recordTempVariable: (node: Identifier) => void, - visitor?: (node: Node) => VisitResult) { + visitor?: (node: Node) => VisitResult): Expression { if (isEmptyObjectLiteralOrArrayLiteral(node.left)) { - return node.right; + const right = node.right; + if (isDestructuringAssignment(right)) { + return flattenDestructuringAssignment(context, right, needsValue, recordTempVariable, visitor); + } + else { + return node.right; + } } let location: TextRange = node; @@ -401,4 +407,4 @@ namespace ts { return emitTempVariableAssignment(value, location); } } -} \ No newline at end of file +} From e6670811b0b762b953ea3f7fe3bd53b00aa688ad Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Tue, 12 Apr 2016 10:46:27 -0700 Subject: [PATCH 2/2] Remove parentheses and accept baselines --- tests/baselines/reference/emptyAssignmentPatterns02_ES5.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js index 27a0b5f9b61..370e019104f 100644 --- a/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js +++ b/tests/baselines/reference/emptyAssignmentPatterns02_ES5.js @@ -9,8 +9,8 @@ let x, y, z, a1, a2, a3; //// [emptyAssignmentPatterns02_ES5.js] var a; var x, y, z, a1, a2, a3; -((x = a.x, y = a.y, z = a.z, a)); -((a1 = a[0], a2 = a[1], a3 = a[2], a)); +(x = a.x, y = a.y, z = a.z, a); +(a1 = a[0], a2 = a[1], a3 = a[2], a); //// [emptyAssignmentPatterns02_ES5.d.ts]