aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfilliatr1999-11-27 09:24:28 +0000
committerfilliatr1999-11-27 09:24:28 +0000
commit2a49a1239b1e69fa0eb5695166fe9808c9774314 (patch)
tree1006bf68c0fc02f1d929b1ef50f2e2eccfb41ed8
parent02acee92b76ce86ca983ad779dbd20a096c6d799 (diff)
fin Recordops, et debut Evarutil
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@158 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--.depend46
-rw-r--r--kernel/term.ml3
-rw-r--r--kernel/term.mli3
-rw-r--r--library/indrec.mli5
-rw-r--r--pretyping/evarutil.ml146
-rwxr-xr-xpretyping/recordops.ml83
6 files changed, 134 insertions, 152 deletions
diff --git a/.depend b/.depend
index 3d665b34d6..875f63a479 100644
--- a/.depend
+++ b/.depend
@@ -67,8 +67,6 @@ parsing/printer.cmi: parsing/coqast.cmi kernel/names.cmi lib/pp.cmi \
kernel/sign.cmi kernel/term.cmi
parsing/termast.cmi: parsing/coqast.cmi kernel/names.cmi kernel/sign.cmi \
kernel/term.cmi
-pretyping/astterm.cmi: kernel/evd.cmi kernel/names.cmi pretyping/rawterm.cmi \
- kernel/term.cmi
pretyping/classops.cmi: library/declare.cmi kernel/environ.cmi kernel/evd.cmi \
library/libobject.cmi kernel/names.cmi lib/pp.cmi kernel/term.cmi
pretyping/coercion.cmi: kernel/environ.cmi pretyping/evarutil.cmi \
@@ -348,12 +346,12 @@ parsing/ast.cmo: parsing/coqast.cmi lib/dyn.cmi lib/hashcons.cmi \
kernel/names.cmi parsing/pcoq.cmi lib/pp.cmi lib/util.cmi parsing/ast.cmi
parsing/ast.cmx: parsing/coqast.cmx lib/dyn.cmx lib/hashcons.cmx \
kernel/names.cmx parsing/pcoq.cmi lib/pp.cmx lib/util.cmx parsing/ast.cmi
-parsing/astterm.cmo: parsing/ast.cmi pretyping/astterm.cmi kernel/environ.cmi \
+parsing/astterm.cmo: parsing/ast.cmi parsing/astterm.cmi kernel/environ.cmi \
kernel/evd.cmi kernel/generic.cmi toplevel/himsg.cmi kernel/names.cmi \
parsing/pcoq.cmi lib/pp.cmi parsing/printer.cmi pretyping/rawterm.cmi \
kernel/term.cmi parsing/termast.cmi toplevel/vernac.cmi \
parsing/astterm.cmi
-parsing/astterm.cmx: parsing/ast.cmx pretyping/astterm.cmi kernel/environ.cmx \
+parsing/astterm.cmx: parsing/ast.cmx parsing/astterm.cmx kernel/environ.cmx \
kernel/evd.cmx kernel/generic.cmx toplevel/himsg.cmx kernel/names.cmx \
parsing/pcoq.cmi lib/pp.cmx parsing/printer.cmx pretyping/rawterm.cmi \
kernel/term.cmx parsing/termast.cmx toplevel/vernac.cmx \
@@ -421,21 +419,13 @@ pretyping/evarconv.cmx: pretyping/classops.cmx pretyping/evarutil.cmx \
kernel/generic.cmx kernel/names.cmx pretyping/recordops.cmx \
kernel/reduction.cmx kernel/term.cmx lib/util.cmx pretyping/evarconv.cmi
pretyping/evarutil.cmo: kernel/environ.cmi kernel/evd.cmi kernel/generic.cmi \
- kernel/names.cmi lib/pp.cmi parsing/printer.cmi kernel/reduction.cmi \
- kernel/term.cmi lib/util.cmi pretyping/evarutil.cmi
+ library/indrec.cmi kernel/names.cmi lib/pp.cmi kernel/reduction.cmi \
+ kernel/sign.cmi kernel/term.cmi kernel/univ.cmi lib/util.cmi \
+ pretyping/evarutil.cmi
pretyping/evarutil.cmx: kernel/environ.cmx kernel/evd.cmx kernel/generic.cmx \
- kernel/names.cmx lib/pp.cmx parsing/printer.cmx kernel/reduction.cmx \
- kernel/term.cmx lib/util.cmx pretyping/evarutil.cmi
-pretyping/multcase.cmo: parsing/ast.cmi pretyping/astterm.cmi \
- kernel/environ.cmi pretyping/evarconv.cmi kernel/evd.cmi \
- kernel/generic.cmi toplevel/himsg.cmi library/indrec.cmi kernel/names.cmi \
- lib/pp.cmi pretyping/rawterm.cmi kernel/reduction.cmi kernel/term.cmi \
- kernel/typing.cmi pretyping/multcase.cmi
-pretyping/multcase.cmx: parsing/ast.cmx pretyping/astterm.cmi \
- kernel/environ.cmx pretyping/evarconv.cmx kernel/evd.cmx \
- kernel/generic.cmx toplevel/himsg.cmx library/indrec.cmx kernel/names.cmx \
- lib/pp.cmx pretyping/rawterm.cmi kernel/reduction.cmx kernel/term.cmx \
- kernel/typing.cmx pretyping/multcase.cmi
+ library/indrec.cmx kernel/names.cmx lib/pp.cmx kernel/reduction.cmx \
+ kernel/sign.cmx kernel/term.cmx kernel/univ.cmx lib/util.cmx \
+ pretyping/evarutil.cmi
pretyping/pretype_errors.cmo: pretyping/pretype_errors.cmi
pretyping/pretype_errors.cmx: pretyping/pretype_errors.cmi
pretyping/pretyping.cmo: parsing/ast.cmi pretyping/classops.cmi \
@@ -451,23 +441,19 @@ pretyping/pretyping.cmx: parsing/ast.cmx pretyping/classops.cmx \
pretyping/coercion.cmx kernel/environ.cmx pretyping/evarconv.cmx \
pretyping/evarutil.cmx kernel/evd.cmx kernel/generic.cmx \
library/indrec.cmx kernel/inductive.cmx kernel/instantiate.cmx \
- pretyping/multcase.cmx kernel/names.cmx lib/pp.cmx \
+ pretyping/multcase.cmi kernel/names.cmx lib/pp.cmx \
pretyping/pretype_errors.cmx pretyping/rawterm.cmi \
- pretyping/recordops.cmx kernel/reduction.cmx pretyping/retyping.cmx \
+ pretyping/recordops.cmx kernel/reduction.cmx pretyping/retyping.cmi \
kernel/sign.cmx kernel/term.cmx kernel/type_errors.cmx kernel/typeops.cmx \
lib/util.cmx pretyping/pretyping.cmi
-pretyping/recordops.cmo: library/libobject.cmi library/library.cmi \
- kernel/names.cmi lib/pp.cmi kernel/typeops.cmi lib/util.cmi \
+pretyping/recordops.cmo: pretyping/classops.cmi library/lib.cmi \
+ library/libobject.cmi library/library.cmi kernel/names.cmi lib/pp.cmi \
+ library/summary.cmi kernel/term.cmi kernel/typeops.cmi lib/util.cmi \
pretyping/recordops.cmi
-pretyping/recordops.cmx: library/libobject.cmx library/library.cmx \
- kernel/names.cmx lib/pp.cmx kernel/typeops.cmx lib/util.cmx \
+pretyping/recordops.cmx: pretyping/classops.cmx library/lib.cmx \
+ library/libobject.cmx library/library.cmx kernel/names.cmx lib/pp.cmx \
+ library/summary.cmx kernel/term.cmx kernel/typeops.cmx lib/util.cmx \
pretyping/recordops.cmi
-pretyping/retyping.cmo: kernel/environ.cmi kernel/generic.cmi \
- library/global.cmi kernel/names.cmi kernel/sign.cmi kernel/term.cmi \
- kernel/typeops.cmi lib/util.cmi pretyping/retyping.cmi
-pretyping/retyping.cmx: kernel/environ.cmx kernel/generic.cmx \
- library/global.cmx kernel/names.cmx kernel/sign.cmx kernel/term.cmx \
- kernel/typeops.cmx lib/util.cmx pretyping/retyping.cmi
proofs/clenv.cmo: kernel/environ.cmi kernel/evd.cmi kernel/generic.cmi \
kernel/instantiate.cmi proofs/logic.cmi kernel/names.cmi lib/pp.cmi \
proofs/proof_trees.cmi kernel/reduction.cmi kernel/sign.cmi \
diff --git a/kernel/term.ml b/kernel/term.ml
index 33056e5ba6..91061c7ca3 100644
--- a/kernel/term.ml
+++ b/kernel/term.ml
@@ -147,6 +147,9 @@ let mkAppList a l = DOPN (AppL, Array.of_list (a::l))
(* The array of terms correspond to the variables introduced in the section *)
let mkConst sp a = DOPN (Const sp, a)
+(* Constructs an existential variable *)
+let mkEvar n a = DOPN (Evar n, a)
+
(* Constructs an abstract object *)
let mkAbst sp a = DOPN (Abst sp, a)
diff --git a/kernel/term.mli b/kernel/term.mli
index b2ca8658ea..b04248a040 100644
--- a/kernel/term.mli
+++ b/kernel/term.mli
@@ -157,6 +157,9 @@ val mkAppList : constr -> constr list -> constr
(* The array of terms correspond to the variables introduced in the section *)
val mkConst : section_path -> constr array -> constr
+(* Constructs an existential variable *)
+val mkEvar : int -> constr array -> constr
+
(* Constructs an abstract object *)
val mkAbst : section_path -> constr array -> constr
diff --git a/library/indrec.mli b/library/indrec.mli
index 1722bef12a..da2ae3102c 100644
--- a/library/indrec.mli
+++ b/library/indrec.mli
@@ -52,3 +52,8 @@ val pred_case_ml_onebranch : unsafe_env ->'c evar_map -> bool ->
val make_case_ml :
bool -> constr -> constr -> case_info -> constr array -> constr
+
+
+(*s Auxiliary functions. TODO: les déplacer ailleurs. *)
+
+val prod_create : unsafe_env -> constr * constr -> constr
diff --git a/pretyping/evarutil.ml b/pretyping/evarutil.ml
index 99de984322..f51bea7753 100644
--- a/pretyping/evarutil.ml
+++ b/pretyping/evarutil.ml
@@ -1,23 +1,23 @@
-(* $Id$ *)
-open Util;;
-open Pp;;
-open Names;;
-open Impuniv;;
-open Generic;;
-open Term;;
-open Printer;;
-open Termenv;;
-open Evd;;
-open Reduction;;
+(* $Id$ *)
+open Util
+open Pp
+open Names
+open Univ
+open Generic
+open Term
+open Sign
+open Environ
+open Evd
+open Reduction
+open Indrec
let rec filter_unique = function
- [] -> []
+ | [] -> []
| x::l ->
- if List.mem x l then filter_unique (filter (fun y -> x<>y) l)
+ if List.mem x l then filter_unique (List.filter (fun y -> x<>y) l)
else x::filter_unique l
-;;
let distinct_id_list =
let rec drec fresh = function
@@ -25,7 +25,7 @@ let distinct_id_list =
| id::rest ->
let id' = next_ident_away_from id fresh in drec (id'::fresh) rest
in drec []
-;;
+
let filter_sign p sign x =
sign_it
@@ -34,7 +34,7 @@ let filter_sign p sign x =
if disc then (v', id::ids, sgn) else (v', ids, add_sign (id,ty) sgn))
sign
(x,[],nil_sign)
-;;
+
(*------------------------------------*
@@ -42,44 +42,46 @@ let filter_sign p sign x =
*------------------------------------*)
(* All ids of sign must be distincts! *)
-let new_isevar_sign env sigma typ args k =
- let sign = context env in
- (if not (distinct (ids_of_sign sign))
- then error "new_isevar_sign: two vars have the same name");
- let newsp = new_isevar_path k in
- (Evd.add_noinfo sigma newsp sign typ, mkConst newsp args)
-;;
+let new_isevar_sign env sigma typ args =
+ let sign = get_globals (context env) in
+ if not (list_distinct (ids_of_sign sign)) then
+ error "new_isevar_sign: two vars have the same name";
+ let newev = Evd.new_evar() in
+ let info = { evar_concl = typ; evar_env = env;
+ evar_body = Evar_empty; evar_info = () } in
+ (Evd.add sigma newev info, mkEvar newev args)
+
(* We don't try to guess in which sort the type should be defined, since
any type has type Type. May cause some trouble, but not so far... *)
-let dummy_sort = mkType dummy_univ;;
+let dummy_sort = mkType dummy_univ
(* Declaring any type to be in the sort Type shouldn't be harmful since
cumulativity now includes Prop and Set in Type. *)
-let new_type_var sigma sign k =
+let new_type_var env sigma =
+ let sign = get_globals (context env) in
let args = (Array.of_list (List.map mkVar (ids_of_sign sign))) in
- let (sigma',c) = new_isevar_sign sigma sign dummy_sort args k in
- (sigma', make_type c (Type dummy_univ))
-;;
+ let (sigma',c) = new_isevar_sign env sigma dummy_sort args in
+ (sigma', make_typed c (Type dummy_univ))
let split_evar_to_arrow sigma c =
- let (sp,args) = destConst c in
- let k = kind_of_path sp in
- let evd = Evd.map sigma sp in
- let hyps= evd.hyps in
- let (sigma1,dom) = new_type_var sigma hyps k in
+ let (ev,args) = destEvar c in
+ let evd = Evd.map sigma ev in
+ let evenv = evd.evar_env in
+ let (sigma1,dom) = new_type_var evenv sigma in
+ let hyps = get_globals (context evenv) in
let nvar = next_ident_away (id_of_string "x") (ids_of_sign hyps) in
- let nhyps = add_sign (nvar,dom) hyps in
- let (sigma2,rng) = new_type_var sigma1 nhyps k in
- let prod = Environ.prod_create (incast_type dom,
- subst_var nvar (body_of_type rng)) in
- let sigma3 = Evd.define sigma2 sp prod in
+ let nevenv = push_var (nvar,dom) evenv in
+ let (sigma2,rng) = new_type_var nevenv sigma1 in
+ let prod = prod_create nevenv (incast_type dom,
+ subst_var nvar (body_of_type rng)) in
+ let sigma3 = Evd.define sigma2 ev prod in
let dsp = path_of_const (body_of_type dom) in
let rsp = path_of_const (body_of_type rng) in
(sigma3,
mkCast (mkConst dsp args) dummy_sort,
- mkCast (mkConst rsp (cons_vect (mkRel 1) args)) dummy_sort)
-;;
+ mkCast (mkConst rsp (array_cons (mkRel 1) args)) dummy_sort)
+
(* Redefines an evar with a smaller context (i.e. it may depend on less
* variables) such that c becomes closed.
@@ -90,11 +92,10 @@ let split_evar_to_arrow sigma c =
* a prefix of ?2's env, included in ?1's env.
*)
let do_restrict_hyps sigma c =
- let (sp,argsv) = destConst c in
- let k = kind_of_path sp in
+ let (ev,argsv) = destEvar c in
let args = Array.to_list argsv in
- let evd = Evd.map sigma sp in
- let hyps= evd.hyps in
+ let evd = Evd.map sigma ev in
+ let env = evd.evar_env in
let (_,(rsign,ncargs)) =
List.fold_left (fun (sign,(rs,na)) a ->
(tl_sign sign,
@@ -112,7 +113,7 @@ let do_restrict_hyps sigma c =
let (sigma',nc) = new_isevar_sign sigma nsign evd.concl nargs k in
let sigma'' = Evd.define sigma' sp nc in
(sigma'', mkConst (path_of_const nc) (Array.of_list (List.rev ncargs)))
-;;
+
@@ -135,17 +136,17 @@ let ise_try isevars l =
(try f() with reraise -> isevars := u; raise reraise)
or (isevars := u; test l)
in test l
-;;
+
(* say if the section path sp corresponds to an existential *)
-let ise_in_dom isevars sp = Evd.in_dom !isevars sp;;
+let ise_in_dom isevars sp = Evd.in_dom !isevars sp
(* map the given section path to the evar_declaration *)
-let ise_map isevars sp = Evd.map !isevars sp;;
+let ise_map isevars sp = Evd.map !isevars sp
(* define the existential of section path sp as the constr body *)
-let ise_define isevars sp body = isevars := Evd.define !isevars sp body;;
+let ise_define isevars sp body = isevars := Evd.define !isevars sp body
(* Does k corresponds to an (un)defined existential ? *)
let ise_undefined isevars k =
@@ -154,13 +155,13 @@ let ise_undefined isevars k =
ise_in_dom isevars (path_of_const k) &
not (defined_const !isevars k)
| _ -> false
-;;
+
let ise_defined isevars k =
match k with
DOPN(Const _,_) -> Termenv.defined_existential !isevars k
| _ -> false
-;;
+
let restrict_hyps isevars c =
if ise_undefined isevars c & not (closed0 c)
@@ -169,7 +170,7 @@ let restrict_hyps isevars c =
isevars := sigma;
rc)
else c
-;;
+
let error_occur_check sp rhs =
@@ -178,7 +179,7 @@ let error_occur_check sp rhs =
errorlabstrm "Trad.occur_check"
[< 'sTR"Occur check failed: tried to define "; 'sTR id;
'sTR" with term"; 'bRK(1,1); pt >]
-;;
+
(* We need the environment here *)
let error_not_clean sp t =
@@ -189,7 +190,7 @@ let error_not_clean sp t =
[< 'sTR"Tried to define "; 'sTR id;
'sTR" with a term using variable "; var; 'sPC;
'sTR"which is not in its scope." >]
-;;
+
(* We try to instanciate the evar assuming the body won't depend
* on arguments that are not Rels or VARs, or appearing several times.
@@ -216,7 +217,7 @@ let real_clean isevars sp args rhs =
let body = subs 0 rhs in
if not (closed0 body) then error_not_clean sp body;
body
-;;
+
(* [new_isevar] declares a new existential in an env env with type typ *)
@@ -240,7 +241,7 @@ let new_isevar isevars env typ k =
new_isevar_sign !isevars sign' typ' (Array.of_list newargs) k in
isevars := sigma';
(evar,typ')
-;;
+
(* [evar_define] solves the problem lhs = rhs when lhs is an uninstantiated
@@ -272,7 +273,7 @@ let evar_define isevars lhs rhs =
let body = real_clean isevars sp worklist rhs in
ise_define isevars sp body;
[sp]
-;;
+
(* Solve pbs (?i x1..xn) = (?i y1..yn) which arises often in fixpoint
@@ -321,7 +322,7 @@ let rec solve_simple_eqn conv_algo isevars ((pbty,t1,t2) as pb) =
| (true,false) -> Some (evar_define isevars t1 t2)
| (false,true) -> Some (evar_define isevars t2 t1)
| _ -> None
-;;
+
(*-------------------*)
(* Now several auxiliary functions for the conversion algorithms modulo
@@ -347,7 +348,7 @@ let has_undefined_isevars isevars c =
| (VAR _|Rel _|DOP0 _) -> ()
in (try (hasrec c ; false) with Failure "caught" -> true)
-;;
+
let head_is_exist isevars =
let rec hrec = function
@@ -356,7 +357,7 @@ let head_is_exist isevars =
| DOP2(Cast,c,_) -> hrec c
| _ -> false
in hrec
-;;
+
let rec is_eliminator = function
@@ -364,11 +365,11 @@ let rec is_eliminator = function
| DOPN(MutCase _,_) -> true
| DOP2 (Cast,c,_) -> is_eliminator c
| _ -> false
-;;
+
let head_is_embedded_exist isevars c =
(head_is_exist isevars c) & (is_eliminator c)
-;;
+
let headconstant =
let rec hrec = function
@@ -380,14 +381,14 @@ let headconstant =
| DOP2(Cast,c,_) -> hrec c
| _ -> failwith "headconstant"
in hrec
-;;
+
let status_changed lsp (pbty,t1,t2) =
try List.mem (headconstant t1) lsp or List.mem (headconstant t2) lsp
with Failure _ ->
try List.mem (headconstant t2) lsp
with Failure _ -> false
-;;
+
@@ -410,13 +411,13 @@ type trad_constraint = bool * (constr option * constr option)
(* The empty constraint *)
-let mt_tycon = (false,(None,None));;
+let mt_tycon = (false,(None,None))
(* The default constraints for types. *)
-let def_vty_con = (true,(None,None));;
+let def_vty_con = (true,(None,None))
(* Constrain only the type *)
-let mk_tycon ty = (false,(None,Some ty));;
+let mk_tycon ty = (false,(None,Some ty))
let mk_tycon2 (is_ass,_) ty = (is_ass,(None,Some ty))
@@ -437,14 +438,14 @@ let prod_dom_tycon_unif isevars = function
isevars := sigma;
Some dom)
else None)
-;;
+
(* Given a constraint on a term, returns the constraint corresponding to its
* first argument.
*)
let app_dom_tycon isevars (_,(_,tyc)) =
(false,(None, prod_dom_tycon_unif isevars tyc))
-;;
+
(* Given a constraint on a term, returns the constraint corresponding to this
* term applied to arg.
@@ -455,7 +456,7 @@ let app_rng_tycon isevars arg = function
(match whd_betadeltaiota !isevars c with
DOP2(Prod,_,DLAM(_,b)) -> mk_tycon (subst1 arg b)
| _ -> mt_tycon)
-;;
+
(* Given a constraint on an abstraction, returns the constraint on the value
* of the domain type. If we had no constraint, we still know it should be
@@ -463,7 +464,7 @@ let app_rng_tycon isevars arg = function
*)
let abs_dom_valcon isevars (_,(_,tyc)) =
(true,(prod_dom_tycon_unif isevars tyc, None))
-;;
+
(* Given a constraint on an abstraction, returns the constraint on the body *)
let abs_rng_tycon isevars = function
@@ -472,6 +473,3 @@ let abs_rng_tycon isevars = function
(match whd_betadeltaiota !isevars c with
| DOP2(Prod,_,DLAM(_,b)) -> mk_tycon b
| _ -> mt_tycon)
-;;
-
-(* $Id$ *)
diff --git a/pretyping/recordops.ml b/pretyping/recordops.ml
index cc2719ba31..dea95d0e04 100755
--- a/pretyping/recordops.ml
+++ b/pretyping/recordops.ml
@@ -4,15 +4,15 @@
open Util
open Pp
open Names
+open Term
open Typeops
open Libobject
open Library
+open Classops
(*
-open Term
open Pp_control
open Generic
open Initial
-open Classops
*)
let nbimpl = ref 0
@@ -27,27 +27,26 @@ let compter = ref false
(*** table des structures: section_path du struc donne l'id du constructeur,
le nombre de parame`tres et ses projection valides ***)
-type struc_typ = {s_CONST : identifier;
- s_PARAM : int;
- s_PROJ : section_path option list}
+type struc_typ = {
+ s_CONST : identifier;
+ s_PARAM : int;
+ s_PROJ : section_path option list }
let sTRUCS = (ref [] : (section_path * struc_typ) list ref)
let add_new_struc1 x = sTRUCS:=x::(!sTRUCS)
-
let (inStruc,outStruc) =
- declare_object ("STRUCTURE",
- {load_function = (fun _ -> ());
- cache_function = (function (_,x) -> add_new_struc1 x);
- open_function = (fun _ -> ());
- specification_function = (function x -> x)})
+ declare_object ("STRUCTURE",
+ { load_function = (fun _ -> ());
+ cache_function = (function (_,x) -> add_new_struc1 x);
+ open_function = (fun _ -> ());
+ specification_function = (function x -> x) })
let add_new_struc (s,c,n,l) =
-add_anonymous_object (inStruc (s,{s_CONST=c;s_PARAM=n;s_PROJ=l}))
-
+ Lib.add_anonymous_leaf (inStruc (s,{s_CONST=c;s_PARAM=n;s_PROJ=l}))
-let struc_info s = assoc s !sTRUCS
+let struc_info s = List.assoc s !sTRUCS
(*** table des definitions "object" : pour chaque object c,
@@ -61,61 +60,49 @@ Pour tout ci, et Li correspondant (du record)
o_TCOMP = ui1...uir
***)
-type obj_typ = {o_DEF : constr;
- o_TABS : constr list; (* dans l'ordre *)
- o_TPARAMS : constr list; (* dans l'ordre *)
- o_TCOMPS : constr list (* dans l'ordre *)
- }
+type obj_typ = {
+ o_DEF : constr;
+ o_TABS : constr list; (* dans l'ordre *)
+ o_TPARAMS : constr list; (* dans l'ordre *)
+ o_TCOMPS : constr list } (* dans l'ordre *)
-let oBJDEFS = (ref [] : ((cte_typ*cte_typ) * obj_typ) list ref)
+let oBJDEFS = (ref [] : ((cte_typ * cte_typ) * obj_typ) list ref)
let add_new_objdef1 x = oBJDEFS:=x::(!oBJDEFS)
-
let (inObjDef,outObjDef) =
- declare_object ("OBJDEF",
- {load_function = (fun _ -> ());
- cache_function = (function (_,x) -> add_new_objdef1 x);
- specification_function = (function x -> x)})
+ declare_object ("OBJDEF",
+ { load_function = (fun _ -> ());
+ open_function = (fun _ -> ());
+ cache_function = (function (_,x) -> add_new_objdef1 x);
+ specification_function = (function x -> x)})
let add_new_objdef (o,c,la,lp,l) =
- try let _ = assoc o !oBJDEFS in ()
+ try
+ let _ = List.assoc o !oBJDEFS in ()
with Not_found ->
- add_anonymous_object
+ Lib.add_anonymous_leaf
(inObjDef (o,{o_DEF=c;o_TABS=la;o_TPARAMS=lp;o_TCOMPS=l}))
-
-
let ((inObjDef1:section_path -> obj),(outObjDef1:obj -> section_path)) =
- declare_object ("OBJDEF1",
- {load_function = (fun _ -> ());
- cache_function = (function (_,sp) -> ());
- specification_function = (function x -> x)})
-
+ declare_object ("OBJDEF1",
+ { load_function = (fun _ -> ());
+ open_function = (fun _ -> ());
+ cache_function = (function (_,sp) -> ());
+ specification_function = (function x -> x)})
-(* let objdef_info (o1,o2) =
- let rec aux = function [] -> raise Not_found
- | (x,y)::l -> if (o1,o2) = x then Left(y)
- else if (o2,o1) = x then Right(y)
- else aux l
- in aux !oBJDEFS
-
-*)
-
-let objdef_info o = assoc o !oBJDEFS
+let objdef_info o = List.assoc o !oBJDEFS
let freeze () = !sTRUCS,!oBJDEFS
-
-let unfreeze (s,o) = sTRUCS:=s;oBJDEFS:=o
-
+let unfreeze (s,o) = sTRUCS := s; oBJDEFS := o
let init () = sTRUCS:=[];oBJDEFS:=[]
let _ = init()
let _ =
- Library.declare_summary "objdefs"
+ Summary.declare_summary "objdefs"
{ Summary.freeze_function = freeze;
Summary.unfreeze_function = unfreeze;
Summary.init_function = init }