|
|
@@ -1,9 +1,15 @@
|
|
|
open Ast
|
|
|
open Util
|
|
|
|
|
|
-let rec replace_var var replacement = function
|
|
|
- | Var (name, loc) when name = var -> Var (replacement, loc)
|
|
|
- | node -> transform_children (replace_var var replacement) node
|
|
|
+let rec replace_var var replacement node =
|
|
|
+ let trav = (replace_var var replacement) in
|
|
|
+ match node with
|
|
|
+ | Var (name, loc) when name = var ->
|
|
|
+ Var (replacement, loc)
|
|
|
+ | For (counter, start, stop, step, body, loc) when counter = var ->
|
|
|
+ For (replacement, trav start, trav stop, trav step, trav body, loc)
|
|
|
+ | node ->
|
|
|
+ transform_children trav node
|
|
|
|
|
|
let for_to_while node =
|
|
|
let new_vars = ref [] in
|
|
|
@@ -40,8 +46,7 @@ let for_to_while node =
|
|
|
|
|
|
| node -> transform_children traverse node
|
|
|
in
|
|
|
- let node = traverse node in
|
|
|
- (node, new_vars)
|
|
|
+ (traverse node, new_vars)
|
|
|
|
|
|
let rec var_init = function
|
|
|
(* Move global initialisations to __init function *)
|