[hir] Infer UnaryExpression as non allocating
Sathya Gunasekaran committed
Jan 25, 2023 at 11:11 UTC
e6b4988b1e52ba09502440aec0a3920cb4967bba
2 files changed
+17
-73
compiler/forget/src/ReactiveScopes/InferReactiveScopeVariables.ts
+2
-2
@@ -172,6 +172,7 @@ function mayAllocate(value: InstructionValue): boolean {
172
case "PropertyLoad":
173
case "ComputedLoad":
174
case "JSXText":
175
+ case "UnaryExpression":
176
case "Primitive": {
177
return false;
178
}
@@ -187,8 +188,7 @@ function mayAllocate(value: InstructionValue): boolean {
188
case "ObjectExpression":
189
case "UnsupportedNode":
190
case "FunctionExpression":
190
- case "TaggedTemplateExpression":
191
- case "UnaryExpression": {
191
+ case "TaggedTemplateExpression": {
192
return true;
193
}
194
default: {
compiler/forget/src/__tests__/fixtures/hir/unary-expr.expect.md
+15
-71
@@ -30,77 +30,21 @@ function component(a) {
30
} else {
31
t = $[1];
32
}
33
- const c_2 = $[2] !== t.t;
34
- let z;
35
- if (c_2) {
36
- z = +t.t;
37
- $[2] = t.t;
38
- $[3] = z;
39
- } else {
40
- z = $[3];
41
- }
42
- const c_4 = $[4] !== t.t;
43
- let q;
44
- if (c_4) {
45
- q = -t.t;
46
- $[4] = t.t;
47
- $[5] = q;
48
- } else {
49
- q = $[5];
50
- }
51
- const c_6 = $[6] !== t.t;
52
- let p;
53
- if (c_6) {
54
- p = void t.t;
55
- $[6] = t.t;
56
- $[7] = p;
57
- } else {
58
- p = $[7];
59
- }
60
- const c_8 = $[8] !== t.t;
61
- let n;
62
- if (c_8) {
63
- n = delete t.t;
64
- $[8] = t.t;
65
- $[9] = n;
66
- } else {
67
- n = $[9];
68
- }
69
- const c_10 = $[10] !== t.t;
70
- let m;
71
- if (c_10) {
72
- m = !t.t;
73
- $[10] = t.t;
74
- $[11] = m;
75
- } else {
76
- m = $[11];
77
- }
78
- const c_12 = $[12] !== t.t;
79
- let e;
80
- if (c_12) {
81
- e = ~t.t;
82
- $[12] = t.t;
83
- $[13] = e;
84
- } else {
85
- e = $[13];
86
- }
87
- const c_14 = $[14] !== t.t;
88
- let f;
89
- if (c_14) {
90
- f = typeof t.t;
91
- $[14] = t.t;
92
- $[15] = f;
93
- } else {
94
- f = $[15];
95
- }
96
- let t16;
97
- if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
98
- t16 = { z: z, p: p, q: q, n: n, m: m, e: e, f: f };
99
- $[16] = t16;
100
- } else {
101
- t16 = $[16];
102
- }
103
- return t16;
33
+ const z = +t.t;
34
+ const q = -t.t;
35
+ const p = void t.t;
36
+ const n = delete t.t;
37
+ const m = !t.t;
38
+ const e = ~t.t;
39
+ const f = typeof t.t;
40
+ let t2;
41
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
42
+ t2 = { z: z, p: p, q: q, n: n, m: m, e: e, f: f };
43
+ $[2] = t2;
44
+ } else {
45
+ t2 = $[2];
46
+ }
47
+ return t2;
48
}
49
50
```