diff options
| author | Pierre-Marie Pédrot | 2017-09-01 00:57:33 +0200 |
|---|---|---|
| committer | Pierre-Marie Pédrot | 2017-09-04 15:16:19 +0200 |
| commit | cd3819db675bd42510eac1bd616ca20e33e7d997 (patch) | |
| tree | 47a17c77b523d6dec70f93f60e18523c3e6351e6 /src/tac2env.ml | |
| parent | 818c49240f2ee6fccd38a556c7e90126606e1837 (diff) | |
Closures now wear the constant they originated from.
Diffstat (limited to 'src/tac2env.ml')
| -rw-r--r-- | src/tac2env.ml | 14 |
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 |
