diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lem_interp/interp_lib.lem | 3 | ||||
| -rw-r--r-- | src/lem_interp/run_interp.ml | 5 | ||||
| -rw-r--r-- | src/myocamlbuild.ml | 13 |
3 files changed, 16 insertions, 5 deletions
diff --git a/src/lem_interp/interp_lib.lem b/src/lem_interp/interp_lib.lem new file mode 100644 index 00000000..19f78df2 --- /dev/null +++ b/src/lem_interp/interp_lib.lem @@ -0,0 +1,3 @@ +open Interp ;; + +let eval_external name v = v ;; diff --git a/src/lem_interp/run_interp.ml b/src/lem_interp/run_interp.ml index 5708834d..940a43bb 100644 --- a/src/lem_interp/run_interp.ml +++ b/src/lem_interp/run_interp.ml @@ -1,6 +1,7 @@ open Printf ;; open Interp_ast ;; open Interp ;; +open Interp_lib ;; let lit_to_string = function | L_unit -> "unit" @@ -55,7 +56,7 @@ let act_to_string = function sprintf "write_mem %s(%s)%s = %s" (id_to_string id) (val_to_string args) (sub_to_string sub) (val_to_string value) | Call_extern (name, arg) -> - "extern call to " ^ name + sprintf "extern call %s applied to %s" name (val_to_string arg) ;; module Reg = struct @@ -77,7 +78,7 @@ let perform_action ((reg, mem) as env) = function V_lit L_unit, (Reg.update id value reg, mem) | Write_mem (id, args, None, value) -> V_lit L_unit, (reg, Mem.update (id, args) value mem) - | Call_extern (name, arg) -> failwith "extern calls not implemented" (* XXX *) + | Call_extern (name, arg) -> eval_external name arg, env | _ -> failwith "partial read/write not implemented" (* XXX *) ;; diff --git a/src/myocamlbuild.ml b/src/myocamlbuild.ml index 3974e939..fae690db 100644 --- a/src/myocamlbuild.ml +++ b/src/myocamlbuild.ml @@ -8,7 +8,14 @@ let lem_dir = "../../../lem" ;; let lem_libdir = lem_dir / "ocaml-lib/_build" ;; let lem_lib = lem_libdir / "extract" ;; let lem = lem_dir / "lem" ;; -let interp_ast = "lem_interp/interp_ast.lem" ;; + +(* Order matters - respect dependencies! *) +let lem_deps = List.map ((/) "lem_interp") [ + "interp_ast.lem"; + "interp.lem"; + "interp_lib.lem"; + ] ;; +let lem_opts = List.fold_right (fun s l -> [A "-i"; P s] @ l) lem_deps [] ;; dispatch begin function | After_rules -> @@ -17,9 +24,9 @@ dispatch begin function rule "lem -> ml" ~prod: "%.ml" - ~deps: ["%.lem"; interp_ast] + ~deps: ("%.lem" :: lem_deps) (fun env builder -> Seq [ - Cmd (S [ P lem; A "-i"; P interp_ast; A "-ocaml"; P (env "%.lem") ]); + Cmd (S ([ P lem] @ lem_opts @ [ A "-ocaml"; P (env "%.lem") ])); mv (basename (env "%.ml")) (dirname (env "%.ml")) ]); |
