From 57e7bde122c4f1e489fb3c44bf6e591683b86c96 Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Thu, 10 Dec 2020 00:22:23 +0100
Subject: [PATCH] [Aorai] do not rely on Aorai internal tables for
 Frama_C_show_aorai_state

---
 .../aorai/aorai_eva_analysis.enabled.ml       | 25 ++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/src/plugins/aorai/aorai_eva_analysis.enabled.ml b/src/plugins/aorai/aorai_eva_analysis.enabled.ml
index 007c6ed88fe..b76e66305a9 100644
--- a/src/plugins/aorai/aorai_eva_analysis.enabled.ml
+++ b/src/plugins/aorai/aorai_eva_analysis.enabled.ml
@@ -23,13 +23,32 @@
 (*                                                                        *)
 (**************************************************************************)
 
+let state_name ty i =
+  (* Data_for_aorai.getStateName (Integer.to_int i) *)
+  let open Cil_types in
+  let matching_enumitem ei =
+    match Cil.isInteger ei.eival with
+    | Some j -> Integer.equal i j
+    | None -> false
+  in
+  let find_enumitem e =
+    List.find_opt matching_enumitem e.eitems
+  in
+  let e = match ty with
+    | TEnum (e,_) -> Some e
+    | _ -> None
+  in
+  match Extlib.opt_bind find_enumitem e with
+  | Some ei -> ei.eiorig_name
+  | None -> Integer.to_string i
+
 let show_aorai_variable state fmt var_name =
-  let vi = Data_for_aorai.(get_varinfo var_name) in
+  let vi = Globals.Vars.find_from_astinfo var_name Cil_types.VGlobal in
+  let ty = Globals.Types.find_type Logic_typing.Enum Data_for_aorai.states in
   let cvalue = !Db.Value.eval_expr state (Cil.evar vi) in
   try
     let i = Ival.project_int (Cvalue.V.project_ival cvalue) in
-    let state_name = Data_for_aorai.getStateName (Integer.to_int i) in
-    Format.fprintf fmt "%s" state_name
+    Format.fprintf fmt "%s" (state_name ty i)
   with Cvalue.V.Not_based_on_null | Ival.Not_Singleton_Int |
        Z.Overflow | Not_found ->
     Format.fprintf fmt "?"
-- 
GitLab