1. Overview
  2. Docs
Module type
Class type

This module type is the result type of the Compute_ranges.Make functor.

The _ranges_ being computed are composed of contiguous _subranges_ delimited by two labels (of type Linearize.label). These labels will be added by this pass to the code being inspected, which is why the create function in the result of the functor returns not only the ranges but also the updated function with the labels added. The start_pos_offset and end_pos_offset components of the subranges are there to allow a distinction between ranges starting (or ending) right at the start of the corresponding instruction (offset of zero), and ranges starting or ending one byte after the actual instruction (offset of one).

Corresponds to Index in the S_functor module type.

module Key : sig ... end

Corresponds to Key in the S_functor module type.

Corresponds to Subrange_state in the S_functor module type.

Corresponds to Subrange_info in the S_functor module type.

module Range_info : S_range_info with type key := Key.t with type index := Index.t

Corresponds to Range_info in the S_functor module type.

module Subrange : sig ... end
module Range : sig ... end
type t

The type holding information on computed ranges.

val empty : t

A value of type t that holds no range information.

Compute ranges for the code in the given linearized function declaration, returning the ranges as a value of type t and the rewritten code that must go forward for emission.

val iter : t -> f:(Index.t -> Range.t -> unit) -> unit

Iterate through ranges. Each range is associated with an index.

val fold : t -> init:'a -> f:('a -> Index.t -> Range.t -> 'a) -> 'a

Like iter, but a fold.

val find : t -> Index.t -> Range.t

Find the range for the given index, or raise an exception.

val all_indexes : t -> Index.Set.t

All indexes for which the given value of type t contains ranges.

val rewrite_labels_and_remove_empty_subranges_and_ranges : t -> env:int Numbers.Int.Map.t -> t

An internal function used by Coalesce_labels. The env should come from Coalesce_labels.fundecl.