1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
|
(**************************************************************************)
(* *)
(* 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_bindings
: Flambda.t
-> f:(Variable.t -> Flambda.named -> unit)
-> unit
val iter_all_toplevel_immutable_let_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
|