package bap-std

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

A control transfer operation.

type t = jmp term

Jmp is the only way to transfer control from block to block. Jumps are guarded with conditions. The jump should be taken only if its condition is evaluated to true. When control flow reaches the end of block it should take the first jump with true condition. If there is no such jump, then program stops.

Jumps are further subdivided into categories:

  • goto - is a local control transfer instruction. The label can be only local to subroutine;
  • call - transfer a control to another subroutine. A call contains a continuation, i.e., a label to which we're hoping to return after subroutine returns the control to us. Of course, called subroutine can in general return to another position, or not to return at all.
  • ret - performs a return from subroutine
  • int - calls to interrupt subroutine. If interrupt returns, then continue with the provided label.
val create : ?tid:tid -> ?cond:exp -> jmp_kind -> t

create ?cond kind creates a jump of a given kind

val create_call : ?tid:tid -> ?cond:exp -> call -> t

create_call ?cond target transfer control to subroutine target

val create_goto : ?tid:tid -> ?cond:exp -> label -> t

create_goto ?cond label local jump

val create_ret : ?tid:tid -> ?cond:exp -> label -> t

create_ret ?cond label return from a procedure

val create_int : ?tid:tid -> ?cond:exp -> int -> tid -> t

create_int ?cond int_number return call interrupt subroutine

val kind : t -> jmp_kind

kind jmp evaluates to a kind of jump

val cond : t -> exp

cond jmp returns the jump guard condition

val exps : t -> exp seq

exps jmp returns a sequence of expressions occurring in different positions of a jump jmp, e.g., in cond, target, etc.

val free_vars : t -> Var.Set.t

free_vars jmp returns a set of all variables that are free in some expression in the jump jmp.

val map_exp : t -> f:(exp -> exp) -> t

map_exp jmp ~f applies f to each expression in a jmp, e.g., conditions and indirect labels.

val substitute : t -> exp -> exp -> t

substitute jmp x y substitutes x by y in all expressions that occur in jump jmp expressions.

val with_cond : t -> exp -> t

updated jump's guard condition

updated jump's kind

val with_kind : t -> jmp_kind -> t

updated jump's kind

include Regular.Std.Regular.S with type t := t
val t_of_sexp : Sexplib.Sexp.t -> t
val sexp_of_t : t -> Sexplib.Sexp.t
val bin_t : t Core_kernel.Std.Bin_prot.Type_class.t
val bin_read_t : t Core_kernel.Std.Bin_prot.Read.reader
val __bin_read_t__ : (int -> t) Core_kernel.Std.Bin_prot.Read.reader
val bin_reader_t : t Core_kernel.Std.Bin_prot.Type_class.reader
val bin_size_t : t Core_kernel.Std.Bin_prot.Size.sizer
val bin_write_t : t Core_kernel.Std.Bin_prot.Write.writer
val bin_writer_t : t Core_kernel.Std.Bin_prot.Type_class.writer
val to_string : t -> string
val str : unit -> t -> string
val pps : unit -> t -> string
val ppo : Core_kernel.Std.out_channel -> t -> unit
val pp_seq : Format.formatter -> t Core_kernel.Std.Sequence.t -> unit
val pp : Format.formatter -> t -> unit
val (>=) : t -> t -> bool
val (<=) : t -> t -> bool
val (=) : t -> t -> bool
val (>) : t -> t -> bool
val (<) : t -> t -> bool
val (<>) : t -> t -> bool
val equal : t -> t -> bool
val compare : t -> t -> int
val min : t -> t -> t
val max : t -> t -> t
val ascending : t -> t -> int
val descending : t -> t -> int
val between : t -> low:t -> high:t -> bool
val clamp_exn : t -> min:t -> max:t -> t
val clamp : t -> min:t -> max:t -> t Core_kernel.Or_error.t
module Replace_polymorphic_compare : sig ... end
type comparator_witness
val validate_lbound : min:t Core_kernel.Maybe_bound.t -> t Core_kernel.Validate.check
val validate_ubound : max:t Core_kernel.Maybe_bound.t -> t Core_kernel.Validate.check
val validate_bound : min:t Core_kernel.Maybe_bound.t -> max:t Core_kernel.Maybe_bound.t -> t Core_kernel.Validate.check
val comparator : (t, comparator_witness) Core_kernel.Comparator.comparator
module Map : sig ... end
module Set : sig ... end
val hash : t -> int
val hashable : t Core_kernel.Std.Hashable.Hashtbl.Hashable.t
module Table : sig ... end
module Hash_set : sig ... end
module Hash_queue : sig ... end
type info = string * [ `Ver of string ] * string option
val version : string
val size_in_bytes : ?ver:string -> ?fmt:string -> t -> int
val of_bytes : ?ver:string -> ?fmt:string -> Regular.Std.bytes -> t
val to_bytes : ?ver:string -> ?fmt:string -> t -> Regular.Std.bytes
val blit_to_bytes : ?ver:string -> ?fmt:string -> Regular.Std.bytes -> t -> int -> unit
val of_bigstring : ?ver:string -> ?fmt:string -> Core_kernel.Std.bigstring -> t
val to_bigstring : ?ver:string -> ?fmt:string -> t -> Core_kernel.Std.bigstring
val blit_to_bigstring : ?ver:string -> ?fmt:string -> Core_kernel.Std.bigstring -> t -> int -> unit
module Io : sig ... end
module Cache : sig ... end
val add_reader : ?desc:string -> ver:string -> string -> t Regular.Std.reader -> unit
val add_writer : ?desc:string -> ver:string -> string -> t Regular.Std.writer -> unit
val available_readers : unit -> info list
val default_reader : unit -> info
val set_default_reader : ?ver:string -> string -> unit
val with_reader : ?ver:string -> string -> (unit -> 'a) -> 'a
val available_writers : unit -> info list
val default_writer : unit -> info
val set_default_writer : ?ver:string -> string -> unit
val with_writer : ?ver:string -> string -> (unit -> 'a) -> 'a
val default_printer : unit -> info option
val set_default_printer : ?ver:string -> string -> unit
val with_printer : ?ver:string -> string -> (unit -> 'a) -> 'a
val find_reader : ?ver:string -> string -> t Regular.Std.reader option
val find_writer : ?ver:string -> string -> t Regular.Std.writer option
OCaml

Innovation. Community. Security.