aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--grammar/argextend.ml413
-rw-r--r--parsing/extrawit.ml8
-rw-r--r--parsing/extrawit.mli2
-rw-r--r--tactics/tacintern.ml14
-rw-r--r--tactics/tacinterp.ml18
-rw-r--r--tactics/tacsubst.ml13
6 files changed, 32 insertions, 36 deletions
diff --git a/grammar/argextend.ml4 b/grammar/argextend.ml4
index eb4630394..dfcaa4e84 100644
--- a/grammar/argextend.ml4
+++ b/grammar/argextend.ml4
@@ -22,14 +22,11 @@ let qualified_name loc s =
qualified_name loc path name
let mk_extraarg loc s =
- if Extrawit.tactic_genarg_level s = None then
- try
- let name = Genarg.get_name0 s in
- qualified_name loc name
- with Not_found ->
- <:expr< $lid:"wit_"^s$ >>
- else
- qualified_name loc ("Extrawit.wit_" ^ s)
+ try
+ let name = Genarg.get_name0 s in
+ qualified_name loc name
+ with Not_found ->
+ <:expr< $lid:"wit_"^s$ >>
let rec make_wit loc = function
| IntOrVarArgType -> <:expr< Constrarg.wit_int_or_var >>
diff --git a/parsing/extrawit.ml b/parsing/extrawit.ml
index 8332bd49f..c20f43bd5 100644
--- a/parsing/extrawit.ml
+++ b/parsing/extrawit.ml
@@ -37,6 +37,8 @@ let tactic_genarg_level s =
else None
else None
-let is_tactic_genarg = function
-| ExtraArgType s -> tactic_genarg_level s <> None
-| _ -> false
+let () =
+ for i = 0 to 5 do
+ let name = Printf.sprintf "Extrawit.wit_tactic%i" i in
+ Genarg.register_name0 (wit_tactic i) name
+ done
diff --git a/parsing/extrawit.mli b/parsing/extrawit.mli
index a74c8a259..1bd5cdb89 100644
--- a/parsing/extrawit.mli
+++ b/parsing/extrawit.mli
@@ -24,6 +24,4 @@ val wit_tactic3 : (raw_tactic_expr, glob_tactic_expr, glob_tactic_expr) genarg_t
val wit_tactic4 : (raw_tactic_expr, glob_tactic_expr, glob_tactic_expr) genarg_type
val wit_tactic5 : (raw_tactic_expr, glob_tactic_expr, glob_tactic_expr) genarg_type
-val is_tactic_genarg : argument_type -> bool
-
val tactic_genarg_level : string -> int option
diff --git a/tactics/tacintern.ml b/tactics/tacintern.ml
index 6f0d7525d..6d50c02e2 100644
--- a/tactics/tacintern.ml
+++ b/tactics/tacintern.ml
@@ -795,13 +795,7 @@ and intern_genarg ist x =
| OptArgType _ -> app_opt (intern_genarg ist) x
| PairArgType _ -> app_pair (intern_genarg ist) (intern_genarg ist) x
| ExtraArgType s ->
- match tactic_genarg_level s with
- | Some n ->
- (* Special treatment of tactic arguments *)
- in_gen (glbwit (wit_tactic n)) (intern_tactic_or_tacarg ist
- (out_gen (rawwit (wit_tactic n)) x))
- | None ->
- snd (Genintern.generic_intern ist x)
+ snd (Genintern.generic_intern ist x)
(** Other entry points *)
@@ -954,6 +948,12 @@ let () =
in
Genintern.register_intern0 wit_intro_pattern intern_intro_pattern
+let () =
+ let intern ist tac = (ist, intern_tactic_or_tacarg ist tac) in
+ for i = 0 to 5 do
+ Genintern.register_intern0 (wit_tactic i) intern
+ done
+
(***************************************************************************)
(* Backwarding recursive needs of tactic glob/interp/eval functions *)
diff --git a/tactics/tacinterp.ml b/tactics/tacinterp.ml
index 58c64a831..67fa0ed7b 100644
--- a/tactics/tacinterp.ml
+++ b/tactics/tacinterp.ml
@@ -1451,15 +1451,6 @@ and interp_genarg ist gl x =
| OptArgType _ -> app_opt (interp_genarg ist gl) x
| PairArgType _ -> app_pair (interp_genarg ist gl) (interp_genarg ist gl) x
| ExtraArgType s ->
- match tactic_genarg_level s with
- | Some n ->
- let f = VFun(extract_trace ist,ist.lfun,[],
- out_gen (glbwit (wit_tactic n)) x)
- in
- (* Special treatment of tactic arguments *)
- in_gen (topwit (wit_tactic n))
- (TacArg(dloc,valueIn (of_tacvalue f)))
- | None ->
let (sigma,v) = Geninterp.generic_interp ist gl x in
evdref:=sigma;
v
@@ -2068,6 +2059,15 @@ let () =
let interp ist gl pat = (gl.sigma, interp_intro_pattern ist gl pat) in
Geninterp.register_interp0 wit_intro_pattern interp
+let () =
+ let interp ist gl tac =
+ let f = VFun (extract_trace ist, ist.lfun, [], tac) in
+ (gl.sigma, TacArg (dloc, valueIn (of_tacvalue f)))
+ in
+ for i = 0 to 5 do
+ Geninterp.register_interp0 (wit_tactic i) interp
+ done
+
(***************************************************************************)
(* Other entry points *)
diff --git a/tactics/tacsubst.ml b/tactics/tacsubst.ml
index 2e84d4425..006885616 100644
--- a/tactics/tacsubst.ml
+++ b/tactics/tacsubst.ml
@@ -322,16 +322,15 @@ and subst_genarg subst (x:glob_generic_argument) =
| OptArgType _ -> app_opt (subst_genarg subst) x
| PairArgType _ -> app_pair (subst_genarg subst) (subst_genarg subst) x
| ExtraArgType s ->
- match Extrawit.tactic_genarg_level s with
- | Some n ->
- (* Special treatment of tactic arguments *)
- in_gen (glbwit (Extrawit.wit_tactic n))
- (subst_tactic subst (out_gen (glbwit (Extrawit.wit_tactic n)) x))
- | None ->
- Genintern.generic_substitute subst x
+ Genintern.generic_substitute subst x
(** Registering *)
let () = Genintern.register_subst0 wit_intro_pattern (fun _ v -> v)
+let () =
+ for i = 0 to 5 do
+ Genintern.register_subst0 (Extrawit.wit_tactic i) subst_tactic
+ done
+
let _ = Hook.set Auto.extern_subst_tactic subst_tactic