aboutsummaryrefslogtreecommitdiff
path: root/tac2interp.ml
diff options
context:
space:
mode:
Diffstat (limited to 'tac2interp.ml')
-rw-r--r--tac2interp.ml10
1 files changed, 6 insertions, 4 deletions
diff --git a/tac2interp.ml b/tac2interp.ml
index fedbb13e7d..d508b0c967 100644
--- a/tac2interp.ml
+++ b/tac2interp.ml
@@ -15,6 +15,8 @@ open Tac2expr
exception LtacError of KerName.t * valexpr
+let val_exn = Geninterp.Val.create "ltac2:exn"
+
type environment = valexpr Id.Map.t
let empty_environment = Id.Map.empty
@@ -35,7 +37,7 @@ let return = Proofview.tclUNIT
let rec interp ist = function
| GTacAtm (AtmInt n) -> return (ValInt n)
-| GTacAtm (AtmStr s) -> return (ValStr s)
+| GTacAtm (AtmStr s) -> return (ValStr (Bytes.of_string s))
| GTacVar id -> return (get_var ist id)
| GTacRef qid -> return (get_ref ist qid)
| GTacFun (ids, e) ->
@@ -44,7 +46,7 @@ let rec interp ist = function
| GTacApp (f, args) ->
interp ist f >>= fun f ->
Proofview.Monad.List.map (fun e -> interp ist e) args >>= fun args ->
- interp_app ist f args
+ interp_app f args
| GTacLet (false, el, e) ->
let fold accu (na, e) =
interp ist e >>= fun e ->
@@ -94,11 +96,11 @@ let rec interp ist = function
let tpe = Tac2env.interp_ml_object tag in
tpe.Tac2env.ml_interp ist e >>= fun e -> return (ValExt e)
-and interp_app ist f args = match f with
+and interp_app f args = match f with
| ValCls { clos_env = ist; clos_var = ids; clos_exp = e } ->
let rec push ist ids args = match ids, args with
| [], [] -> interp ist e
- | [], _ :: _ -> interp ist e >>= fun f -> interp_app ist f args
+ | [], _ :: _ -> interp ist e >>= fun f -> interp_app f args
| _ :: _, [] ->
let cls = { clos_env = ist; clos_var = ids; clos_exp = e } in
return (ValCls cls)