@samitouri / QOS-React / commits / 5ee23af1a6

Elide empty if alternate blocks in codegen

Joe Savona committed May 17, 2023 at 15:55 UTC 5ee23af1a6d10b79e96c6bf82a28e1bef5b0130a
4 files changed +10 -49
compiler/forget/src/ReactiveScopes/CodegenReactiveFunction.ts
+10 -7
@@ -385,13 +385,16 @@ function codegenTerminal(
385 );
386 }
387 case "if": {
388 - return t.ifStatement(
389 - codegenPlace(cx, terminal.test),
390 - codegenBlock(cx, terminal.consequent),
391 - terminal.alternate !== null
392 - ? codegenBlock(cx, terminal.alternate)
393 - : null
394 - );
388 + const test = codegenPlace(cx, terminal.test);
389 + const consequent = codegenBlock(cx, terminal.consequent);
390 + let alternate: t.Statement | null = null;
391 + if (terminal.alternate !== null) {
392 + const block = codegenBlock(cx, terminal.alternate);
393 + if (block.body.length !== 0) {
394 + alternate = block;
395 + }
396 + }
397 + return t.ifStatement(test, consequent, alternate);
398 }
399 case "return": {
400 const value = codegenPlace(cx, terminal.value);
compiler/forget/src/__tests__/fixtures/compiler/constant-propagation-phi.expect.md
-1
@@ -23,7 +23,6 @@ function foo(a, b, c) {
23 ```javascript
24 function foo(a, b, c) {
25 if (a) {
26 - } else {
26 }
27 return b;
28 }
compiler/forget/src/__tests__/fixtures/compiler/reverse-postorder.expect.md
-1
@@ -51,7 +51,6 @@ function Component(props) {
51 }
52 } else {
53 if (props.cond2) {
54 - } else {
54 }
55 }
56 }
compiler/forget/src/__tests__/fixtures/compiler/rules-of-hooks/rules-of-hooks-c1e8c7f4c191.expect.md
-40
@@ -147,124 +147,84 @@ function MyComponent() {
147 // Is valid but hard to compute by brute-forcing
148 function MyComponent() {
149 if (c) {
150 - } else {
150 }
151 if (c) {
153 - } else {
152 }
153 if (c) {
156 - } else {
154 }
155 if (c) {
159 - } else {
156 }
157 if (c) {
162 - } else {
158 }
159 if (c) {
165 - } else {
160 }
161 if (c) {
168 - } else {
162 }
163 if (c) {
171 - } else {
164 }
165 if (c) {
174 - } else {
166 }
167 if (c) {
177 - } else {
168 }
169 if (c) {
180 - } else {
170 }
171 if (c) {
183 - } else {
172 }
173 if (c) {
186 - } else {
174 }
175 if (c) {
189 - } else {
176 }
177 if (c) {
192 - } else {
178 }
179 if (c) {
195 - } else {
180 }
181 if (c) {
198 - } else {
182 }
183 if (c) {
201 - } else {
184 }
185 if (c) {
204 - } else {
186 }
187 if (c) {
207 - } else {
188 }
189 if (c) {
210 - } else {
190 }
191 if (c) {
213 - } else {
192 }
193 if (c) {
216 - } else {
194 }
195 if (c) {
219 - } else {
196 }
197 if (c) {
222 - } else {
198 }
199 if (c) {
225 - } else {
200 }
201 if (c) {
228 - } else {
202 }
203 if (c) {
231 - } else {
204 }
205 if (c) {
234 - } else {
206 }
207 if (c) {
237 - } else {
208 }
209 if (c) {
240 - } else {
210 }
211 if (c) {
243 - } else {
212 }
213 if (c) {
246 - } else {
214 }
215 if (c) {
249 - } else {
216 }
217 if (c) {
252 - } else {
218 }
219 if (c) {
255 - } else {
220 }
221 if (c) {
258 - } else {
222 }
223 if (c) {
261 - } else {
224 }
225 if (c) {
264 - } else {
226 }
227 if (c) {
267 - } else {
228 }
229
230 useHook();