@samitouri / QOS-React-2 / commits / 5bc2c807c3

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 |