diff --git a/src/plugins/value/Eva.mli b/src/plugins/value/Eva.mli index f44c2e4c112623521a6b4404f2c007e29b3e91b0..6887ef6e6a0500b39638f69285f49edb9f49ce47 100644 --- a/src/plugins/value/Eva.mli +++ b/src/plugins/value/Eva.mli @@ -99,13 +99,18 @@ module Eva_annotations: sig | FlowMerge of split_term (** Merge states separated by a previous split. *) - val add_slevel_annot : emitter:Emitter.t -> loc:Cil_types.location -> + val get_slevel_annot : Cil_types.stmt -> slevel_annotation option + val get_unroll_annot : Cil_types.stmt -> unroll_annotation list + val get_flow_annot : Cil_types.stmt -> flow_annotation list + val get_subdivision_annot : Cil_types.stmt -> int list + + val add_slevel_annot : emitter:Emitter.t -> ?loc:Cil_types.location -> Cil_types.stmt -> slevel_annotation -> unit - val add_unroll_annot : emitter:Emitter.t -> loc:Cil_types.location -> + val add_unroll_annot : emitter:Emitter.t -> ?loc:Cil_types.location -> Cil_types.stmt -> unroll_annotation -> unit - val add_flow_annot : emitter:Emitter.t -> loc:Cil_types.location -> + val add_flow_annot : emitter:Emitter.t -> ?loc:Cil_types.location -> Cil_types.stmt -> flow_annotation -> unit - val add_subdivision_annot : emitter:Emitter.t -> loc:Cil_types.location -> + val add_subdivision_annot : emitter:Emitter.t -> ?loc:Cil_types.location -> Cil_types.stmt -> int -> unit end diff --git a/src/plugins/value/utils/eva_annotations.ml b/src/plugins/value/utils/eva_annotations.ml index d954d3e4a060f50a9dee1b810a404ca471021a5d..1a6ea6ddc0ba2a4a66e3c3f065eb15c2f1a83cec 100644 --- a/src/plugins/value/utils/eva_annotations.ml +++ b/src/plugins/value/utils/eva_annotations.ml @@ -102,7 +102,8 @@ struct in List.rev (Annotations.fold_code_annot filter_add stmt []) - let add ~emitter ~loc stmt annot = + let add ~emitter ?loc stmt annot = + let loc = Option.value ~default:(Cil_datatype.Stmt.loc stmt) loc in let param = M.export annot in let extension = Logic_const.new_acsl_extension name loc false param in let annot_node = Cil_types.AExtended ([], is_loop_annot, extension) in @@ -261,14 +262,14 @@ let add_slevel_annot = Slevel.add let add_unroll_annot = Unroll.add -let add_flow_annot ~emitter ~loc stmt flow_annotation = +let add_flow_annot ~emitter ?loc stmt flow_annotation = let f, annot = match flow_annotation with | FlowSplit (annot, Static) -> Split.add, annot | FlowSplit (annot, Dynamic) -> DynamicSplit.add, annot | FlowMerge annot -> Merge.add, annot in - f ~emitter ~loc stmt (annot, None) + f ~emitter ?loc stmt (annot, None) module Subdivision = Register (struct diff --git a/src/plugins/value/utils/eva_annotations.mli b/src/plugins/value/utils/eva_annotations.mli index 1bae12631f98321b1abd69b9f5d81767edc8c732..77ddc30b1bc958707aec1750d8b63604c839ebf1 100644 --- a/src/plugins/value/utils/eva_annotations.mli +++ b/src/plugins/value/utils/eva_annotations.mli @@ -56,11 +56,11 @@ val get_flow_annot : Cil_types.stmt -> flow_annotation list val get_subdivision_annot : Cil_types.stmt -> int list val get_allocation: Cil_types.stmt -> allocation_kind -val add_slevel_annot : emitter:Emitter.t -> loc:Cil_types.location -> +val add_slevel_annot : emitter:Emitter.t -> ?loc:Cil_types.location -> Cil_types.stmt -> slevel_annotation -> unit -val add_unroll_annot : emitter:Emitter.t -> loc:Cil_types.location -> +val add_unroll_annot : emitter:Emitter.t -> ?loc:Cil_types.location -> Cil_types.stmt -> unroll_annotation -> unit -val add_flow_annot : emitter:Emitter.t -> loc:Cil_types.location -> +val add_flow_annot : emitter:Emitter.t -> ?loc:Cil_types.location -> Cil_types.stmt -> flow_annotation -> unit -val add_subdivision_annot : emitter:Emitter.t -> loc:Cil_types.location -> +val add_subdivision_annot : emitter:Emitter.t -> ?loc:Cil_types.location -> Cil_types.stmt -> int -> unit