Skip to content
Snippets Groups Projects
Commit 016f6b16 authored by Valentin Perrelle's avatar Valentin Perrelle Committed by David Bühler
Browse files

[Eva] api: Add dependencies calculus

parent ff54f551
No related branches found
No related tags found
No related merge requests found
......@@ -68,6 +68,10 @@ module Results: sig
val equality_class : Cil_types.exp -> request -> Cil_types.exp list result
val as_cvalue_model : request -> Cvalue.Model.t result
(* Dependencies *)
val expr_deps : Cil_types.exp -> request -> Locations.Zone.t
val lval_deps : Cil_types.lval -> request -> Locations.Zone.t
(* Evaluation *)
val eval_var : Cil_types.varinfo -> request -> value evaluation
val eval_lval : Cil_types.lval -> request -> value evaluation
......
......@@ -20,6 +20,10 @@
(* *)
(**************************************************************************)
(** Functions of the Value plugin registered in {!Db}.
(** Functions of the Value plugin registered in {!Db}. Only two functions
are exported. *)
Nothing is exported. *)
val eval_deps : Cvalue.Model.t * Locals_scoping.clobbered_set ->
Cil_types.exp -> Locations.Zone.t
val eval_deps_lval : Cvalue.Model.t * Locals_scoping.clobbered_set ->
Cil_types.lval -> Locations.Zone.t
......@@ -357,7 +357,7 @@ struct
(* Evaluation *)
let eval_lval lval req=
let eval_lval lval req =
let eval state = A.Eval.copy_lvalue state lval in
LValue (Response.map eval (get req))
......@@ -486,6 +486,22 @@ struct
match r with
| `Bottom -> true
| `Top | `Value () -> false
(* Dependencies *)
let lval_deps lval req =
let compute_deps cvalue =
Register.eval_deps_lval (cvalue, Locals_scoping.bottom ()) lval
in
req |> as_cvalue_model |>
Result.fold ~error:(fun _ -> Locations.Zone.bottom) ~ok:compute_deps
let expr_deps exp req =
let compute_deps cvalue =
Register.eval_deps (cvalue, Locals_scoping.bottom ()) exp
in
req |> as_cvalue_model |>
Result.fold ~error:(fun _ -> Locations.Zone.bottom) ~ok:compute_deps
end
......@@ -519,6 +535,17 @@ let as_cvalue_model req =
E.as_cvalue_model req
(* Depedencies *)
let expr_deps exp req =
let module E = Make () in
E.expr_deps exp req
let lval_deps lval req =
let module E = Make () in
E.lval_deps lval req
(* Evaluation *)
module type Lvaluation =
......
......@@ -71,6 +71,10 @@ val fold_callstacks : (callstack -> request -> 'a -> 'a) -> 'a -> request -> 'a
val equality_class : Cil_types.exp -> request -> Cil_types.exp list result
val as_cvalue_model : request -> Cvalue.Model.t result
(* Dependencies *)
val expr_deps : Cil_types.exp -> request -> Locations.Zone.t
val lval_deps : Cil_types.lval -> request -> Locations.Zone.t
(* Evaluation *)
val eval_var : Cil_types.varinfo -> request -> value evaluation
val eval_lval : Cil_types.lval -> request -> value evaluation
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment