summaryrefslogtreecommitdiff
path: root/src/lem_interp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lem_interp')
-rw-r--r--src/lem_interp/interp_lib.lem3
-rw-r--r--src/lem_interp/run_interp.ml5
2 files changed, 6 insertions, 2 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 *)
;;