(**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Pierre Chambart, OCamlPro *)
(* Mark Shinwell and Leo White, Jane Street Europe *)
(* *)
(* Copyright 2013--2016 OCamlPro SAS *)
(* Copyright 2014--2016 Jane Street Group LLC *)
(* *)
(* All rights reserved. This file is distributed under the terms of *)
(* the GNU Lesser General Public License version 2.1, with the *)
(* special exception on linking described in the file LICENSE. *)
(* *)
(**************************************************************************)
[@@@ocaml.warning "+a-4-9-30-40-41-42"]
(* CR-soon mshinwell: we need to document whether these iterators follow any
particular order. *)
(** Apply the given functions to the immediate subexpressions of the given
Flambda expression. For avoidance of doubt, if a subexpression is
[Expr], it is passed to the function taking [Flambda.named], rather
than being followed and passed to the function taking [Flambda.t]. *)
val apply_on_subexpressions
: (Flambda.t -> unit)
-> (Flambda.named -> unit)
-> Flambda.t
-> unit
val map_subexpressions
: (Flambda.t -> Flambda.t)
-> (Variable.t -> Flambda.named -> Flambda.named)
-> Flambda.t
-> Flambda.t
(* CR-soon lwhite: add comment to clarify that these recurse unlike the
ones above *)
val iter
: (Flambda.t -> unit)
-> (Flambda.named -> unit)
-> Flambda.t
-> unit
val iter_expr
: (Flambda.t -> unit)
-> Flambda.t
-> unit
val iter_on_named
: (Flambda.t -> unit)
-> (Flambda.named -> unit)
-> Flambda.named
-> unit
(* CR-someday mshinwell: we might need to add the corresponding variable to
the parameters of the user function for [iter_named] *)
val iter_named
: (Flambda.named -> unit)
-> Flambda.t
-> unit
(* CR-someday lwhite: These names are pretty indecipherable, perhaps
create submodules for the normal and "on_named" variants of each
function. *)
val iter_named_on_named
: (Flambda.named -> unit)
-> Flambda.named
-> unit
(** [iter_toplevel f t] applies [f] on every toplevel subexpression of [t].
In particular, it never applies [f] to the body of a function (which
will always be contained within an [Set_of_closures] expression). *)
val iter_toplevel
: (Flambda.t -> unit)
-> (Flambda.named -> unit)
-> Flambda.t
-> unit
val iter_named_toplevel
: (Flambda.t -> unit)
-> (Flambda.named -> unit)
-> Flambda.named
-> unit
val iter_on_sets_of_closures
: (Flambda.set_of_closures -> unit)
-> Flambda.t
-> unit
val iter_on_set_of_closures_of_program
: Flambda.program
-> f:(constant:bool -> Flambda.set_of_closures -> unit)
-> unit
val iter_all_immutable_let_and_let_rec_bindings
: Flambda.t
-> f:(Variable.t -> Flambda.named -> unit)
-> unit
val iter_all_toplevel_immutable_let_and_let_rec_bindings
: Flambda.t
-> f:(Variable.t -> Flambda.named -> unit)
-> unit
val iter_exprs_at_toplevel_of_program
: Flambda.program
-> f:(Flambda.t -> unit)
-> unit
val iter_named_of_program
: Flambda.program
-> f:(Flambda.named -> unit)
-> unit
val iter_constant_defining_values_on_program
: Flambda.program
-> f:(Flambda.constant_defining_value -> unit)
-> unit
val iter_apply_on_program
: Flambda.program
-> f:(Flambda.apply -> unit)
-> unit
val map
: (Flambda.t -> Flambda.t)
-> (Flambda.named -> Flambda.named)
-> Flambda.t
-> Flambda.t
val map_expr
: (Flambda.t -> Flambda.t)
-> Flambda.t
-> Flambda.t
val map_named
: (Flambda.named -> Flambda.named)
-> Flambda.t
-> Flambda.t
val map_toplevel
: (Flambda.t -> Flambda.t)
-> (Flambda.named -> Flambda.named)
-> Flambda.t
-> Flambda.t
val map_toplevel_expr
: (Flambda.t -> Flambda.t)
-> Flambda.t
-> Flambda.t
val map_toplevel_named
: (Flambda.named -> Flambda.named)
-> Flambda.t
-> Flambda.t
val map_symbols
: Flambda.t
-> f:(Symbol.t -> Symbol.t)
-> Flambda.t
val map_symbols_on_set_of_closures
: Flambda.set_of_closures
-> f:(Symbol.t -> Symbol.t)
-> Flambda.set_of_closures
val map_toplevel_sets_of_closures
: Flambda.t
-> f:(Flambda.set_of_closures -> Flambda.set_of_closures)
-> Flambda.t
val map_apply
: Flambda.t
-> f:(Flambda.apply -> Flambda.apply)
-> Flambda.t
val map_function_bodies
: Flambda.set_of_closures
-> f:(Flambda.t -> Flambda.t)
-> Flambda.set_of_closures
val map_sets_of_closures
: Flambda.t
-> f:(Flambda.set_of_closures -> Flambda.set_of_closures)
-> Flambda.t
val map_sets_of_closures_of_program
: Flambda.program
-> f:(Flambda.set_of_closures -> Flambda.set_of_closures)
-> Flambda.program
val map_project_var_to_expr_opt
: Flambda.t
-> f:(Flambda.project_var -> Flambda.t option)
-> Flambda.t
val map_project_var_to_named_opt
: Flambda.t
-> f:(Flambda.project_var -> Flambda.named option)
-> Flambda.t
val map_exprs_at_toplevel_of_program
: Flambda.program
-> f:(Flambda.t -> Flambda.t)
-> Flambda.program
val map_named_of_program
: Flambda.program
-> f:(Variable.t -> Flambda.named -> Flambda.named)
-> Flambda.program
val map_all_immutable_let_and_let_rec_bindings
: Flambda.t
-> f:(Variable.t -> Flambda.named -> Flambda.named)
-> Flambda.t
val fold_function_decls_ignoring_stubs
: Flambda.set_of_closures
-> init:'a
-> f:(fun_var:Variable.t
-> function_decl:Flambda.function_declaration
-> 'a
-> 'a)
-> 'a
|