File tree Expand file tree Collapse file tree 2 files changed +84
-13
lines changed Expand file tree Collapse file tree 2 files changed +84
-13
lines changed Original file line number Diff line number Diff line change 11def with_break_for ():
2- i : i32
2+ i : i32 = 0
33 for i in range (4 ):
4- print ( i )
4+ i += 1
55 break
66 else :
77 assert False
@@ -10,48 +10,117 @@ def with_break_for():
1010def with_break_while ():
1111 i : i32 = 0
1212 while i < 4 :
13- print ( i )
13+ i += 1
1414 break
1515 else :
16- print (10 )
1716 assert False
1817
1918
2019def no_break_for ():
2120 i : i32
21+ j : i32 = 0
2222 for i in range (2 ):
23- print ( i )
23+ j += 1
2424 else :
25- print (10 )
25+ print (j )
26+ assert j == 2
2627 return
2728 assert False
2829
2930def break_in_if_for ():
3031 i : i32
32+ j : i32 = 0
3133 for i in range (2 ):
32- print ( i )
34+ j += 1
3335 if i == 1 :
3436 break
3537 else :
36- print (10 )
3738 assert False
39+ print (j )
40+ assert j == 2
3841
3942def nested_loop_for_for ():
4043 i : i32
4144 j : i32
45+ m : i32 = 0
4246 for i in range (2 ):
43- print ("outer: " + str (i ))
4447 for j in range (10 , 20 ):
45- print (" inner: " + str (j ))
4648 break
4749 else :
48- print ("no break in outer loop" )
49- return
50- assert False
50+ m = 10
51+ print (m )
52+ assert m == 10
53+
54+ def nested_loop_for_while ():
55+ i : i32
56+ j : i32 = 10
57+ m : i32 = 0
58+ for i in range (2 ):
59+ while j < 20 :
60+ break
61+ else :
62+ m = 10
63+ print (m )
64+ assert m == 10
65+
66+ def nested_loop_while_for ():
67+ i : i32 = 0
68+ j : i32
69+ m : i32 = 0
70+ while i < 2 :
71+ i += 1
72+ for j in range (10 , 20 ):
73+ break
74+ else :
75+ print (i )
76+ assert i == 2
77+ m = 10
78+ print (m )
79+ assert m == 10
80+
81+ def nested_loop_while_while ():
82+ i : i32 = 0
83+ j : i32 = 10
84+ m : i32 = 0
85+ while i < 2 :
86+ i += 1
87+ while j < 20 :
88+ break
89+ else :
90+ print (i )
91+ assert i == 2
92+ m = 10
93+ print (m )
94+ assert m == 10
95+
96+ def nested_loop_else ():
97+ i : i32
98+ j : i32
99+ l : i32 = 0
100+ m : i32 = 0
101+ for i in range (2 ):
102+ l += 1
103+ m : i32 = 0
104+ for j in range (10 , 12 ):
105+ m += 1
106+ else :
107+ print (m )
108+ assert m == 2
109+ l += 10
110+ else :
111+ print (l )
112+ assert l == 22
113+ m = 10
114+ print (m )
115+ assert m == 10
51116
52117
53118with_break_for ()
54119with_break_while ()
55120no_break_for ()
56121break_in_if_for ()
57122nested_loop_for_for ()
123+ nested_loop_for_while ()
124+ nested_loop_while_for ()
125+ nested_loop_while_while ()
126+ nested_loop_else ()
Original file line number Diff line number Diff line change @@ -73,6 +73,8 @@ class WhileLoopVisitor : public ASR::StatementWalkVisitor<WhileLoopVisitor>
7373 Creating a flag variable in case of a while-else loop
7474 Creates an if statement after the loop to check if the flag was changed
7575 */
76+ ASR::WhileLoop_t &xx = const_cast <ASR::WhileLoop_t&>(x);
77+ transform_stmts (xx.m_body , xx.n_body );
7678 if (x.n_orelse > 0 ) {
7779 Vec<ASR::stmt_t *> result;
7880 result.reserve (al, 3 );
You can’t perform that action at this time.
0 commit comments