@samitouri / QOS-React-2 / commits / e6b4988b1e

[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 ```