jon.recoil.org

Module Flambda2_bound_identifiers.Bound_pattern

Things that a Let-expression binds. If a Let-expression binds more than one name, all of those names have the same kind.

type t = private
  1. | Singleton of Flambda2_bound_identifiers.Bound_var.t
    (*

    The binding of a single variable, which is statically scoped. This case is not used for sets of closures.

    *)
  2. | Set_of_closures of Flambda2_bound_identifiers.Bound_var.t list
    (*

    The binding of one or more variables to the individual closures in a set of closures. The variables are statically scoped.

    *)
  3. | Static of Flambda2_bound_identifiers.Bound_static.t
    (*

    The binding of symbols and code IDs to statically-allocated constants and pieces of code. The scoping of the symbols and code IDs follows the dominator tree, not syntactic scope.

    *)
val fold_all_bound_vars : Flambda2_bound_identifiers.Bound_pattern.t -> init:'a -> f:('a -> Flambda2_bound_identifiers.Bound_var.t -> 'a) -> 'a
val fold_all_bound_names : Flambda2_bound_identifiers.Bound_pattern.t -> init:'a -> var:('a -> Flambda2_bound_identifiers.Bound_var.t -> 'a) -> symbol:('a -> Flambda2_identifiers.Symbol.t -> 'a) -> code_id:('a -> Flambda2_identifiers.Code_id.t -> 'a) -> 'a
include Flambda2_nominal.Bindable.S with type t := Flambda2_bound_identifiers.Bound_pattern.t
include Flambda2_nominal.Contains_names.S with type t := Flambda2_bound_identifiers.Bound_pattern.t

Compute the free names of a term. Such computation covers all kinds of bindable names (variables, continuations, ...)

Equivalence relation on renamed variables.

is_renamed_version_of x y is true if there exists a bindable z such that x and y are renamed versions of z.

Note: this function can return true in other cases (if there are some name collisions for instance), this is (at least currently) only used for a sanity check, so users should not rely too much on its expected semantics.

renaming stale ~guaranteed_fresh:fresh is to create a renaming that turns all occurrences of the name stale into fresh (in a capture-avoiding manner, but that is inherent in Renaming).