package fix

  1. Overview
  2. Docs

DataFlow performs a forward data flow analysis over a directed graph.

Run requires a type variable that is equipped with an implementation of imperative maps, a type property that is equipped with leq and join functions, and a data flow graph whose edges describe the propagation of properties. It performs a forward data flow analysis and returns its result.

The function solution has type variable -> property option. A reachable variable is mapped to Some _; an unreachable one is mapped to None.

module Run (M : sig ... end) (P : sig ... end) (G : sig ... end) : sig ... end

ForOrderedType is a special case of Run where it suffices to pass an ordered type T as an argument. A reference to a persistent map is used to hold the memoization table.

module ForOrderedType (T : Map.OrderedType) (P : sig ... end) (G : sig ... end) : sig ... end

ForHashedType is a special case of Run where it suffices to pass a hashed type T as an argument. A hash table is used to hold the memoization table.

module ForHashedType (T : Hashtbl.HashedType) (P : sig ... end) (G : sig ... end) : sig ... end

ForType is a special case of Run where it suffices to pass an arbitrary type T as an argument. A hash table is used to hold the memoization table. OCaml's built-in generic equality and hash functions are used.

module ForType (T : sig ... end) (P : sig ... end) (G : sig ... end) : sig ... end

ForIntSegment is a special case of Run where the type of variables is the integer segment [0..n). An array is used to hold the table.

module ForIntSegment (K : sig ... end) (P : sig ... end) (G : sig ... end) : sig ... end

ForCustomMaps is a forward data flow analysis that is tuned for greater performance. It internally relies on CompactQueue, instead of Queue. Furthermore, instead of relying on a full-fledged implementation of maps as described by MINIMAL_IMPERATIVE_MAPS, it expects the user to create and initialize two maps V and B that satisfy the signature ARRAY. This typically allows the user to choose an efficient, specialized data representation.

The map V must be initialized with bottom everywhere. The map B must be initialized with false everywhere.

The functor returns nothing: the map V is modified in place and can be read by the user after the fixed point has been reached.

module ForCustomMaps (P : sig ... end) (G : sig ... end) (V : sig ... end) (B : sig ... end) : sig ... end
OCaml

Innovation. Community. Security.