Skip to content

Commit 7dc3e92

Browse files
authored
Destructuring crash (#1170)
* Update TS to 4.5.x * Fix crash when destructing nested array patterns * Made test deterministic * Fixed test again
1 parent 88d472a commit 7dc3e92

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/transformation/visitors/variable-declaration.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,14 @@ export function transformArrayBindingElement(
2121
} else if (ts.isIdentifier(name)) {
2222
return transformIdentifier(context, name);
2323
} else if (ts.isBindingElement(name)) {
24-
// TODO: It should always be true when called from `transformVariableDeclaration`,
25-
// but could be false from `transformForOfLuaIteratorStatement`.
26-
assert(ts.isIdentifier(name.name));
27-
return transformIdentifier(context, name.name);
24+
if (ts.isIdentifier(name.name)) {
25+
return transformIdentifier(context, name.name);
26+
} else {
27+
// ts.isBindingPattern(name.name)
28+
const tempName = context.createTempNameForNode(name.name);
29+
context.addPrecedingStatements(transformBindingPattern(context, name.name, tempName));
30+
return tempName;
31+
}
2832
} else {
2933
assertNever(name);
3034
}

test/unit/loops.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,18 @@ test("forof destructing", () => {
279279
`.expectToMatchJsResult();
280280
});
281281

282+
test("forof nested destructing", () => {
283+
util.testFunction`
284+
const obj = { a: [3], b: [5] };
285+
let result = 0;
286+
287+
for(const [k, [v]] of Object.entries(obj)){
288+
result += v;
289+
}
290+
return result;
291+
`.expectToMatchJsResult();
292+
});
293+
282294
test("forof destructing with existing variables", () => {
283295
const input = [
284296
[1, 2],

0 commit comments

Comments
 (0)