Support array pattern params

This commit is contained in:
Joe Savona
2023-03-15 15:33:14 -07:00
parent b69afe0506
commit 5bc2c807c3
4 changed files with 60 additions and 17 deletions
+1 -1
View File
@@ -102,7 +102,7 @@ export function lower(
loc: param.node.loc ?? GeneratedSource,
};
params.push(place);
} else if (param.isObjectPattern()) {
} else if (param.isObjectPattern() || param.isArrayPattern()) {
const place: Place = {
kind: "Identifier",
identifier: builder.makeTemporary(),
@@ -0,0 +1,54 @@
## Input
```javascript
function component([a, b]) {
let y = { a };
let z = { b };
return [y, z];
}
```
## Code
```javascript
function component(t16) {
const $ = React.unstable_useMemoCache(7);
const [a, b] = t16;
const c_0 = $[0] !== a;
let t0;
if (c_0) {
t0 = { a };
$[0] = a;
$[1] = t0;
} else {
t0 = $[1];
}
const y = t0;
const c_2 = $[2] !== b;
let t1;
if (c_2) {
t1 = { b };
$[2] = b;
$[3] = t1;
} else {
t1 = $[3];
}
const z = t1;
const c_4 = $[4] !== y;
const c_5 = $[5] !== z;
let t2;
if (c_4 || c_5) {
t2 = [y, z];
$[4] = y;
$[5] = z;
$[6] = t2;
} else {
t2 = $[6];
}
return t2;
}
```
@@ -0,0 +1,5 @@
function component([a, b]) {
let y = { a };
let z = { b };
return [y, z];
}
@@ -83,13 +83,6 @@ let moduleLocal = false;
## Error
```
[ReactForget] TodoError: (BuildHIR::lower) Handle ArrayPattern params
> 1 | function foo([a, b], { c, d, e = "e" }, f = "f", ...args) {
| ^^^^^^
2 | let i = 0;
3 | var x = [];
4 |
[ReactForget] TodoError: (BuildHIR::lowerAssignment) Handle AssignmentPattern assignments
> 1 | function foo([a, b], { c, d, e = "e" }, f = "f", ...args) {
| ^^^^^^^
@@ -192,15 +185,6 @@ let moduleLocal = false;
22 | const j = function bar([quz, qux], ...args) {};
23 |
[ReactForget] TodoError: (BuildHIR::lower) Handle ArrayPattern params
20 | <DesignSystem.Button />;
21 |
> 22 | const j = function bar([quz, qux], ...args) {};
| ^^^^^^^^^^
23 |
24 | for (; i < 3; i += 1) {
25 | x.push(i);
[ReactForget] TodoError: (BuildHIR::lower) Handle RestElement params
20 | <DesignSystem.Button />;
21 |