summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKathy Gray2015-09-24 14:43:25 +0100
committerKathy Gray2015-09-24 14:43:25 +0100
commit9bc2b13420c1655bf3dd1cde8f90ac2d98fea0e2 (patch)
tree0363435b02f277aae918d309b5e8b9e6e2c50aca /src
parent1414275463ec18adbb638f27fcf5f41450164b6d (diff)
Beginning of expression rewriter for ocaml
Diffstat (limited to 'src')
-rw-r--r--src/rewriter.ml18
-rw-r--r--src/rewriter.mli1
2 files changed, 19 insertions, 0 deletions
diff --git a/src/rewriter.ml b/src/rewriter.ml
index 5c5258a4..ec4d01aa 100644
--- a/src/rewriter.ml
+++ b/src/rewriter.ml
@@ -310,3 +310,21 @@ let rewrite_defs (Defs defs) = rewrite_defs_base
rewrite_fun = rewrite_fun;
rewrite_def = rewrite_def;
rewrite_defs = rewrite_defs_base} (Defs defs)
+
+let rewrite_exp_lift_assign_intro rewriters nmap ((E_aux (exp,(l,annot))) as full_exp) =
+ let rewrap e = E_aux (e,(l,annot)) in
+ let rewrite_rec = rewriters.rewrite_exp rewriters nmap in
+ let rewrite_base = rewrite_exp rewriters nmap in
+ match exp with
+ | E_block exps -> rewrap (E_block (List.map rewrite_rec exps))
+ | E_assign _ -> assert false
+ | _ -> rewrite_base full_exp
+
+let rewrite_defs_ocaml defs = rewrite_defs_base
+ {rewrite_exp = rewrite_exp_lift_assign_intro;
+ rewrite_pat = rewrite_pat;
+ rewrite_let = rewrite_let;
+ rewrite_lexp = rewrite_lexp;
+ rewrite_fun = rewrite_fun;
+ rewrite_def = rewrite_def;
+ rewrite_defs = rewrite_defs_base} defs
diff --git a/src/rewriter.mli b/src/rewriter.mli
index 419be937..a28eed4a 100644
--- a/src/rewriter.mli
+++ b/src/rewriter.mli
@@ -17,3 +17,4 @@ type 'a rewriters = { rewrite_exp : 'a rewriters -> nexp_map option -> 'a exp ->
val rewrite_exp : tannot rewriters -> nexp_map option -> tannot exp -> tannot exp
val rewrite_defs : tannot defs -> tannot defs
+val rewrite_defs_ocaml : tannot defs -> tannot defs (*Perform rewrites to exclude AST nodes not supported for ocaml out*)