aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2011-10-08 12:45:02 +0000
committerGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2011-10-08 12:45:02 +0000
commitaea9ef97a2173d9ff7efc2dcc0aed0c420132b83 (patch)
tree40e9ac8be01517699476050002bf12b94b195493
parent6b59b0f2a993c56cf0adc1d052a98b0df334a0f7 (diff)
Scheme names: Use unprobable names + ensure names do not hide existing names
when schemes are generated for internal use of Coq. Ideally, I would like to add these names asynchronously in name spaces relevant for the corresponding inductive type, what modules do not support since modules cannot be reopened. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@14529 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--toplevel/ind_tables.ml11
1 files changed, 11 insertions, 0 deletions
diff --git a/toplevel/ind_tables.ml b/toplevel/ind_tables.ml
index 51dc1dc30..bb5ab795d 100644
--- a/toplevel/ind_tables.ml
+++ b/toplevel/ind_tables.ml
@@ -109,8 +109,19 @@ let declare_individual_scheme_object s ?(aux="") f =
let declare_scheme kind indcl =
Lib.add_anonymous_leaf (inScheme (kind,indcl))
+let is_visible_name id =
+ try ignore (Nametab.locate (Libnames.qualid_of_ident id)); true
+ with Not_found -> false
+
+let compute_name internal id =
+ match internal with
+ | KernelVerbose | UserVerbose -> id
+ | KernelSilent ->
+ Namegen.next_ident_away_from (add_prefix "internal_" id) is_visible_name
+
let define internal id c =
let fd = declare_constant ~internal in
+ let id = compute_name internal id in
let kn = fd id
(DefinitionEntry
{ const_entry_body = c;