Caml1999I037„•¦¾G@çÓ 2Closure_conversion ° 1lambda_to_flambdaØÐÀÁ'backendÀ› ¡’,Backend_intf!S@õá@öÀÁ,module_identÀ³¡’%Ident!t@@õá@÷ÀÁ$sizeÀ³£#intA@@õá@øÀÁ@À³¡’&Lambda&lambda@@õá@ùÀ³¡’'Flambda'program@@õá@ú@õá@û@õá@ü@õá@ý@õá@þ@°À )middle_end/flambda/closure_conversion.mlio ^ ^Àt Ô è@@±?B@@@„•¦¾ªTëý  2Closure_conversion0͸„oj€ ¢9)Z¯$  (Warnings0mîJÉ’kÇÓgr¢îs‘ìºüº›  -Stdlib__Uchar056ýuf¾¹4ºæÍ[_  +Stdlib__Sys0 û-ռ鱦sÎ5¶/Á  .Stdlib__String0Óï<¤ˆž¬IPúÔ¦âç  +Stdlib__Set0kb'G|ªœ ©€PIF(  +Stdlib__Seq0nw¹™zúG&amgùõ  .Stdlib__Result0³²§6 ý‘]«/ÅJ²ÿ  +Stdlib__Map0Áhؤ˜5O8Ý% By  .Stdlib__Lexing0êä‡e÷<.‚ÔV«Ç   ,Stdlib__Lazy0* -S™$.)æ"“0DË  -Stdlib__Int640¯Óãl-…J œ~m¶ï-Û  /Stdlib__Hashtbl0ѱ·Nù]à[ßç/!Þ©  .Stdlib__Format0É¢b täâÅæÁLÿir  .Stdlib__Either0VªÙy`¢ìu~c à .Stdlib__Domain0B€¡j¾|Ä5s¥)Ú  .Stdlib__Digest0 µl!LHgEr†Î¶”‡å   .Stdlib__Buffer0î8ŒAPüF”<¿ ¬t€µ.  &Stdlib0-èåiè8Q"çL{Âv;Ÿ  0Static_exception0w«BßÑÜ”d3Ñ÷¡µŒB  3Simple_value_approx0P*+Ê ›K`þ#4âMK  %Shape0ým“åýA;Hò™ÄXã„ß  6Set_of_closures_origin0ý¬Ì§{î˼HO/¿PØ  2Set_of_closures_id0³¤pôiðìè|ŒnÀy  *Projection0“ÿn÷訥·(¡  )Primitive0©Â²»¹~å$x½z¹Tà·  $Path0(|¹r>Ä8Û Ïd‚wx  )Parsetree0UÒ©¿=p²Ð>*¡Ú%"e  )Parameter0Kb……"Qjʑǭ@uYu  +Outcometree0Íe³uëWÇS~½ûÕdææ  'Numbers0º0õ³$ PS†6?Ûnu€.  0Mutable_variable0ë_³ùµñù ?.Ã+äL¶  $Misc0ÒàZú1šŠæ¶X=Ó_Ùc  )Longident0s ÿ`ö7¦mÉ•äc  (Location0aÂù7cK_H%9Ðý  )Load_path0˜“ï»ßIÀÑ@18 ~  ,Linkage_name0h A¨EaÚ.–ÚC1¯ R  &Lambda0µ½© ”.V¶¦uý$ ^3©  7Internal_variable_names0ü½HdýeöÕ„éL Ô©  ,Identifiable0”ýì~ܽÁËÇžÃ+µ  %Ident0‰ki–ê8' Ÿx%œ+Å  *Freshening0$1è\MÝŠmA¿Ê³  *Format_doc0š÷¨“жŽ]mWÏ“:ãMÝ  'Flambda01U­šx|ÕCb-ó   )Export_id0ÿ×Q¯h:ÔÊ "Æì  #Env0ËÁJì«=í£»,ßÎW¾u½  )Debuginfo0¯Pð²tJ=^£w¶/  *Data_types0I²¶û'µUe`wq]Ñ  0Compilation_unit0®»i(&Û¥$¦´P£.³­  *Cmi_format0_Øj~ùG³†´B0õ§  .Closure_origin0a„êìBÇzlèàýt@  *Closure_id0sŽM ;ÓÂß@‘eAlx  /Closure_element0.1 @ç1úãѧ÷Uñ  2Clambda_primitives0³½1âòU¨ˆ1ÈÕ”  0CamlinternalLazy0&žÍ‚7 Îÿ”ÂôêPˆ  8CamlinternalFormatBasics0“%˜FU(Q/TþùÇu°  5Build_path_prefix_map0¸¶z’ ÙÃHÇkGsí  ,Backend_intf0)ø”ÒLÔS…äxjf1š½  (Asttypes0>‘nœ{¬T±8cئ  /Allocated_const0°Ð–¢ã¥îûÝ”®TWÅ@„•¦¾ @@Caml1999T037„•¦¾(’f%²C2Closure_conversion’° °ž° -ocaml.warning°À )middle_end/flambda/closure_conversion.mliQ„ˆÀQ„•@   À‘ ²2+a-4-9-30-40-41-42°À Q„—ÀQ„©@@°ÀQ„–ÀQ„ª@°@@@@@°ÀQ„„ÀQ„«@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@ n Y@ @ @@@@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@@A ° 54@’£)Not_foundZ#O@@@A  ° =<@’£-Out_of_memoryW#W@@@A ° ED@’£.Stack_overflow^#_@@@A ° ML@’£.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#‰@@@AF ° wIvI@’’&Stdlib@A°zy@ °ð 1lambda_to_flambdaÕ °À–o ^ bÀ—o ^ s@б'backendЙÀ¡’,Backend_intf!S@¡ ¡ ,Backend_intf°À­p t ‰À®p t •@  °À±p t –À²p t —@°@À› @õá@Ÿ¡°À¸p t À¹p t ˜@@б,module_identг¡’%Ident!t ¡ %Ident°ÀËq ™ «ÀÌq ™ °@  °ÀÏq ™ ±ÀÐq ™ ²@°@@À³@@õá@Ï¿° @@б$sizeг¡ #int°Àár ³ ½Àâr ³ À@@À³ @@õá@Ðа@@б@г¡’&Lambda&lambda ¡ &Lambda°Àös Á ÆÀ÷s Á Ì@  °Àús Á ÍÀûs Á Ó@°@@À³@@õá@ Úê° @@г¡’'Flambda'program ¡ 'Flambda°Àt Ô ÙÀt Ô à@  °Àt Ô áÀt Ô è@°@@À³@@õá@­° @@ÀÁ@@õá@®°& @@ÀÁF;@õá@¯°Àr ³ ¸ @@ÀÁfP@õá@° °À#q ™ ž@@ÀÁŒr@õá@±°À'p t y@@Ð@°À*o ^ ^@ ° )ocaml.docï   À‘ ² « Generation of [Flambda] intermediate language code from [Lambda] code by performing a form of closure conversion. Function declarations (which may bind one or more variables identifying functions, possibly with mutual recursion) are transformed to [Set_of_closures] expressions. [Project_closure] expressions are then used to select a closure for a particular function from a [Set_of_closures] expression. The [Set_of_closures] expressions say nothing about the actual runtime layout of the closures; this is handled when [Flambda] code is translated to [Clambda] code. The following transformations are also performed during closure conversion: - Constant blocks (by which is meant things wrapped in [Lambda.Const_block]) are converted to applications of the [Pmakeblock] primitive. - [Levent] debugging event nodes are removed and the information within them attached to function, method and [raise] calls. - Tuplified functions are converted to curried functions and a stub function emitted to call the curried version. For example: let rec f (x, y) = f (x + 1, y + 1) is transformed to: let rec internal_f x y = f (x + 1,y + 1) and f (x, y) = internal_f x y (* [f] is marked as a stub function *) - The [Pdirapply] and [Prevapply] application primitives are removed and converted to normal [Flambda] application nodes. The [lambda_to_flambda] function is not re-entrant. °À9S­­À:n [ ]@@@@@@@±FB@@°*@ °    À‘ ²@@@@@@2@ °¸"@@343344444@°3º$@A@   H************************************************************************°ÀPA@@ÀQA@L@   H °ÀVBMMÀWBM™@   H OCaml °À\CššÀ]Cšæ@   H °ÀbDççÀcDç3@   H Pierre Chambart, OCamlPro °ÀhE44ÀiE4€@   H Mark Shinwell and Leo White, Jane Street Europe °ÀnFÀoFÍ@   H °ÀtGÎÎÀuGÎ@   H Copyright 2013--2016 OCamlPro SAS °ÀzHÀ{Hg@   H Copyright 2014--2016 Jane Street Group LLC °À€IhhÀIh´@   H °À†JµµÀ‡Jµ@   H All rights reserved. This file is distributed under the terms of °ÀŒKÀKN@   H the GNU Lesser General Public License version 2.1, with the °À’LOOÀ“LO›@   H special exception on linking described in the file LICENSE. °À˜MœœÀ™Mœè@   H °ÀžNééÀŸNé5@   H************************************************************************°À¤O66À¥O6‚@   ¬* Generation of [Flambda] intermediate language code from [Lambda] code by performing a form of closure conversion. Function declarations (which may bind one or more variables identifying functions, possibly with mutual recursion) are transformed to [Set_of_closures] expressions. [Project_closure] expressions are then used to select a closure for a particular function from a [Set_of_closures] expression. The [Set_of_closures] expressions say nothing about the actual runtime layout of the closures; this is handled when [Flambda] code is translated to [Clambda] code. The following transformations are also performed during closure conversion: - Constant blocks (by which is meant things wrapped in [Lambda.Const_block]) are converted to applications of the [Pmakeblock] primitive. - [Levent] debugging event nodes are removed and the information within them attached to function, method and [raise] calls. - Tuplified functions are converted to curried functions and a stub function emitted to call the curried version. For example: let rec f (x, y) = f (x + 1, y + 1) is transformed to: let rec internal_f x y = f (x + 1,y + 1) and f (x, y) = internal_f x y (* [f] is marked as a stub function *) - The [Pdirapply] and [Prevapply] application primitives are removed and converted to normal [Flambda] application nodes. The [lambda_to_flambda] function is not re-entrant. q@ó-./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äå J/home/ci/builds/workspace/precheck/flambda/false/label/ocaml-ubuntu-latest    > 1 0 / . - , + * ) ( ' & % $ # " !     @@0ã¬ÏÕ5KÿPýÆdL•y3ìëëììììì@ê@@  /Allocated_const0°Ð–¢ã¥îûÝ”®TWÅ  (Asttypes0>‘nœ{¬T±8cئ  d0)ø”ÒLÔS…äxjf1š½  5Build_path_prefix_map0¸¶z’ ÙÃHÇkGsí  8CamlinternalFormatBasics0“%˜FU(Q/TþùÇu°  0CamlinternalLazy0&žÍ‚7 Îÿ”ÂôêPˆ  2Clambda_primitives0³½1âòU¨ˆ1ÈÕ”  10͸„oj€ ¢9)Z¯$  /Closure_element0.1 @ç1úãѧ÷Uñ  *Closure_id0sŽM ;ÓÂß@‘eAlx  .Closure_origin0a„êìBÇzlèàýt@  *Cmi_format0_Øj~ùG³†´B0õ§  0Compilation_unit0®»i(&Û¥$¦´P£.³­  *Data_types0I²¶û'µUe`wq]Ñ  )Debuginfo0¯Pð²tJ=^£w¶/  #Env0ËÁJì«=í£»,ßÎW¾u½  )Export_id0ÿ×Q¯h:ÔÊ "Æì  'Flambda01U­šx|ÕCb-ó   *Format_doc0š÷¨“жŽ]mWÏ“:ãMÝ  *Freshening0$1è\MÝŠmA¿Ê³  %Ident0‰ki–ê8' Ÿx%œ+Å  ,Identifiable0”ýì~ܽÁËÇžÃ+µ  7Internal_variable_names0ü½HdýeöÕ„éL Ô©  &Lambda0µ½© ”.V¶¦uý$ ^3©  ,Linkage_name0h A¨EaÚ.–ÚC1¯ R  )Load_path0˜“ï»ßIÀÑ@18 ~  (Location0aÂù7cK_H%9Ðý  )Longident0s ÿ`ö7¦mÉ•äc  $Misc0ÒàZú1šŠæ¶X=Ó_Ùc  0Mutable_variable0ë_³ùµñù ?.Ã+äL¶  'Numbers0º0õ³$ PS†6?Ûnu€.  +Outcometree0Íe³uëWÇS~½ûÕdææ  )Parameter0Kb……"Qjʑǭ@uYu  )Parsetree0UÒ©¿=p²Ð>*¡Ú%"e  $Path0(|¹r>Ä8Û Ïd‚wx  )Primitive0©Â²»¹~å$x½z¹Tà·  *Projection0“ÿn÷訥·(¡  2Set_of_closures_id0³¤pôiðìè|ŒnÀy  6Set_of_closures_origin0ý¬Ì§{î˼HO/¿PØ  %Shape0ým“åýA;Hò™ÄXã„ß  3Simple_value_approx0P*+Ê ›K`þ#4âMK  0Static_exception0w«BßÑÜ”d3Ñ÷¡µŒB  &Stdlib0-èåiè8Q"çL{Âv;Ÿ  .Stdlib__Buffer0î8ŒAPüF”<¿ ¬t€µ.  .Stdlib__Digest0 µl!LHgEr†Î¶”‡å   .Stdlib__Domain0B€¡j¾|Ä5s¥)Ú  .Stdlib__Either0VªÙy`¢ìu~c à .Stdlib__Format0É¢b täâÅæÁLÿir  /Stdlib__Hashtbl0ѱ·Nù]à[ßç/!Þ©  -Stdlib__Int640¯Óãl-…J œ~m¶ï-Û  ,Stdlib__Lazy0* -S™$.)æ"“0DË  .Stdlib__Lexing0êä‡e÷<.‚ÔV«Ç   +Stdlib__Map0Áhؤ˜5O8Ý% By  .Stdlib__Result0³²§6 ý‘]«/ÅJ²ÿ  +Stdlib__Seq0nw¹™zúG&amgùõ  +Stdlib__Set0kb'G|ªœ ©€PIF(  .Stdlib__String0Óï<¤ˆž¬IPúÔ¦âç  +Stdlib__Sys0 û-ռ鱦sÎ5¶/Á  -Stdlib__Uchar056ýuf¾¹4ºæÍ[_  %Subst0Ú™þÙÜ>îs‘ìºüº›  &Symbol0_)ºçÇûÄÓ¶Ó¥!h  #Tag0 Û%XC¡žÑ}²ì{”3ð  .Type_immediacy0AÊ^µÄab¨O³ûhÕ  %Types0R.ûÝz7…8À§¢ýóÂm  )Unit_info0ÜÚ€h§%ßå£ýÎý(  2Var_within_closure0H6ʤæ(Óf Ëc2Ó‰rH  (Variable0·]ÿ–EÂè„„0‡=  (Warnings0mîJÉ’kÇÓgr¢