aboutsummaryrefslogtreecommitdiff
path: root/src/tac2env.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/tac2env.ml')
-rw-r--r--src/tac2env.ml14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/tac2env.ml b/src/tac2env.ml
index 9aaaae0465..c04eaf7b0c 100644
--- a/src/tac2env.ml
+++ b/src/tac2env.ml
@@ -53,30 +53,32 @@ let empty_state = {
let ltac_state = Summary.ref empty_state ~name:"ltac2-state"
(** Get a dynamic value from syntactical value *)
-let rec eval_pure = function
+let rec eval_pure kn = function
| GTacAtm (AtmInt n) -> ValInt n
| GTacRef kn ->
let { gdata_expr = e } =
try KNmap.find kn ltac_state.contents.ltac_tactics
with Not_found -> assert false
in
- eval_pure e
+ eval_pure (Some kn) e
| GTacFun (na, e) ->
- ValCls { clos_env = Id.Map.empty; clos_var = na; clos_exp = e }
+ ValCls { clos_ref = kn; clos_env = Id.Map.empty; clos_var = na; clos_exp = e }
| GTacCst (_, n, []) -> ValInt n
-| GTacCst (_, n, el) -> ValBlk (n, Array.map_of_list eval_pure el)
-| GTacOpn (kn, el) -> ValOpn (kn, Array.map_of_list eval_pure el)
+| GTacCst (_, n, el) -> ValBlk (n, Array.map_of_list eval_unnamed el)
+| GTacOpn (kn, el) -> ValOpn (kn, Array.map_of_list eval_unnamed el)
| GTacAtm (AtmStr _) | GTacLet _ | GTacVar _ | GTacSet _
| GTacApp _ | GTacCse _ | GTacPrj _ | GTacPrm _ | GTacExt _ | GTacWth _ ->
anomaly (Pp.str "Term is not a syntactical value")
+and eval_unnamed e = eval_pure None e
+
let define_global kn e =
let state = !ltac_state in
ltac_state := { state with ltac_tactics = KNmap.add kn e state.ltac_tactics }
let interp_global kn =
let data = KNmap.find kn ltac_state.contents.ltac_tactics in
- (data, eval_pure data.gdata_expr)
+ (data, eval_pure (Some kn) data.gdata_expr)
let define_constructor kn t =
let state = !ltac_state in