Destructuring: Fix array unpacking assignments with holes on RHS (#9412)

This fixes an issue where destructuring assignments eligible for the "array unpacking" optimization would fail to compile when the array literal on the right-hand side of the expression contained holes.

Example input:
```js
[a, b] = [, 2];
; // Avoid completion record special case
```

The error message was `Property right of AssignmentExpression expected node to be of a type ["Expression"] but instead got null`.

Now the above code compiles to:
```js
a = void 0;
b = 2;
;
```

This PR also adds a couple of related test cases that were missing, to ensure the change doesn't regress them:
* Normal assignment expression with unpacking
* Declaration with unpacking and a hole on RHS
This commit is contained in:
Moti Zilberman
2019-03-27 00:14:21 +00:00
committed by Nicolò Ribaudo
parent 72161a64b2
commit f7bfc774ba
3 changed files with 16 additions and 1 deletions

View File

@@ -11,3 +11,7 @@ var [a, b] = [...foo, bar];
var [a, b] = [foo(), bar];
var [a, b] = [clazz.foo(), bar];
var [a, b] = [clazz.foo, bar];
var [a, b] = [, 2];
[a, b] = [1, 2];
[a, b] = [, 2];
; // Avoid completion record special case

View File

@@ -34,3 +34,10 @@ var _ref7 = [clazz.foo(), bar],
var _ref8 = [clazz.foo, bar],
a = _ref8[0],
b = _ref8[1];
var a,
b = 2;
a = 1;
b = 2;
a = void 0;
b = 2;
; // Avoid completion record special case