IR.Instrs
Manipulate possibly-reversed lists of instructions efficiently
type not_reversed_t = not_reversed t
defined for convenience: we can write Instrs.not_reversed_t
in other modules instead of Instrs.not_reversed Instrs.t
val empty : _ t
val append_list : not_reversed t -> Sil.instr list -> not_reversed t
val prepend_list : not_reversed t -> Sil.instr list -> not_reversed t
val of_list : Sil.instr list -> not_reversed t
val filter_map :
not_reversed t ->
f:(Sil.instr -> Sil.instr option) ->
not_reversed t
val map : not_reversed t -> f:(Sil.instr -> Sil.instr) -> not_reversed t
replace every instruction instr
with f instr
. Preserve physical equality. *
val map_and_fold :
not_reversed t ->
f:('a -> Sil.instr -> 'a * Sil.instr) ->
init:'a ->
not_reversed t
replace every instruction instr
with snd (f context instr)
. The context is computed by folding f
on init
and previous instructions (before instr
) in the collection. Preserve physical equality. *
val concat_map_and_fold :
not_reversed t ->
f:('a -> Sil.instr -> 'a * Sil.instr array) ->
init:'a ->
not_reversed t
Like map_and_fold
but replace every instruction instr
with the list snd (f context instr)
by threading an accumulator. Preserve physical equality. *
val concat_map :
not_reversed t ->
f:(Sil.instr -> Sil.instr array) ->
not_reversed t
replace every instruction instr
with the list f instr
. Preserve physical equality. *
val reverse_order : not_reversed t -> reversed t
val is_empty : _ t -> bool
val count : _ t -> int
val nth_exists : _ t -> int -> bool
val pp :
?indent:bool ->
?print_types:bool ->
IStdlib.Pp.env ->
Stdlib.Format.formatter ->
_ t ->
unit
val get_underlying_not_reversed : not_reversed t -> Sil.instr array
val instrs_get_normal_vars : not_reversed t -> Ident.t list