Commit ce80136
fix(compiler): optimize away unnecessary restore/reset view calls
When producing a listener, the template pipeline does the following in separate phases:
1. Generates all the variables available within its scope.
2. Adds `restoreView` and `resetView` calls if there are any referenced to local variables (e.g. `@let` or local refs).
3. Optimizes away the variables that aren't used.
This means that we can end up in a situation where the references to the variables in the scope no longer exist, but we still enter and leave the view as if they're there which is unnecessary.
These changes add a simple optimization pass that looks specifically for the pattern of a `restoreView` followed by a `return resetView(expr)`. Furthermore, by changing the order of some optimizations, we're able to drop the `getCurrentView` variable as well.
Fixes #66286.1 parent 1cf1370 commit ce80136
File tree
6 files changed
+144
-82
lines changed- packages
- compiler-cli/test/compliance/test_cases
- r3_view_compiler_arrow_functions
- r3_view_compiler_listener
- compiler/src/template/pipeline/src/phases
6 files changed
+144
-82
lines changedLines changed: 1 addition & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | | - | |
4 | | - | |
5 | | - | |
| 1 | + | |
6 | 2 | | |
7 | 3 | | |
8 | 4 | | |
| |||
Lines changed: 35 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1042 | 1042 | | |
1043 | 1043 | | |
1044 | 1044 | | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
| 1049 | + | |
| 1050 | + | |
| 1051 | + | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
| 1056 | + | |
| 1057 | + | |
| 1058 | + | |
| 1059 | + | |
| 1060 | + | |
| 1061 | + | |
| 1062 | + | |
| 1063 | + | |
| 1064 | + | |
| 1065 | + | |
| 1066 | + | |
| 1067 | + | |
| 1068 | + | |
| 1069 | + | |
| 1070 | + | |
| 1071 | + | |
| 1072 | + | |
| 1073 | + | |
| 1074 | + | |
| 1075 | + | |
| 1076 | + | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
Lines changed: 38 additions & 69 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
7 | | - | |
8 | | - | |
| 6 | + | |
9 | 7 | | |
10 | 8 | | |
11 | 9 | | |
| |||
20 | 18 | | |
21 | 19 | | |
22 | 20 | | |
23 | | - | |
24 | | - | |
25 | | - | |
| 21 | + | |
26 | 22 | | |
27 | 23 | | |
28 | 24 | | |
| |||
37 | 33 | | |
38 | 34 | | |
39 | 35 | | |
40 | < 4D1C code> | - | |
41 | | - | |
42 | | - | |
| 36 | + | |
43 | 37 | | |
44 | 38 | | |
45 | 39 | | |
| |||
54 | 48 | | |
55 | 49 | | |
56 | 50 | | |
57 | | - | |
58 | | - | |
59 | | - | |
| 51 | + | |
60 | 52 | | |
61 | 53 | | |
62 | 54 | | |
| |||
80 | 72 | | |
81 | 73 | | |
82 | 74 | | |
83 | | - | |
84 | | - | |
85 | | - | |
| 75 | + | |
86 | 76 | | |
87 | 77 | | |
88 | 78 | | |
| |||
97 | 87 | | |
98 | 88 | | |
99 | 89 | | |
100 | | - | |
101 | | - | |
102 | | - | |
| 90 | + | |
103 | 91 | | |
104 | 92 | | |
105 | 93 | | |
| |||
114 | 102 | | |
115 | 103 | | |
116 | 104 | | |
117 | | - | |
118 | | - | |
119 | | - | |
| 105 | + | |
120 | 106 | | |
121 | 107 | | |
122 | 108 | | |
| |||
131 | 117 | | |
132 | 118 | | |
133 | 119 | | |
134 | | - | |
135 | | - | |
136 | | - | |
| 120 | + | |
137 | 121 | | |
138 | 122 | | |
139 | 123 | | |
| |||
148 | 132 | | |
149 | 133 | | |
150 | 134 | | |
151 | | - | |
152 | | - | |
153 | | - | |
| 135 | + | |
154 | 136 | | |
155 | 137 | | |
156 | 138 | | |
| |||
165 | 147 | | |
166 | 148 | | |
167 | 149 | | |
168 | | - | |
169 | | - | |
170 | | - | |
| 150 | + | |
171 | 151 | | |
172 | 152 | | |
173 | 153 | | |
| |||
182 | 162 | | |
183 | 163 | | |
184 | 164 | | |
185 | | - | |
186 | | - | |
187 | | - | |
| 165 | + | |
188 | 166 | | |
189 | 167 | | |
190 | 168 | | |
| |||
199 | 177 | | |
200 | 178 | | |
201 | 179 | | |
202 | | - | |
203 | | - | |
204 | | - | |
| 180 | + | |
205 | 181 | | |
206 | 182 | | |
207 | 183 | | |
| |||
215 | 191 | | |
216 | 192 | | |
217 | 193 | | |
218 | | - | |
219 | | - | |
220 | | - | |
| 194 | + | |
221 | 195 | | |
222 | 196 | | |
223 | 197 | | |
| |||
232 | 206 | | |
233 | 207 | | |
234 | 208 | | |
235 | | - | |
236 | | - | |
237 | | - | |
| 209 | + | |
238 | 210 | | |
239 | 211 | | |
240 | 212 | | |
| |||
249 | 221 | | |
250 | 222 | | |
251 | 223 | | |
252 | | - | |
253 | | - | |
254 | | - | |
| 224 | + | |
255 | 225 | | |
256 | 226 | | |
257 | 227 | | |
| |||
266 | 236 | | |
267 | 237 | | |
268 | 238 | | |
269 | | - | |
270 | | - | |
271 | | - | |
| 239 | + | |
272 | 240 | | |
273 | 241 | | |
274 | 242 | | |
| |||
283 | 251 | | |
284 | 252 | | |
285 | 253 | | |
286 | | - | |
287 | | - | |
288 | | - | |
| 254 | + | |
289 | 255 | | |
290 | 256 | | |
291 | 257 | | |
| |||
300 | 266 | | |
301 | 267 | | |
302 | 268 | | |
303 | | - | |
304 | | - | |
305 | | - | |
| 269 | + | |
306 | 270 | | |
307 | 271 | | |
308 | 272 | | |
| |||
317 | 281 | | |
318 | 282 | | |
319 | 283 | | |
320 | | - | |
321 | | - | |
322 | | - | |
| 284 | + | |
323 | 285 | | |
324 | 286 | | |
325 | 287 | | |
| |||
334 | 296 | | |
335 | 297 | | |
336 | 298 | | |
337 | | - | |
338 | | - | |
339 | | - | |
| 299 | + | |
340 | 300 | | |
341 | 301 | | |
342 | 302 | | |
| |||
345 | 305 | | |
346 | 306 | | |
347 | 307 | | |
348 | | - | |
349 | | - | |
350 | | - | |
| 308 | + | |
351 | 309 | | |
352 | 310 | | |
353 | 311 | | |
| |||
356 | 314 | | |
357 | 315 | | |
358 | 316 | | |
359 | | - | |
360 | | - | |
361 | | - | |
| 317 | + | |
362 | 318 | | |
363 | 319 | | |
364 | 320 | | |
| |||
373 | 329 | | |
374 | 330 | | |
375 | 331 | | |
376 | | - | |
377 | | - | |
378 | | - | |
| 332 | + | |
379 | 333 | | |
380 | 334 | | |
381 | 335 | | |
| |||
387 | 341 | | |
388 | 342 | | |
389 | 343 | | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
390 | 359 | | |
391 | 360 | | |
392 | 361 | | |
Lines changed: 12 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
Lines changed: 20 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
0 commit comments