From 786e4247f68b6625a34dbc088a403cfa1a4d2aaf Mon Sep 17 00:00:00 2001 From: Maxime Jacquemin <maxime.jacquemin@cea.fr> Date: Wed, 3 Nov 2021 14:01:30 +0100 Subject: [PATCH] [ivette] Descriptions for the GetPointedLvalues request --- src/plugins/value/api/values_request.ml | 144 +++++++++++------------- 1 file changed, 68 insertions(+), 76 deletions(-) diff --git a/src/plugins/value/api/values_request.ml b/src/plugins/value/api/values_request.ml index 0239f254919..b94f43d4b1e 100644 --- a/src/plugins/value/api/values_request.ml +++ b/src/plugins/value/api/values_request.ml @@ -342,7 +342,8 @@ let proxy = let make (a : (module Analysis.S)) = (module Proxy(val a) : EvaProxy) in let current = ref (make @@ Analysis.current_analyzer ()) in let hook a = current := make a ; Request.emit signal in - Analysis.register_hook hook ; current + Analysis.register_hook hook ; + fun () -> !current @@ -350,20 +351,21 @@ let proxy = (* --- Request getCallstacks --- *) (* -------------------------------------------------------------------------- *) -let () = Request.register ~package +let () = + Request.register ~package ~kind:`GET ~name:"getCallstacks" ~descr:(Md.plain "Callstacks for markers") ~input:(module Jlist(Jmarker)) ~output:(module Jlist(Jcallstack)) begin fun markers -> - let module A = (val !proxy) in - let cset = List.fold_left - (fun cset marker -> - match probe marker with - | Pexpr(_,stmt) | Plval(_,stmt) -> - List.fold_right CSet.add (A.callstacks stmt) cset - | Pnone -> cset - ) CSet.empty markers in + let module A : EvaProxy = (val proxy ()) in + let add stmt = List.fold_right CSet.add (A.callstacks stmt) in + let gather_callstacks cset marker = + match probe marker with + | Pexpr (_, stmt) | Plval (_, stmt) -> add stmt cset + | Pnone -> cset + in + let cset = List.fold_left gather_callstacks CSet.empty markers in Ranking.sort (CSet.elements cset) end @@ -391,10 +393,11 @@ let () = let getStmtInfo = Request.signature ~input:(module Jstmt) () in let set_fct = Request.result getStmtInfo ~name:"fct" ~descr:(Md.plain "Englobing function") - (module Jkf) in - let set_rank = Request.result getStmtInfo ~name:"rank" + (module Jkf) + and set_rank = Request.result getStmtInfo ~name:"rank" ~descr:(Md.plain "Global stmt order") - (module Jint) in + (module Jint) + in Request.register_sig ~package getStmtInfo ~kind:`GET ~name:"getStmtInfo" ~descr:(Md.plain "Stmt Information") @@ -413,40 +416,37 @@ let () = let getProbeInfo = Request.signature ~input:(module Jmarker) () in let set_code = Request.result_opt getProbeInfo ~name:"code" ~descr:(Md.plain "Probe source code") - (module Jstring) in - let set_stmt = Request.result_opt getProbeInfo + (module Jstring) + and set_stmt = Request.result_opt getProbeInfo ~name:"stmt" ~descr:(Md.plain "Probe statement") - (module Jstmt) in - let set_rank = Request.result getProbeInfo + (module Jstmt) + and set_rank = Request.result getProbeInfo ~name:"rank" ~descr:(Md.plain "Probe statement rank") - ~default:0 (module Jint) in - let set_effects = Request.result getProbeInfo + ~default:0 (module Jint) + and set_effects = Request.result getProbeInfo ~name:"effects" ~descr:(Md.plain "Effectfull statement") - ~default:false (module Jbool) in - let set_condition = Request.result getProbeInfo + ~default:false (module Jbool) + and set_condition = Request.result getProbeInfo ~name:"condition" ~descr:(Md.plain "Conditional statement") - ~default:false (module Jbool) in + ~default:false (module Jbool) + in let set_probe rq pp p s = - begin - set_code rq (Some (Pretty_utils.to_string pp p)) ; - set_stmt rq (Some s) ; - set_rank rq (Ranking.stmt s) ; - List.iter - (function - | `Here -> () - | `Then _ | `Else _ -> set_condition rq true - | `After -> set_effects rq true - ) - (next_steps s) - end - in Request.register_sig ~package ~kind:`GET getProbeInfo - ~name:"getProbeInfo" ~descr:(Md.plain "Probe informations") + set_code rq (Some (Pretty_utils.to_string pp p)) ; + set_stmt rq (Some s) ; + set_rank rq (Ranking.stmt s) ; + let on_steps = function + | `Here -> () + | `Then _ | `Else _ -> set_condition rq true + | `After -> set_effects rq true + in List.iter on_steps (next_steps s) + in + Request.register_sig ~package getProbeInfo + ~kind:`GET ~name:"getProbeInfo" + ~descr:(Md.plain "Probe informations") begin fun rq marker -> match probe marker with - | Plval(l,s) -> - set_probe rq Printer.pp_lval l s ; - | Pexpr(e,s) -> - set_probe rq Printer.pp_exp e s ; + | Plval (l, s) -> set_probe rq Printer.pp_lval l s + | Pexpr (e, s) -> set_probe rq Printer.pp_exp e s | Pnone -> () end @@ -460,44 +460,40 @@ let () = let getValues = Request.signature () in let get_tgt = Request.param getValues ~name:"target" ~descr:(Md.plain "Works with all markers containing an expression") - (module Jmarker) in - let get_cs = Request.param_opt getValues ~name:"callstack" + (module Jmarker) + and get_cs = Request.param_opt getValues ~name:"callstack" ~descr:(Md.plain "Callstack to collect (defaults to none)") - (module Jcallstack) in - let set_alarms = Request.result getValues ~name:"alarms" + (module Jcallstack) + and set_alarms = Request.result getValues ~name:"alarms" ~descr:(Md.plain "Alarms raised during evaluation") - (module Jlist(Jpair(Jtruth)(Jstring))) in - let set_domain = Request.result_opt getValues ~name:"values" + (module Jlist(Jpair(Jtruth)(Jstring))) + and set_domain = Request.result_opt getValues ~name:"values" ~descr:(Md.plain "Domain values") - (module Jstring) in - let set_after = Request.result_opt getValues ~name:"v_after" + (module Jstring) + and set_after = Request.result_opt getValues ~name:"v_after" ~descr:(Md.plain "Domain values after execution") - (module Jstring) in - let set_then = Request.result_opt getValues ~name:"v_then" + (module Jstring) + and set_then = Request.result_opt getValues ~name:"v_then" ~descr:(Md.plain "Domain values for true condition") - (module Jstring) in - let set_else = Request.result_opt getValues ~name:"v_else" + (module Jstring) + and set_else = Request.result_opt getValues ~name:"v_else" ~descr:(Md.plain "Domain values for false condition") - (module Jstring) in + (module Jstring) + in Request.register_sig ~package getValues ~kind:`GET ~name:"getValues" ~descr:(Md.plain "Abstract values for the given marker") begin fun rq () -> - let marker = get_tgt rq in - let callstack = get_cs rq in - let domain = - let module A : EvaProxy = (val !proxy) in - A.domain (probe marker) callstack in + let module A : EvaProxy = (val proxy ()) in + let marker = get_tgt rq and callstack = get_cs rq in + let domain = A.domain (probe marker) callstack in set_alarms rq domain.alarms ; - List.iter - (fun (step, values) -> - let domain = Some values in - match step with - | `Here -> set_domain rq domain - | `After -> set_after rq domain - | `Then _ -> set_then rq domain - | `Else _ -> set_else rq domain - ) domain.values ; + let set_values = function + | `Here, values -> set_domain rq (Some values) + | `After, values -> set_after rq (Some values) + | `Then _, values -> set_then rq (Some values) + | `Else _, values -> set_else rq (Some values) + in List.iter set_values domain.values end @@ -508,25 +504,21 @@ let () = let () = let getPointedLvalues = Request.signature () in - (* Inputs of the request *) let get_tgt = Request.param getPointedLvalues ~name:"pointer" - ~descr:(Md.plain "") + ~descr:(Md.plain "Marker to the pointer we want to lookup") (module Jmarker) and get_cs = Request.param_opt getPointedLvalues ~name:"callstack" ~descr:(Md.plain "Callstack to collect (defaults to none)") (module Jcallstack) - in - (* Outputs of the request *) - let set_lvalues = Request.result_opt getPointedLvalues ~name:"lvalues" - ~descr:(Md.plain "") + and set_lvalues = Request.result_opt getPointedLvalues ~name:"lvalues" + ~descr:(Md.plain "List of pointed lvalues") (module Jlist(Jpair(Jstring)(Jmarker))) in - (* Register and request computation *) Request.register_sig ~package getPointedLvalues ~kind:`GET ~name:"getPointedLvalues" - ~descr:(Md.plain "") + ~descr:(Md.plain "Pointed lvalues for the given marker") begin fun rq () -> - let module A : EvaProxy = (val !proxy) in + let module A : EvaProxy = (val proxy ()) in let marker = get_tgt rq and callstack = get_cs rq in let kf = Printer_tag.kf_of_localizable marker in let ki = Printer_tag.ki_of_localizable marker in -- GitLab