@@ -542,19 +542,28 @@ impl LiftAwait {
542542 }
543543
544544 fn extract_iter ( & mut self , env : & mut Env , pos : & Pos , iter : & mut LoopIter ) {
545- let mut con = vec ! [ ] ;
546545 let mut seq = vec ! [ ] ;
547- let mut tmps = vec ! [ ] ;
548546
549547 let LoopIter ( iter_tmps, iter_block, exprs) = iter;
550548
551549 for expr in exprs {
550+ let mut expr_con = vec ! [ ] ;
551+ let mut expr_seq = vec ! [ ] ;
552+ let mut expr_tmps = vec ! [ ] ;
552553 self . leave_await = true ;
553- self . check_and_extract_await ( env, expr, & mut con , & mut seq , & mut tmps ) ;
554+ self . check_and_extract_await ( env, expr, & mut expr_con , & mut expr_seq , & mut expr_tmps ) ;
554555 self . leave_await = false ;
556+ let expr_val = std:: mem:: replace ( expr, Expr ( ( ) , Pos :: NONE , Expr_ :: Null ) ) ;
557+ expr_seq. push ( Stmt ( pos. clone ( ) , Stmt_ :: Expr ( Box :: new ( expr_val) ) ) ) ;
558+ seq. append ( & mut sequentialise (
559+ pos. clone ( ) ,
560+ expr_con,
561+ expr_seq,
562+ expr_tmps,
563+ ) ) ;
555564 }
556565
557- ( * iter_tmps, * iter_block) = create_lifted_block ( pos, con , seq, tmps ) ;
566+ ( * iter_tmps, * iter_block) = create_lifted_block ( pos, vec ! [ ] , seq, vec ! [ ] ) ;
558567 }
559568
560569 fn concurrentise (
@@ -1313,7 +1322,26 @@ impl<'a> VisitorMut<'a> for LiftAwait {
13131322 Stmt_ :: For ( box ( init_exprs, test, update, block) ) => {
13141323 for expr in init_exprs {
13151324 expr. accept ( env, self . object ( ) ) ?;
1316- self . check_and_extract_await ( env, expr, & mut con, & mut seq, & mut tmps) ;
1325+ let mut init_con = vec ! [ ] ;
1326+ let mut init_seq = vec ! [ ] ;
1327+ let mut init_tmps = vec ! [ ] ;
1328+ self . leave_await = true ;
1329+ self . check_and_extract_await (
1330+ env,
1331+ expr,
1332+ & mut init_con,
1333+ & mut init_seq,
1334+ & mut init_tmps,
1335+ ) ;
1336+ self . leave_await = false ;
1337+ let expr_val = std:: mem:: replace ( expr, Expr ( ( ) , Pos :: NONE , Expr_ :: Null ) ) ;
1338+ init_seq. push ( Stmt ( pos. clone ( ) , Stmt_ :: Expr ( Box :: new ( expr_val) ) ) ) ;
1339+ seq. append ( & mut sequentialise (
1340+ pos. clone ( ) ,
1341+ init_con,
1342+ init_seq,
1343+ init_tmps,
1344+ ) ) ;
13171345 }
13181346
13191347 test. accept ( env, self . object ( ) ) ?;
0 commit comments