aboutsummaryrefslogtreecommitdiff
path: root/pretyping
diff options
context:
space:
mode:
Diffstat (limited to 'pretyping')
-rwxr-xr-xpretyping/classops.ml3
-rw-r--r--pretyping/syntax_def.ml42
2 files changed, 28 insertions, 17 deletions
diff --git a/pretyping/classops.ml b/pretyping/classops.ml
index 8cbfcc0a5b..556dbd3341 100755
--- a/pretyping/classops.ml
+++ b/pretyping/classops.ml
@@ -14,6 +14,7 @@ open Options
open Names
open Environ
open Libobject
+open Library
open Declare
open Term
open Rawterm
@@ -30,7 +31,7 @@ let cte_of_constr c = match kind_of_term c with
| IsConst (sp,_) -> ConstRef sp
| IsMutInd (ind_sp,_) -> IndRef ind_sp
| IsMutConstruct (cstr_cp,_) -> ConstructRef cstr_cp
- | IsVar id -> VarRef (find_section_variable id)
+ | IsVar id -> VarRef (Declare.find_section_variable id)
| _ -> raise Not_found
type cl_typ =
diff --git a/pretyping/syntax_def.ml b/pretyping/syntax_def.ml
index 6a171d7c46..1b875affa7 100644
--- a/pretyping/syntax_def.ml
+++ b/pretyping/syntax_def.ml
@@ -8,6 +8,8 @@
(* $Id$ *)
+open Util
+open Pp
open Names
open Rawterm
open Libobject
@@ -27,31 +29,39 @@ let _ = Summary.declare_summary
let add_syntax_constant sp c =
syntax_table := Spmap.add sp c !syntax_table
-(* Impossible de rendre récursive la définition de in_syntax_constant
- et cache_syntax_constant, alors on triche ... *)
-let cache_syntax_constant = ref (fun c -> failwith "Undefined function")
+let cache_syntax_constant (sp,c) =
+ if Nametab.exists_cci sp then
+ errorlabstrm "cache_syntax_constant"
+ [< pr_id (basename sp); 'sTR " already exists" >];
+ add_syntax_constant sp c;
+ Nametab.push_syntactic_definition sp;
+ Nametab.push_short_name_syntactic_definition sp
+
+let load_syntax_constant (sp,c) =
+ if Nametab.exists_cci sp then
+ errorlabstrm "cache_syntax_constant"
+ [< pr_id (basename sp); 'sTR " already exists" >];
+ add_syntax_constant sp c;
+ Nametab.push_syntactic_definition sp
+
+let open_syntax_constant (sp,c) =
+ Nametab.push_short_name_syntactic_definition sp
let (in_syntax_constant, out_syntax_constant) =
let od = {
- cache_function = (fun c -> !cache_syntax_constant c);
- load_function = (fun _ -> ());
- open_function = (fun c -> !cache_syntax_constant c);
+ cache_function = cache_syntax_constant;
+ load_function = load_syntax_constant;
+ open_function = open_syntax_constant;
export_function = (fun x -> Some x) }
in
declare_object ("SYNTAXCONSTANT", od)
-let _ =
- cache_syntax_constant := fun (sp,c) ->
- add_syntax_constant sp c;
- Nametab.push_object sp (in_syntax_constant c)
-
let declare_syntactic_definition id c =
let _ = add_leaf id CCI (in_syntax_constant c) in ()
let search_syntactic_definition sp = Spmap.find sp !syntax_table
-let locate_syntactic_definition sp =
- let (sp,obj) = Nametab.locate_obj sp in
- if object_tag obj = "SYNTAXCONSTANT" then sp else raise Not_found
-
-
+let locate_syntactic_definition qid =
+ match Nametab.extended_locate qid with
+ | Nametab.SyntacticDef sp -> sp
+ | _ -> raise Not_found