From 377c8a3c9351c018db57568b90d970989e8dcc11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Sat, 5 Dec 2020 15:23:51 +0100
Subject: [PATCH] [eva/server] getProbeInfo

---
 src/plugins/value/api/values_request.ml | 46 +++++++++++++++++++------
 1 file changed, 36 insertions(+), 10 deletions(-)

diff --git a/src/plugins/value/api/values_request.ml b/src/plugins/value/api/values_request.ml
index b73fbf43aab..ed98a6bb1b4 100644
--- a/src/plugins/value/api/values_request.ml
+++ b/src/plugins/value/api/values_request.ml
@@ -91,6 +91,9 @@ let probe marker =
 module CS = Value_types.Callstack
 module CSmap = CS.Hashtbl
 
+module Jcallstack = Data.Index(Value_types.Callstack.Map)
+    (struct let name = "eva-callstack-id" end)
+
 module Jtruth : Data.S with type t = truth =
 struct
   type t = truth
@@ -225,11 +228,19 @@ let proxy =
   in current
 
 (* -------------------------------------------------------------------------- *)
-(* --- Request getCallstackInfo                                           --- *)
+(* --- Request getCallstacks                                              --- *)
 (* -------------------------------------------------------------------------- *)
 
-module Jcallstack = Data.Index(Value_types.Callstack.Map)
-    (struct let name = "eva-callstack-id" end)
+let () = Request.register ~package
+    ~kind:`GET ~name:"getCallstacks"
+    ~descr:(Md.plain "Callstacks for markers")
+    ~input:(module Jstmt)
+    ~output:(module Jlist(Jcallstack))
+    (fun stmt -> let module A = (val !proxy) in A.callstacks stmt)
+
+(* -------------------------------------------------------------------------- *)
+(* --- Request getCallstackInfo                                           --- *)
+(* -------------------------------------------------------------------------- *)
 
 let pretty fmt cs =
   match cs with
@@ -257,15 +268,30 @@ let () =
       end
 
 (* -------------------------------------------------------------------------- *)
-(* --- Request getCallstacks                                              --- *)
+(* --- Request getProbeInfo                                               --- *)
 (* -------------------------------------------------------------------------- *)
 
-let () = Request.register ~package
-    ~kind:`GET ~name:"getCallstacks"
-    ~descr:(Md.plain "Callstacks for markers")
-    ~input:(module Jstmt)
-    ~output:(module Jlist(Jcallstack))
-    (fun stmt -> let module A = (val !proxy) in A.callstacks stmt)
+let () =
+  let getProbeInfo = Request.signature ~input:(module Jmarker) () in
+  let set_stmt = Request.result_opt getProbeInfo
+      ~name:"stmt" ~descr:(Md.plain "Probe statement")
+      (module Jstmt) in
+  let set_code = Request.result_opt getProbeInfo
+      ~name:"code" ~descr:(Md.plain "Probe source code")
+      (module Jstring) in
+  let pp_code rq pp x = set_code rq (Some (Pretty_utils.to_string pp x)) in
+  Request.register_sig ~package ~kind:`GET getProbeInfo
+    ~name:"getProbeInfo" ~descr:(Md.plain "Probe informations")
+    begin fun rq marker ->
+      match probe marker with
+      | Plval(l,s) ->
+        pp_code rq Printer.pp_lval l ;
+        set_stmt rq (Some s) ;
+      | Pexpr(e,s) ->
+        pp_code rq Printer.pp_exp e ;
+        set_stmt rq (Some s) ;
+      | Pnone -> ()
+    end
 
 (* -------------------------------------------------------------------------- *)
 (* --- Request getValues                                                  --- *)
-- 
GitLab