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();