@@ -165,6 +165,7 @@ type summary =
165165 | Env_functor_arg of summary * Ident .t
166166 | Env_constraints of summary * type_declaration PathMap .t
167167 | Env_copy_types of summary * string list
168+ | Env_ghost_value of summary * Ident .t * value_description
168169
169170module TycompTbl =
170171 struct
@@ -450,6 +451,7 @@ type t = {
450451 components : module_components IdTbl .t ;
451452 classes : class_declaration IdTbl .t ;
452453 cltypes : class_type_declaration IdTbl .t ;
454+ ghost_values : value_description IdTbl .t ;
453455 functor_args : unit Ident .tbl ;
454456 summary : summary ;
455457 local_constraints : type_declaration PathMap .t ;
@@ -483,6 +485,7 @@ and structure_components = {
483485 mutable comp_components : module_components comp_tbl ;
484486 mutable comp_classes : class_declaration comp_tbl ;
485487 mutable comp_cltypes : class_type_declaration comp_tbl ;
488+ mutable comp_ghost_values : value_description comp_tbl ;
486489}
487490
488491and functor_components = {
@@ -536,6 +539,7 @@ let empty = {
536539 modules = IdTbl. empty; modtypes = IdTbl. empty;
537540 components = IdTbl. empty; classes = IdTbl. empty;
538541 cltypes = IdTbl. empty;
542+ ghost_values = IdTbl. empty;
539543 summary = Env_empty ; local_constraints = PathMap. empty; gadt_instances = [] ;
540544 flags = 0 ;
541545 functor_args = Ident. empty;
@@ -624,7 +628,8 @@ let empty_structure =
624628 comp_types = Tbl. empty;
625629 comp_modules = Tbl. empty; comp_modtypes = Tbl. empty;
626630 comp_components = Tbl. empty; comp_classes = Tbl. empty;
627- comp_cltypes = Tbl. empty }
631+ comp_cltypes = Tbl. empty;
632+ comp_ghost_values = Tbl. empty; }
628633
629634let get_components c =
630635 match get_components_opt c with
@@ -910,6 +915,8 @@ and find_class =
910915 find (fun env -> env.classes) (fun sc -> sc.comp_classes)
911916and find_cltype =
912917 find (fun env -> env.cltypes) (fun sc -> sc.comp_cltypes)
918+ and find_ghost_value =
919+ find (fun env -> env.ghost_values) (fun sc -> sc.comp_ghost_values)
913920
914921let type_of_cstr path = function
915922 | {cstr_inlined = Some d ; _} ->
@@ -1281,6 +1288,8 @@ let lookup_class =
12811288 lookup (fun env -> env.classes) (fun sc -> sc.comp_classes)
12821289let lookup_cltype =
12831290 lookup (fun env -> env.cltypes) (fun sc -> sc.comp_cltypes)
1291+ let lookup_ghost_value =
1292+ lookup (fun env -> env.ghost_values) (fun sc -> sc.comp_ghost_values)
12841293
12851294let copy_types l env =
12861295 let f desc = {desc with val_type = Subst. type_expr Subst. identity desc.val_type} in
@@ -1680,7 +1689,8 @@ and components_of_module_maker (env, sub, path, mty) =
16801689 comp_labels = Tbl. empty; comp_types = Tbl. empty;
16811690 comp_modules = Tbl. empty; comp_modtypes = Tbl. empty;
16821691 comp_components = Tbl. empty; comp_classes = Tbl. empty;
1683- comp_cltypes = Tbl. empty } in
1692+ comp_cltypes = Tbl. empty;
1693+ comp_ghost_values = Tbl. empty; } in
16841694 let pl, sub = prefix_idents path sub sg in
16851695 let env = ref env in
16861696 let pos = ref 0 in
@@ -1798,6 +1808,11 @@ and store_value ?check id decl env =
17981808 values = IdTbl. add id decl env.values;
17991809 summary = Env_value (env.summary, id, decl) }
18001810
1811+ and store_ghost_value id decl env =
1812+ { env with
1813+ ghost_values = IdTbl. add id decl env.ghost_values;
1814+ summary = Env_ghost_value (env.summary, id, decl) }
1815+
18011816and store_type ~check id info env =
18021817 let loc = info.type_loc in
18031818 if check then
@@ -1979,6 +1994,8 @@ let add_local_constraint path info elv env =
19791994 add_local_type path info env
19801995 | _ -> assert false
19811996
1997+ let add_ghost_value id desc env =
1998+ store_ghost_value id desc env
19821999
19832000(* Insertion of bindings by name *)
19842001
0 commit comments