File tree 4 files changed +149
-5
lines changed
4 files changed +149
-5
lines changed Original file line number Diff line number Diff line change @@ -2581,11 +2581,7 @@ export class Compiler extends DiagnosticEmitter {
2581
2581
}
2582
2582
elseFlow . freeScopedLocals ( ) ;
2583
2583
this . currentFlow = flow ;
2584
- if ( elseTerminates && ! thenTerminates ) {
2585
- flow . inherit ( thenFlow ) ;
2586
- } else {
2587
- flow . inheritMutual ( thenFlow , elseFlow ) ;
2588
- }
2584
+ flow . inheritMutual ( thenFlow , elseFlow ) ;
2589
2585
return module . if ( condExpr ,
2590
2586
module . flatten ( thenStmts ) ,
2591
2587
module . flatten ( elseStmts )
Original file line number Diff line number Diff line change 1415
1415
call $~lib/builtins/abort
1416
1416
unreachable
1417
1417
end
1418
+ i32.const 0
1419
+ global.set $while/ran
1420
+ i32.const 0
1421
+ local.set $3
1422
+ loop $while-continue|067
1423
+ local.get $3
1424
+ i32.const 1
1425
+ i32.add
1426
+ local.tee $3
1427
+ i32.const 1
1428
+ i32.lt_s
1429
+ br_if $while-continue|067
1430
+ end
1431
+ i32.const 1
1432
+ global.set $while/ran
1433
+ i32.const 0
1434
+ global.set $while/ran
1435
+ i32.const 0
1436
+ local.set $3
1437
+ loop $while-continue|08
1438
+ local.get $3
1439
+ i32.const 1
1440
+ i32.add
1441
+ local.tee $3
1442
+ i32.const 1
1443
+ i32.lt_s
1444
+ br_if $while-continue|08
1445
+ end
1446
+ i32.const 1
1447
+ global.set $while/ran
1418
1448
)
1419
1449
(func $~start
1420
1450
global.get $~started
Original file line number Diff line number Diff line change @@ -175,3 +175,35 @@ function testRefAutorelease(): void {
175
175
ran = false ;
176
176
testRefAutorelease ( ) ;
177
177
assert ( ran ) ;
178
+
179
+ function testIfImplicitContinueThen ( ) : void {
180
+ var i = 0 ;
181
+ while ( true ) {
182
+ i ++ ;
183
+ if ( i < 1 ) {
184
+ // continue
185
+ } else {
186
+ break ;
187
+ }
188
+ }
189
+ ran = true ;
190
+ }
191
+ ran = false ;
192
+ testIfImplicitContinueThen ( ) ;
193
+ assert ( ran ) ;
194
+
195
+ function testIfImplicitContinueElse ( ) : void {
196
+ var i = 0 ;
197
+ while ( true ) {
198
+ i ++ ;
199
+ if ( i >= 1 ) {
200
+ break ;
201
+ } else {
202
+ // continue
203
+ }
204
+ }
205
+ ran = true ;
206
+ }
207
+ ran = false ;
208
+ testIfImplicitContinueElse ( ) ;
209
+ assert ( ran ) ;
Original file line number Diff line number Diff line change 2154
2154
local.get $1
2155
2155
call $~lib/rt/pure/__release
2156
2156
)
2157
+ (func $while/testIfImplicitContinueThen
2158
+ (local $0 i32 )
2159
+ (local $1 i32 )
2160
+ i32.const 0
2161
+ local.set $0
2162
+ block $while-break|0
2163
+ loop $while-continue|0
2164
+ i32.const 1
2165
+ local.set $1
2166
+ local.get $1
2167
+ if
2168
+ local.get $0
2169
+ i32.const 1
2170
+ i32.add
2171
+ local.set $0
2172
+ local.get $0
2173
+ i32.const 1
2174
+ i32.lt_s
2175
+ if
2176
+ nop
2177
+ else
2178
+ br $while-break|0
2179
+ end
2180
+ br $while-continue|0
2181
+ end
2182
+ end
2183
+ end
2184
+ i32.const 1
2185
+ global.set $while/ran
2186
+ )
2187
+ (func $while/testIfImplicitContinueElse
2188
+ (local $0 i32 )
2189
+ (local $1 i32 )
2190
+ i32.const 0
2191
+ local.set $0
2192
+ block $while-break|0
2193
+ loop $while-continue|0
2194
+ i32.const 1
2195
+ local.set $1
2196
+ local.get $1
2197
+ if
2198
+ local.get $0
2199
+ i32.const 1
2200
+ i32.add
2201
+ local.set $0
2202
+ local.get $0
2203
+ i32.const 1
2204
+ i32.ge_s
2205
+ if
2206
+ br $while-break|0
2207
+ else
2208
+ nop
2209
+ end
2210
+ br $while-continue|0
2211
+ end
2212
+ end
2213
+ end
2214
+ i32.const 1
2215
+ global.set $while/ran
2216
+ )
2157
2217
(func $start:while
2158
2218
i32.const 0
2159
2219
global.set $while/ran
2310
2370
call $~lib/builtins/abort
2311
2371
unreachable
2312
2372
end
2373
+ i32.const 0
2374
+ global.set $while/ran
2375
+ call $while/testIfImplicitContinueThen
2376
+ global.get $while/ran
2377
+ i32.eqz
2378
+ if
2379
+ i32.const 0
2380
+ i32.const 32
2381
+ i32.const 193
2382
+ i32.const 1
2383
+ call $~lib/builtins/abort
2384
+ unreachable
2385
+ end
2386
+ i32.const 0
2387
+ global.set $while/ran
2388
+ call $while/testIfImplicitContinueElse
2389
+ global.get $while/ran
2390
+ i32.eqz
2391
+ if
2392
+ i32.const 0
2393
+ i32.const 32
2394
+ i32.const 209
2395
+ i32.const 1
2396
+ call $~lib/builtins/abort
2397
+ unreachable
2398
+ end
2313
2399
)
2314
2400
(func $~start
2315
2401
global.get $~started
You can’t perform that action at this time.
0 commit comments