Support array pattern params
Joe Savona committed
Mar 15, 2023 at 15:33 UTC
5bc2c807c39cb38fc9ae8acaa69fb96fd3d2b393
4 files changed
+60
-17
compiler/forget/src/HIR/BuildHIR.ts
+1
-1
@@ -102,7 +102,7 @@ export function lower(
102
loc: param.node.loc ?? GeneratedSource,
103
};
104
params.push(place);
105
- } else if (param.isObjectPattern()) {
105
+ } else if (param.isObjectPattern() || param.isArrayPattern()) {
106
const place: Place = {
107
kind: "Identifier",
108
identifier: builder.makeTemporary(),
compiler/forget/src/__tests__/fixtures/compiler/array-pattern-params.expect.md
new
+54
@@ -0,0 +1,54 @@
1
+
2
+## Input
3
+
4
+```javascript
5
+function component([a, b]) {
6
+ let y = { a };
7
+ let z = { b };
8
+ return [y, z];
9
+}
10
+
11
+```
12
+
13
+## Code
14
+
15
+```javascript
16
+function component(t16) {
17
+ const $ = React.unstable_useMemoCache(7);
18
+ const [a, b] = t16;
19
+ const c_0 = $[0] !== a;
20
+ let t0;
21
+ if (c_0) {
22
+ t0 = { a };
23
+ $[0] = a;
24
+ $[1] = t0;
25
+ } else {
26
+ t0 = $[1];
27
+ }
28
+ const y = t0;
29
+ const c_2 = $[2] !== b;
30
+ let t1;
31
+ if (c_2) {
32
+ t1 = { b };
33
+ $[2] = b;
34
+ $[3] = t1;
35
+ } else {
36
+ t1 = $[3];
37
+ }
38
+ const z = t1;
39
+ const c_4 = $[4] !== y;
40
+ const c_5 = $[5] !== z;
41
+ let t2;
42
+ if (c_4 || c_5) {
43
+ t2 = [y, z];
44
+ $[4] = y;
45
+ $[5] = z;
46
+ $[6] = t2;
47
+ } else {
48
+ t2 = $[6];
49
+ }
50
+ return t2;
51
+}
52
+
53
+```
54
+
\ No newline at end of file
compiler/forget/src/__tests__/fixtures/compiler/array-pattern-params.js
new
+5
@@ -0,0 +1,5 @@
1
+function component([a, b]) {
2
+ let y = { a };
3
+ let z = { b };
4
+ return [y, z];
5
+}
compiler/forget/src/__tests__/fixtures/compiler/error.todo-kitchensink.expect.md
-16
@@ -83,13 +83,6 @@ let moduleLocal = false;
83
## Error
84
85
```
86
-[ReactForget] TodoError: (BuildHIR::lower) Handle ArrayPattern params
87
-> 1 | function foo([a, b], { c, d, e = "e" }, f = "f", ...args) {
88
- | ^^^^^^
89
- 2 | let i = 0;
90
- 3 | var x = [];
91
- 4 |
92
-
86
[ReactForget] TodoError: (BuildHIR::lowerAssignment) Handle AssignmentPattern assignments
87
> 1 | function foo([a, b], { c, d, e = "e" }, f = "f", ...args) {
88
| ^^^^^^^
@@ -192,15 +185,6 @@ let moduleLocal = false;
185
22 | const j = function bar([quz, qux], ...args) {};
186
23 |
187
195
-[ReactForget] TodoError: (BuildHIR::lower) Handle ArrayPattern params
196
- 20 | <DesignSystem.Button />;
197
- 21 |
198
-> 22 | const j = function bar([quz, qux], ...args) {};
199
- | ^^^^^^^^^^
200
- 23 |
201
- 24 | for (; i < 3; i += 1) {
202
- 25 | x.push(i);
203
-
188
[ReactForget] TodoError: (BuildHIR::lower) Handle RestElement params
189
20 | <DesignSystem.Button />;
190
21 |