Caml1999I037}( *Freshening!t;@@@A@@@@@ !middle_end/flambda/freshening.mliV''V'-@@@@ @@A@%subst;@@@A@@@s@@@@W..W.<@@@@A@A@%empty @@@t@[[@@'B@@(is_empty@@@@u$boolE@@@v@@w@0]1]@@;C@@(activate@/@@@x2@@@y@@z@AbBb@@LD@@ !empty_preserving_activation_state@@@@@{C@@@|@@}@RfSf6@@]E@@,add_variable@Q@@@~@(Variable!t@@@@ !t@@@@j@@@@@@@@@@yqzq@@F@@.add_variables'@x@@@@$listK-!t@@@@@@@@@HR@@0apply_closure_id@)@@@d@]!t@@@ec!t@@@f@@g@@h@YZ@@dS@@8apply_var_within_closure@E@@@i@2Var_within_closure!t@@@j!t@@@k@@l@@m@wFHx@@T@@%print@&Stdlib&Format)formatter@@@n@o@@@o$unitF@@@p@@q@@r@@@U@@@@f&&@V@@@ "apply_function_decls_and_free_vars@@@@@J#Map!t@.specialised_to@@@Π@!a@@@@@@@5function_declarations@@@7only_freshen_parameters@@@@w#Map!t@.specialised_to@@@נ@-@@@@@٠@ 5function_declarations@@@ՠ@@@@Ԡ@!t@@@@@@@@@@@@@@  !@@ W@@0does_not_freshen@@@@@!t@@@@@@@@@@@@@@!##"#V@@,X@@%print@&Format)formatter@@@@)@@@@@@@@@@@<XX=X@@GY@@;freshen_projection_relation@#Map!tm.specialised_to@@@@@@*fresheningN@@@2closure_fresheninge!t@@@#Map!t.specialised_to@@@@@@@@@@@@@u  v@@Z@@s-Stdlib__Uchar056uf4[_+Stdlib__Sys0 -ռ鱦s5/.Stdlib__String0Vê>)Longident0s `7mɕc(Location0a7cK_H%9)Load_path0I@18 ~,Linkage_name0EwKсڊs&Lambda0z1x]&ZT7Internal_variable_names0HdeՄL ԩ,Identifiable0 {d\FX'`%Ident0">WA+9*X*Format_doc0]mWϓ:Mݠ'Flambda0Idvu "#Env0zV L{YWI)Debuginfo0PtJ=^w/*Data_types0I'Ue`wq]Ѡ0Compilation_unit0 {p-Vg_*Cmi_format0c˯7͗ԩmݠ.Closure_origin0vˆtT{(}z*Closure_id05:z[ކ/Closure_element0YWZ̡Q.hV&2Clambda_primitives01U10CamlinternalLazy0&͂7 Pˆ8CamlinternalFormatBasics0%FU(Q/Tu5Build_path_prefix_map0z HkGs(Asttypes0>n{T8cئ/Allocated_const0ЖݔTW@@@Caml1999T037vT9ID,C*Freshening-ocaml.warning !middle_end/flambda/freshening.mliQQ@2+a-4-9-30-40-41-42 QQ@@QQ@@@@@@QQ@3@@@@@@#intA;@@@A@@@@@&_none_@@A@A@$charB;@@A@@@@@@A@&stringQ;@@ A@@@@@ @@@%bytesC;@@A@@@@@@@@%floatD;@@A@@@@@@@@$boolE;@@%falsec@@@$trued@@#@@@A@@@@@$@A@$unitF;@@"()e@@.@@@A@@@@@/@A@ #exnG;@@@A@@@@@3@@@#effH;@@O@A@A@@@@@@<@@@,continuationI;@@Q@@P@B@A@nY@@@@@@K@@@%arrayJ;@@R@A@A@@@@@@U@@@ $listK;@@S@A"[]f@@b@"::g@@@T@@o@ @@A@Y@@@@@r@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AJA@Y@@@@@@@@5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@A[A@Y@@@@@@@@*atomic_locU;@@Z@AdA@@@@@@@@@.Assert_failure`#@@@@@J@@@@@@@@[@@AϠ=ocaml.warn_on_literal_patternӐ@@0Division_by_zero]#@@@A٠  @+End_of_file\#$@@@Aᠰ@'FailureY#,@'@@A꠰@0Invalid_argumentX#5@0@@A󠰠$#@-Match_failureV#>@@=@9@;@@a@@A54@)Not_foundZ#O@@@A =<@-Out_of_memoryW#W@@@AED@.Stack_overflow^#_@@@AML@.Sys_blocked_io_#g@@@A$U'T'@)Sys_error[#o@j@@A-^0]0@:Undefined_recursive_modulea#x@@w@s@u@@h@@A>oAnA@:Continuation_already_takenb#@@@AFwIvI@&Stdlib@Azy@*ocaml.textT $ Freshening of various identifiers. SS@@@@@@A+!tAV',V'-@@;@@@A@@@@@V''@)ocaml.docs I A table used for freshening variables and static exception identifiers. UU&@@@@@@@@@@@@@A@@@@@@@@"@A+%substBW.3W.8@@;@@,A7@@@@@@@W..W.<@@@@A@@@Aг !tW.; @@3@GA;@@@A#@@@@@@@@@@@@A@@@@3@ @A@%empty[[@г`!t [ [@@ @@@3@%?9@A@@@[ @e P The freshening that does nothing. This is the unique inactive freshening.  Y>>!Z@@@@@@@-B@@@u琠@@@@@@!(is_empty7]8]@б@г!tB]C]@@ @@@310011111@:M8@A@@г$boolQ]R]@@ @@@@@@@@@@@\] @@hC@@ @@(activategbhb@б@гɠ!trbsb@@ @@@3a``aaaaa@1F@A@@гؠ!tbb@@ @@@@@@@@@@@b @ސ Activate the freshening. Without activation, operations to request freshenings have no effect (cf. the documentation below for [add_variable]). As such, the inactive renaming is unique. _aE@@@@@@@D@@@`@@@@@@1 !empty_preserving_activation_statef f-@б@г!tf0f1@@ @@@3@J_8@A@@г!!tf5f6@@ @@@@@@@@@@@f @' c Given the inactive freshening, return the same; otherwise, return an empty active freshening. de@@@@@@@E@@@7@@@@@@1,add_variable0qq@б@г[!tqq@@ @@@3@J_8@A@@б@г(Variable!t(Variableqq@ q q@@@@@@b @@В@г!t(Variable5q6q@ 9q:q@@@@@@c6 @@@г!tIqJq@@ @@@dE@@@@@ @@eL! @@@6 @@fO>@@@U@@gRX@@@^q@ f [add_variable t var] If [t] is active: It returns a fresh variable [new_var] and adds [var] -> [new_var] to the freshening. If a renaming [other_var] -> [var] or [symbol] -> [var] was already present in [t], it will also add [other_var] -> [new_var] and [symbol] -> [new_var]. If [t] is inactive, this is the identity. kh88lp@@@@@@@xF@@%@2@@@@@@q.add_variables'1u 1 5u 1 C@б@г䠐!tv D Iv D J@@ @@@h3|{{|||||@8@A@@б@г$listw K [w K _@г!t(Variablew K Pw K X@ w K Yw K Z@@@@@@i$ @@@ @@@k)@@В@г-$listx ` px ` t@г!t(Variablex ` ex ` m@ x ` nx ` o@@@@@@lM @@@ @@@nR@@@гE!tx ` wx ` x@@ @@@oa@@@@@ @@ph& @@@F @@qkR@@@q@@rnt@@@u 1 1@U Q Like [add_variable], but for multiple variables, each freshened separately. st  0@@@@@@@G@@%@eא@@@@@@-add_variables2'|  (|  @б@г!t2}  3}  @@ @@@s3!  !!!!!@8@A@@б@г$listC~  D~  @В@гE  @@@А!b@C@@JE  KE  @@@@"@@@@K. @@@G @@@PZE  E@@В@г̠$listfF  gF  @В@г_!t(VariablexF  yF  @ |F  }F  @@@@@@y @@@А!aQF  F  @@@А!bLF  F  @@@@@b@W@@$ @@@= @@@F  ;@@@г!tF  F  @@ @@@@@@@@ @@ @@@e @@a@@@@@@@@C  @ a Like [add_variables'], but passes through the other components of the input list unchanged. A 7 7B  @@@@@@@I@@%@"@@@@@@4add_mutable_variableHI 6 :I 6 N@б@гF!tI 6 QI 6 R@@ @@@3@8@A@@б@г0Mutable_variable!t0Mutable_variableI 6 VI 6 f@  I 6 g I 6 h@@@@@@' @@В@г!t0Mutable_variable I 6 l!I 6 |@ $I 6 }%I 6 ~@@@@@@(6 @@@г!t4I 6 5I 6 @@ @@@)E@@@@@ @@*L! @@@6 @@+O>@@@U@@,RX@@@II 6 6@ 1 Like [add_variable], but for mutable variables. VH  WH  5@@@@@@@cJ@@%@@@@@@@q4add_static_exceptionUmL  nL  @б@гϠ!txL  yL  @@ @@@-3gffggggg@8@A@@б@г0Static_exception!t0Static_exceptionL  L  @ L  L  @@@@@@h @@В@г!t0Static_exceptionL  L  @ L  L  @@@@@@i6 @@@г!tL  L  @@ @@@jE@@@@@ @@kL! @@@6 @@lO>@@@U@@mRX@@@L  @$ > As for [add_variable], but for static exception identifiers. K  K  @@@@@@@K@@%@4@@@@@@q.apply_variableVP  P  @б@гX!tP  P  @@ @@@n3@8@A@@б@г!t(VariableP  P  @ P  P  @@@@@@o @@г!t(Variable,P  -P  @ 0P  1P  @@@@@@p0 @@@@@q3$ @@@9@@r6< @@@?P  @ [apply_variable t var] applies the freshening [t] to [var]. If no renaming is specified in [t] for [var] it is returned unchanged. LN  MO V @@@@@@@YL@@@@@@@@@U6apply_mutable_variableWcS  dS  -@б@гŠ!tnS  0oS  1@@ @@@s3]\\]]]]]@n8@A@@б@г!t0Mutable_variableS  5S  E@ S  FS  G@@@@@@t @@г!t0Mutable_variableS  KS  [@ S  \S  ]@@@@@@u0 @@@@@v3$ @@@9@@w6< @@@S  @ 5 As for [apply_variable], but for mutable variables. R  R  @@@@@@@M@@@@@@@@@U6apply_static_exceptionXV  V  @б@г2!tV  V  @@ @@@x3@n8@A@@б@гc!t0Static_exceptionV  V  @ V  V  @@@@@@y @@гy!t0Static_exceptionV  V  @  V   V  @@@@@@z0 @@@@@{3$ @@@9@@|6< @@@V  @k @ As for [apply_variable], but for static exception identifiers. &U _ _'U _ @@@@@@@3N@@@{퐠@@@@@@U $rewrite_recursive_calls_with_symbols=^>^!@б@г!tH_"'I_"(@@ @@@}376677777@n8@A@@б@г'Flambda5function_declarations'Flambda_`).``)5@ c`)6d`)K@@@@@@ P @@б3make_closure_symbolб@г*Closure_id!t*Closure_id}aLf~aLp@ aLqaLr@@@@@@ : @@г&Symbol!t&SymbolaLvaL|@ aL}aL~@@@@@@ 'R @@@@@ (U& @@гQ5function_declarations'Flambdabb@ bb@@@@@@ )k @@O@@ *naLQ @@@Y@@ +ra @@@x@@ ,u{@@@^@  Replace recursive accesses to the closures in the set through [Symbol] by the corresponding [Var]. This is used to recover the recursive call when importing code from another compilation unit. If the renaming is inactive, this is the identity. X  ]@@@@@@@O@@#@'@@@@@@+Project_var~Cf&-f&8@V@@БA+!tDyy@@;@@QA@@@@@y@P  A table used for freshening of identifiers in [Project_closure] and [Move_within_set_of_closures] ("ids of closures"); and [Project_var] ("bound vars of closures") expressions. This information is propagated bottom up and populated when inlining a function containing a closure declaration. For instance, [let f x = let g y = ... x ... in ... g.x ... (Project_var x) ... g 1 ... (Apply (Project_closure g ...)) ] If f is inlined, g is renamed. The approximation of g will carry this table such that later the access to the field x of g and selection of g in the closure can be substituted.  g?A x@@@@@@@@@ P@@@A@_ѐ@@@@@@@3        @X@A!@%empty  $|HN %|HS@г3!t -|HV .|HW@@ @@@ -3        @>8@A@@@ 7|HJ @@ CQ@@ @@'composeà B C@б'earlierгU!t O P@@ @@@ .3 > = = > > > > >@#6!@A@@б%laterгh!t b c@@ @@@ /@@гu!t o p@@ @@@ 0 @@@@ 1# x @@5*@@ 2' | @@@ @ѐ ! Composition of two freshenings.  ~Y[ ~Y@@@@@@@ R@@ @ S@@@@@@G0apply_closure_idĠ  @б@г!t  @@ @@@ 33        @`w8@A@@б@гH!t*Closure_id  @   @@@@@@ 4 @@г^!t*Closure_id  @   @@@@@@ 50 @@@@@ 63$ @@@9@@ 76< @@@ @>  Freshen a closure ID based on the given renaming. The same ID is returned if the renaming does not affect it. If dealing with approximations, you probably want to use [Simple_value_approx.freshen_and_check_closure_id] instead of this function.   @@@@@@@ S@@@N @@@@@@U8apply_var_within_closureנ FL Fd@б@г!!t el em@@ @@@ 83        @n8@A@@б@г2Var_within_closure!t2Var_within_closure 2nu 3n@  6n 7n@@@@@@  @@г!t2Var_within_closure H I@  L M@@@@@@ 2 @@@@@ 5$ @@@;@@ 8> @@@ [FH@ = Like [apply_closure_id], but for variables within closures.  h iE@@@@@@@ uT@@@ /@@@@@@W%print}  @б@г&Format)formatter  @   @@@@@@3        @yA@A @@б@г!t  @@ @@@@@г H$unit  @@ @@@@@@@@!@@@'@@$/ @@@ @@ U@@@@*@A@@K@+@s@S@@3        @7U@A3        @@A f&; @@@ f&&@@ "apply_function_decls_and_free_vars    1@б@г B!t 27 28@@ @@@3        @ @A@@}@]@@C@@@+@A@@б@г#Map!t(Variable 9\ 9d@  9e 9h@@ 9i 9j@ @В@г.specialised_to'Flambda .9? /9F@  29G 39U@@@@@@H @@@А!a@E@S D9X E9Z@@@@@@@\@@@J @@@a R9>7@@б@г5function_declarations'Flambda `kp akw@  dkx ek@@@@@@z @@б7only_freshen_parametersг $bool v w@@ @@@@@В@гs#Map!t(Variable  @   @@  @ @В@гN.specialised_to'Flambda  @   @@@@@@Ű @@@А!a}˰  @@@@@@@԰@@@E @@@ٰ 2@@@г{5function_declarations'Flambda  @   @@@@@@ @@@г C!t    @@ @@@@@@г!t+Project_var  @    !@@@@@@ @@@@I@1@$@@@$K@@ @@' @@@@@+@@@@@.@@@4@@17@@@ $  !@@ 0W@@#@@70does_not_freshen /#' 0#7@б@г !t :#: ;#;@@ @@@3 ) ( ( ) ) ) ) )@Pe@A@@б@г $list K#J L#N@г @!t(Variable Y#? Z#G@  ]#H ^#I@@@@@@$ @@@ @@@)@@г $bool p#R q#V@@ @@@6@@@@@9 @@@?@@<B @@@ ~##@@ X@@@@B%print X\ Xa@б@г &Format)formatter Xd Xj@  Xk Xt@@@@@@3        @dy(@A @@б@г !t Xx Xy@@ @@@@@г R$unit X} X@@ @@@@@@@@!@@@'@@$/ @@@ XX@@ Y@@@@*;freshen_projection_relation    )@б@г #Map!t(Variable *F *N@  *O *R@@ *S *T@ @г.specialised_to'Flambda */ *6@  *7 *E@@@@@@3        @hD@A @@@4 @@@ @@б*fresheningг s!t Ue Uf@@ @@@@@б2closure_fresheningгD!t+Project_var 1g 2g@  5g 6g@@@@@@2 @@г /#Map!t(Variable K L@  O P@@ T U@ @г.specialised_to'Flambda c d@  g h@@@@@@d @@@2@@@ i@@Q=@@ l vgl"@@f[@@ p zUZ&@@@q@@ t)@@@   ,@ Ґ P N.B. This does not freshen the domain of the supplied map, only the range.   @@@@@@@ Z@@<@  T@@@@@@Du@ @В@г.specialised_to'FlambdaPDJQDQ@ TDRUD`@@@@@@} @@@А!a{aDcbDe@@@@@@@@@@E @@@oDI2@@eQ@@s#6@@zo@@w :@@@@@=@@@}@@@[@@B@@@  A@  A@  u@ U .@ ' @  @  2@  @ o @ @O@/@]@=@@g@@@@@@|+@$@-@ 2@@3@4@A@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Pierre Chambart, OCamlPro E44E4@ H Mark Shinwell and Leo White, Jane Street Europe FF@ H GG@ H Copyright 2013--2016 OCamlPro SAS HHg@ H Copyright 2014--2016 Jane Street Group LLC IhhIh@ H JJ@ H All rights reserved. This file is distributed under the terms of KKN@ H the GNU Lesser General Public License version 2.1, with the LOOLO@ H special exception on linking described in the file LICENSE. MM@ H NN5@ H************************************************************************O66O6@ %* Freshening of various identifiers.  o J* A table used for freshening variables and static exception identifiers.  S Q* The freshening that does nothing. This is the unique inactive freshening.  * Activate the freshening. Without activation, operations to request freshenings have no effect (cf. the documentation below for [add_variable]). As such, the inactive renaming is unique.  } d* Given the inactive freshening, return the same; otherwise, return an empty active freshening.  7 g* [add_variable t var] If [t] is active: It returns a fresh variable [new_var] and adds [var] -> [new_var] to the freshening. If a renaming [other_var] -> [var] or [symbol] -> [var] was already present in [t], it will also add [other_var] -> [new_var] and [symbol] -> [new_var]. If [t] is inactive, this is the identity.  R* Like [add_variable], but for multiple variables, each freshened separately.   b* Like [add_variables'], but passes through the second component of the input list unchanged.  @ b* Like [add_variables'], but passes through the other components of the input list unchanged.  X 2* Like [add_variable], but for mutable variables. Ҡ ?* As for [add_variable], but for static exception identifiers. L * [apply_variable t var] applies the freshening [t] to [var]. If no renaming is specified in [t] for [var] it is returned unchanged. ⠠ 6* As for [apply_variable], but for mutable variables. x A* As for [apply_variable], but for static exception identifiers.  * Replace recursive accesses to the closures in the set through [Symbol] by the corresponding [Var]. This is used to recover the recursive call when importing code from another compilation unit. If the renaming is inactive, this is the identity. e } CR-soon mshinwell for mshinwell: maybe inaccurate module name, it freshens closure IDs as well. Check use points though :d;e%@ * A table used for freshening of identifiers in [Project_closure] and [Move_within_set_of_closures] ("ids of closures"); and [Project_var] ("bound vars of closures") expressions. This information is propagated bottom up and populated when inlining a function containing a closure declaration. For instance, [let f x = let g y = ... x ... in ... g.x ... (Project_var x) ... g 1 ... (Apply (Project_closure g ...)) ] If f is inlined, g is renamed. The approximation of g will carry this table such that later the access to the field x of g and selection of g in the closure can be substituted. 5 # The freshening that does nothing. C{ D{G@ "* Composition of two freshenings.  * Freshen a closure ID based on the given renaming. The same ID is returned if the renaming does not affect it. If dealing with approximations, you probably want to use [Simple_value_approx.freshen_and_check_closure_id] instead of this function. S >* Like [apply_closure_id], but for variables within closures. 砠 . CR-soon mshinwell for mshinwell: add comment RS @ Q* N.B. This does not freshen the domain of the supplied map, only the range. ˠ , CR-someday mshinwell: consider fixing that [\ @@-./boot/ocamlc)-nostdlib"-I&./boot*-use-prims2runtime/primitives"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I2middle_end/flambda"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events"-c =/builds/workspace/precheck/flambda/false/label/ocaml-linux-32 >10/.-,+*)('&%$#"! @@0#AQ3@@@/Allocated_const0ЖݔTWŠ(Asttypes0>n{T8cئ5Build_path_prefix_map0z HkGs8CamlinternalFormatBasics0%FU(Q/Tu0CamlinternalLazy0&͂7 Pˆ2Clambda_primitives01U1/Closure_element0YWZ̡Q.hV&*Closure_id05:z[ކ.Closure_origin0vˆtT{(}z*Cmi_format0c˯7͗ԩmݠ0Compilation_unit0 {p-Vg_*Data_types0I'Ue`wq]Ѡ)Debuginfo0PtJ=^w/#Env0zV L{YWI0Idvu "*Format_doc0]mWϓ:Mݠ0/^*b1R%Ident0">WA+9*X,Identifiable0 {d\FX'`7Internal_variable_names0HdeՄL ԩ&Lambda0z1x]&ZT,Linkage_name0EwKсڊs)Load_path0I@18 ~(Location0a7cK_H%9)Longident0s `7mɕc$Misc0ob]6>Vê> 50~emPs&Symbol0ҡ4d,#Tag0\݅}x.Type_immediacy0A^abOhՠ%Types0^Y~# )Unit_info0ڀh%(2Var_within_closure00SSJh6  Ґ0' Gr㠠(Warnings0mJɒkgr