diff options
| author | Kathy Gray | 2015-09-24 14:43:25 +0100 |
|---|---|---|
| committer | Kathy Gray | 2015-09-24 14:43:25 +0100 |
| commit | 9bc2b13420c1655bf3dd1cde8f90ac2d98fea0e2 (patch) | |
| tree | 0363435b02f277aae918d309b5e8b9e6e2c50aca /src | |
| parent | 1414275463ec18adbb638f27fcf5f41450164b6d (diff) | |
Beginning of expression rewriter for ocaml
Diffstat (limited to 'src')
| -rw-r--r-- | src/rewriter.ml | 18 | ||||
| -rw-r--r-- | src/rewriter.mli | 1 |
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*) |
