aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbertot2004-02-12 12:19:43 +0000
committerbertot2004-02-12 12:19:43 +0000
commit61de148a1b0c357c54e7fecb9152c1f153552cf3 (patch)
treefbcbadda4dbc6e661764ed286551b02c8d786918
parentd117e24469c991e3e3ff9e5defc0d9d9aff00865 (diff)
Implicits can have an optional list of argument, which is different
from an empty list of arguments. in H at 2 |- * was badly translated in clauses (for replacement tactics) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@5318 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--contrib/interface/ascent.mli5
-rw-r--r--contrib/interface/vtp.ml5
-rw-r--r--contrib/interface/xlate.ml13
3 files changed, 17 insertions, 6 deletions
diff --git a/contrib/interface/ascent.mli b/contrib/interface/ascent.mli
index 30c11770af..36b9b678de 100644
--- a/contrib/interface/ascent.mli
+++ b/contrib/interface/ascent.mli
@@ -78,7 +78,7 @@ and ct_COMMAND =
| CT_hint_extern of ct_INT * ct_FORMULA * ct_TACTIC_COM * ct_ID_LIST
| CT_hintrewrite of ct_ORIENTATION * ct_FORMULA_NE_LIST * ct_ID * ct_TACTIC_COM
| CT_hints of ct_ID * ct_ID_NE_LIST * ct_ID_LIST
- | CT_implicits of ct_ID * ct_ID_LIST
+ | CT_implicits of ct_ID * ct_ID_LIST_OPT
| CT_import_id of ct_ID_NE_LIST
| CT_ind_scheme of ct_SCHEME_SPEC_LIST
| CT_infix of ct_STRING * ct_ID * ct_MODIFIER_LIST * ct_ID_OPT
@@ -321,6 +321,9 @@ and ct_ID_LIST =
CT_id_list of ct_ID list
and ct_ID_LIST_LIST =
CT_id_list_list of ct_ID_LIST list
+and ct_ID_LIST_OPT =
+ CT_coerce_ID_LIST_to_ID_LIST_OPT of ct_ID_LIST
+ | CT_coerce_NONE_to_ID_LIST_OPT of ct_NONE
and ct_ID_NE_LIST =
CT_id_ne_list of ct_ID * ct_ID list
and ct_ID_NE_LIST_OR_STAR =
diff --git a/contrib/interface/vtp.ml b/contrib/interface/vtp.ml
index 55a1488465..94d338b10d 100644
--- a/contrib/interface/vtp.ml
+++ b/contrib/interface/vtp.ml
@@ -251,7 +251,7 @@ and fCOMMAND = function
fNODE "hints" 3
| CT_implicits(x1, x2) ->
fID x1;
- fID_LIST x2;
+ fID_LIST_OPT x2;
fNODE "implicits" 2
| CT_import_id(x1) ->
fID_NE_LIST x1;
@@ -871,6 +871,9 @@ and fID_LIST_LIST = function
| CT_id_list_list l ->
(List.iter fID_LIST l);
fNODE "id_list_list" (List.length l)
+and fID_LIST_OPT = function
+| CT_coerce_ID_LIST_to_ID_LIST_OPT x -> fID_LIST x
+| CT_coerce_NONE_to_ID_LIST_OPT x -> fNONE x
and fID_NE_LIST = function
| CT_id_ne_list(x,l) ->
fID x;
diff --git a/contrib/interface/xlate.ml b/contrib/interface/xlate.ml
index 07c59aa769..f09a8595bb 100644
--- a/contrib/interface/xlate.ml
+++ b/contrib/interface/xlate.ml
@@ -481,9 +481,13 @@ let xlate_hyp_location =
CT_intype(xlate_ident id, nums_to_int_list nums)
| AI (_,id), nums, (InHypValueOnly,_) ->
CT_invalue(xlate_ident id, nums_to_int_list nums)
- | AI (_,id), _, (InHyp,_) ->
+ | AI (_,id), [], (InHyp,_) ->
CT_coerce_UNFOLD_to_HYP_LOCATION
(CT_coerce_ID_to_UNFOLD (xlate_ident id))
+ | AI (_,id), a::l, (InHyp,_) ->
+ CT_coerce_UNFOLD_to_HYP_LOCATION
+ (CT_unfold_occ (xlate_ident id,
+ CT_int_ne_list(CT_int a, nums_to_int_list_aux l)))
| MetaId _, _,_ ->
xlate_error "MetaId not supported in xlate_hyp_location (should occur only in quotations)"
@@ -1970,14 +1974,15 @@ let rec xlate_vernac =
CT_implicits
(reference_to_ct_ID id,
match opt_positions with
- None -> CT_id_list[]
+ None -> CT_coerce_NONE_to_ID_LIST_OPT CT_none
| Some l ->
- CT_id_list
+ CT_coerce_ID_LIST_to_ID_LIST_OPT
+ (CT_id_list
(List.map
(function ExplByPos x
-> xlate_error
"explication argument by rank is obsolete"
- | ExplByName id -> CT_ident (string_of_id id)) l))
+ | ExplByName id -> CT_ident (string_of_id id)) l)))
| VernacReserve((_,a)::l, f) ->
CT_reserve(CT_id_ne_list(xlate_ident a,
List.map (fun (_,x) -> xlate_ident x) l),