|
|
@@ -136,12 +136,18 @@ let for_to_while node =
|
|
|
Assign (_i, None, start, locof start);
|
|
|
Assign (_stop, None, stop, locof stop);
|
|
|
Assign (_step, None, step, locof step);
|
|
|
- While (cond, traverse new_vars (Block (
|
|
|
+ traverse new_vars (While (cond, (Block (
|
|
|
block_body (replace_var counter _i body) @
|
|
|
[Assign (_i, None, Binop (Add, vi, vstep, noloc), noloc)]
|
|
|
- )), loc);
|
|
|
+ )), loc));
|
|
|
]
|
|
|
|
|
|
+ (* Transform while-loops to do-while loops in if-statements *)
|
|
|
+ | While (cond, body, loc) ->
|
|
|
+ let cond = traverse new_vars cond in
|
|
|
+ let body = traverse new_vars body in
|
|
|
+ Block [If (cond, Block [DoWhile (cond, body, loc)], loc)]
|
|
|
+
|
|
|
| node -> transform_children (traverse new_vars) node
|
|
|
in
|
|
|
traverse (ref []) node
|