From c2626cea6e8bd28cb08ba7973eef7dc48b3cd86a Mon Sep 17 00:00:00 2001
From: Kilyan Le Gallic <kilyan.legallic@cea.fr>
Date: Fri, 17 May 2024 11:02:14 +0200
Subject: [PATCH] [wp] proof of concept of adding module linked logic_info to
 global, to be refactored

---
 src/plugins/wp/Why3Import.ml | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/plugins/wp/Why3Import.ml b/src/plugins/wp/Why3Import.ml
index cfa181d07be..4388a3c8c0c 100644
--- a/src/plugins/wp/Why3Import.ml
+++ b/src/plugins/wp/Why3Import.ml
@@ -64,6 +64,9 @@ let construct_acsl_name (id : W.Ident.ident) =
     String.concat "::" (paths @ name :: List.rev_append q [of_infix t])
   | [] -> ""
 
+let recover_module (id : W.Ident.ident) =
+  let (paths,name,_) = T.restore_path id in
+  String.concat "." paths ^ "." ^ name
 
 (* For debug only*)
 let pp_id fmt (id: W.Ident.ident) =
@@ -98,6 +101,10 @@ let pp_lvs fmt (lvs : C.logic_var list) =
         Cpp.pp_logic_var lv Cpp.pp_logic_type lv.lv_type
     ) lvs;
 
+  (* let pp_id_path  (id : W.Ident.ident) =
+     Format.printf "@ %s " @@ construct_acsl_name id in
+     assert false *)
+
   (* -------------------------------------------------------------------------- *)
   (* ---    Types                                                           --- *)
   (* -------------------------------------------------------------------------- *)
@@ -106,7 +113,7 @@ let pp_lvs fmt (lvs : C.logic_var list) =
 type tvars = C.logic_type W.Ty.Mtv.t
 
 type why3module = {
-  _paths : string list;
+  paths : string list;
   _types : C.logic_type_info list;
   _logics : C.logic_info list;
 }
@@ -219,7 +226,10 @@ let li_of_ls (env:env) (ls : W.Term.lsymbol)  : C.logic_info =
       l_body = C.LBnone;
     } in W.Term.Hls.add env.lenv ls li;
   Logic_info.Hashtbl.add env.lils li ls;
-
+  L.debug ~level:0 "Module is : %s" @@ recover_module ls.ls_name;
+  let o = Datatype.String.Hashtbl.find env._menv @@ recover_module ls.ls_name in
+  Datatype.String.Hashtbl.replace env._menv (recover_module ls.ls_name)
+    {o with _logics = o._logics @ [li]};
   li
 
 
@@ -231,7 +241,7 @@ let import_theory (env : env) thname =
   let theory_name, theory_path = extract_path thname in
   try
     Datatype.String.Hashtbl.add env._menv thname
-      { _logics = []; _types = []; _paths = theory_path};
+      { _logics = []; _types = []; paths = theory_path};
     let theory = W.Env.read_theory env.wenv theory_path theory_name in
     List.iter (fun (tdecl : T.tdecl) ->
         match tdecl.td_node with
@@ -300,7 +310,10 @@ let () =
               L.result "Associated parameters : @[<hov2>%a@]" pp_lvs li.l_profile;
             ) env.lenv;
           Datatype.String.Hashtbl.iter (fun (s) (why3mod) ->
-              L.result "Encoutered %s at %s" s (String.concat "::" why3mod._paths)
+              L.result "Encoutered %s at %s" s (String.concat "::" why3mod.paths);
+              List.iter (fun (li) ->
+                  L.result "%a" pp_li li)
+                why3mod._logics;
             ) env._menv
         end
 
-- 
GitLab