File tree 2 files changed +84
-13
lines changed
2 files changed +84
-13
lines changed Original file line number Diff line number Diff line change 1
1
def with_break_for ():
2
- i : i32
2
+ i : i32 = 0
3
3
for i in range (4 ):
4
- print ( i )
4
+ i += 1
5
5
break
6
6
else :
7
7
assert False
@@ -10,48 +10,117 @@ def with_break_for():
10
10
def with_break_while ():
11
11
i : i32 = 0
12
12
while i < 4 :
13
- print ( i )
13
+ i += 1
14
14
break
15
15
else :
16
- print (10 )
17
16
assert False
18
17
19
18
20
19
def no_break_for ():
21
20
i : i32
21
+ j : i32 = 0
22
22
for i in range (2 ):
23
- print ( i )
23
+ j += 1
24
24
else :
25
- print (10 )
25
+ print (j )
26
+ assert j == 2
26
27
return
27
28
assert False
28
29
29
30
def break_in_if_for ():
30
31
i : i32
32
+ j : i32 = 0
31
33
for i in range (2 ):
32
- print ( i )
34
+ j += 1
33
35
if i == 1 :
34
36
break
35
37
else :
36
- print (10 )
37
38
assert False
39
+ print (j )
40
+ assert j == 2
38
41
39
42
def nested_loop_for_for ():
40
43
i : i32
41
44
j : i32
45
+ m : i32 = 0
42
46
for i in range (2 ):
43
- print ("outer: " + str (i ))
44
47
for j in range (10 , 20 ):
45
- print (" inner: " + str (j ))
46
48
break
47
49
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
51
116
52
117
53
118
with_break_for ()
54
119
with_break_while ()
55
120
no_break_for ()
56
121
break_in_if_for ()
57
122
nested_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>
73
73
Creating a flag variable in case of a while-else loop
74
74
Creates an if statement after the loop to check if the flag was changed
75
75
*/
76
+ ASR::WhileLoop_t &xx = const_cast <ASR::WhileLoop_t&>(x);
77
+ transform_stmts (xx.m_body , xx.n_body );
76
78
if (x.n_orelse > 0 ) {
77
79
Vec<ASR::stmt_t *> result;
78
80
result.reserve (al, 3 );
You can’t perform that action at this time.
0 commit comments