Caml1999T037zXURYC0CamlinternalLazyA+!tA3camlinternalLazy.mlR`hR`i@А!a@}3@@@@@@#intA;@@#intA@@@@@&_none_@@A@A@$charB;@@$charA@@@@@ @A@&stringQ;@@&stringA@@@@@@@@%bytesC;@@%bytesA@@@@@@@@%floatD;@@%floatA@@@@@@@@$boolE;@@%falsec@@%@$trued@@+@@@A@@@@@,@A@$unitF;@@"()e@@6@@@A@@@@@7@A@ #exnG;@@@A@@@@@;@@@#effH;@@O@A@A@@@@@@D@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@T@@@%arrayJ;@@R@A%arrayA@@@@@@_@@@ $listK;@@S@A"[]f@@l@"::g@@@T@@y@ @@A@Y@@@@@|@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@@@@ .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@@A5!4!@)Not_foundZ#O@@@A&=)<)@-Out_of_memoryW#W@@@A.E1D1@.Stack_overflow^#_@@@A6M9L9@.Sys_blocked_io_#g@@@A>UATA@)Sys_error[#o@j@@AG^J]J@:Undefined_recursive_modulea#x@@w@s@u@@h@@AXo[n[@:Continuation_already_takenb#@@@A`wcvc@&Stdlib;@@|@A@A@@@@@@{G@B@@@R``R`u@@@@@A@@R`eR`g@@BA@;@A@AB@~@@@Y@@@@@@@@@@Aг &lazy_tR`o@А!aŰR`lR`n@@@Ȱ#@@%@@%$@3@@@)UndefinedBTwTw@#@@@ATww@@AA@@@@@ @3@4@@1update_to_forcingd\$-\$>@б@г`#Obj!t\$A\$D@ \$E\$F@@@@@@3@$3-@@ @@гࠐ#int\$J\$M@@ @@@@@@@@@@ @@;caml_lazy_update_to_forcingA@ @@@(\$$)]P{@'noalloc/]Ps0]Pz@@3]Pp @@ABA@@  @ @/-reset_to_lazyeCbYbDbYo@б@г#Obj!tRbYrSbYu@ VbYvWbYw@@@@@@ 3QPPQQQQQ@Qo=@@ @@г$unitfbY{gbY@@ @@@ @@@@@ @@  @@7caml_lazy_reset_to_lazyA@P@@@wbYYxbY@'noalloc~bYbY@@bY @@CA@@  @ @.1update_to_forwardfhh@б@г#Obj!thh@ hh@@@@@@ 3@Pn<@@ @@гM$unithh@@ @@@ @@@@@ @@  @@;caml_lazy_update_to_forwardA@@@@hi@'noallocii@@i @@DA@@  @ @.@ఠ.do_force_blockgl  l  )@EA@@@@@ C@ @@ #arg@ @@ C@ 3@Lj8@@@࣠@#blkiAl  *l  -@FA@@3@( l   x  @@@@@  @@@ఠ!bjm 0 6m 0 7@(GA@@&Stdlib#Obj!t@@@ E@ 3@#/>@&@'@@@డ#Obj$repr9m 0 ::m 0 =@ =m 0 >>m 0 B@@@!a@@@*@@@@@)%identityAA @@@'obj.mliYY@@+Stdlib__ObjB@@@@l@@ =@@@ @@ 6@@ఐi#blkim 0 Cjm 0 F@@@@~C@@4@@ND@A@nm 0 2@@@ఠ'closurekyn J Pzn J W@HA@б@г!$unitn J un J y@@ @@@ 3@f{t@u@v@@ @@АC@ C@ DC@ C@ n J }n J @@@@@ @@ @@,+A@@@'@@@ @@ @@ @డ#Obj#objn J [n J ^@ n J _n J b@@@@@@@@!a@@@)%identityAA@@@ZZ@@~C@@@@@@@ @@ @@@@ @@ TC@ @@ E@ G@ @@ \@@డX#Obj%fieldn J dn J g@ n J hn J m@@@@@@5@@4@#intA@@@3@@2@@@1@@0@@/*%obj_fieldBAʠ@@@@ii @@J@&!@@@@@@ @@ @@@@ @@ @@@ @@ @@ @@ఐ"!b;n J n@@@@=@@<@@@@;@@:$unitF@@@9@@8@@7@@6.%obj_set_fieldCAg@@@@@hwiw@@gK@/*@@@@@@ @@ @'@@@ @@ @@@@ @@ &@@@ @@ @@ @@ 3@Ic@[@@@ @@ L@@ @d@e@@@@ఐѠ!bo  o  @\@@@@@ &F@ *F@ )@@@o  o  @@_@@@ $F@ ,F@ +.@@డr#Obj$repro  o  @ o  o  @@۰@@@@@@ @F@ 3@@ 2@@@ 1@@ 0S@@ภ"()2o  3o  @;@@@N@@@@A@@A@@@@@G@ Af@@=o  >o  @@$@@@ "@ BG@ =p@@ @@@@@ CE@ w@@ఠ&resultlYq  Zq  @hIA@@3RQQRRRRR@@@@ఐ'closuregq  hq  @@@@@@@ H@@ G@@ F@@ภHyq  zq  @G@@@@@@ OF@ S$@@@@%@A@q   @@ డ#Obj)set_fieldr  r  @ r  r  @@@@@@@@ _@@ ^@@@@ ]@@ \@@@@ [@@ Z@@@ Y@@ X@@ W@@ V3@`@Z@[@@@@ఐ!br  r  @2@@@@@ vF@ zF@ y@@@r  r  @@5@@@ tF@ |F@ {'@@డH#Obj$reprr  r  @ r  r  @@@@@\@@ @@@ @@ F@@ఐ&resultr  r  @P@@nS@@r  r  @@@@@ r@ G@ ]@@~ @@@@@ E@ pc@ ఐ1update_to_forward!s  "s  &@c@@@@@@ @@ }@@@ @@ {@@ఐ!b8s  '9s  (@@@@@@ F@ F@ @@" @@@@@ E@ @ఐ&resultOt * .Pt * 4@@@@2@@@@@@@@@ఠ!em]u 5 <^u 5 =@lJA@@V@@@ @@@ డ#Obj)set_fieldsv A Etv A H@ wv A Ixv A R@@@@@`@@@ @@ @@@@ @@ @n@@@ @@ @@@ @@ @@ @@ 3@<@@@ @9@:@@@@ఐ!bv A Sv A T@@@@@@ G@ G@ @@@v A Uv A V@@@@@ G@ G@ *@@డ+#Obj$reprv A Xv A [@ v A \v A `@@@@@@@@@ G@ @@ @@ G@ @@ G@ @@ @@@ @@ X@@࣠@%paramnAĠɰv A fv A h@@@@@j@@@@డi%raisev A l v A q@@#exnG@@@@@!a@@@&%raiseAA @@@*stdlib.mli^BB^Bg@@@@@@@@@@ @@ IK@ @@ @@ఐڠ!e7v A r8v A s@@@/@@@ K@ K@ @@: @@@Cv A aDv A t@@lG@ @@Hv A WIv A u@@/@@@ @ H@ @@ @@ @@@ F@ @ ఐ-reset_to_lazybw w {cw w @@@@"@@@ @@  @@@ @@ @@ఐ`!byw w zw w @@@9@@@ G@ G@ @@" @@=@@@ F@ @డ%raisex  x  @@@@@@@ @@ F@ @@  @@ఐK!ex  @@@@@@ F@ F@ @@ @@@Q@@ @A@@!@@@p  @@3@@@@)@@ @:@@!+@L@@"@A@C@ !@A@@@Ƞ@ఠ2do_force_val_blocko{  {  @KA@@@@ .C@ #@@ $#arg@ %@@ &C@ "3@@@@@@࣠@#blkqA{  {  @LA@@3@({  B  @@@@@  @@@ఠ!br|  |  @ MA@@@@@ 8E@ )3@(7@@ @@@డu#Obj$repr|  |  @ |  |  @@ް@@@N@@ -@@@ ,@@ +@@ఐK#blk0|  1|  @)@@`,@@@@0-@A@5|  @@@ఠ'closures@}  A}  @ONA@б@г蠐$unitP}  +Q}  /@@ @@@ ;3JIIJJJJJ@O]V@W@X@@ @@АC@ C@ C@ @C@ <d}  3e}  7@@@@@ =@@ >@@,+A@@@'@@@ L@@ K@@ J@డ#Obj#obj}  }  @ }  }  @@ǰ@@@m@@@ Z@@ Y@6@@@ T@@ S@C@ N@@ RE@ UG@ X@@ WH@@డ #Obj%field}  }  @ }  }  #@@@@@@@@ k@@ j@@@@ i@@ h@@@ g@@ f@@ eq@@ఐҠ!b}  $}  %@{@@@@@ H@ H@ @@@}  &}  '@@@@@ }H@ H@ @@}  }  (@@@@@ a@ H@ {@@u @б@гc@g@@@ M@А*h@@ @@ Ol@@ P@ }   }  8@@@@@@@ @@ @@ E@ @A@ }   @@ డ#Obj)set_field $~ < > %~ < A@  (~ < B )~ < K@@@@@@@@ @@ @@@@ @@ @@@@ @@ @@@ @@ @@ @@ 3 9 8 8 9 9 9 9 9@ @@@@ I@@ H@@ G@ @ @@@@ఐZ!b X~ < L Y~ < M@@@@@@@ F@ F@ @@@ i~ < N j~ < O@@@@@ F@ F@ .@@డ#Obj$repr ~ < Q ~ < T@  ~ < U ~ < Y@@I@@@n@@@ F@ @@ t@@@ @@ R@@ภm ~ < Z ~ < \@l@@@G@ _@@ ~ < P ~ < ]@@@@@ @ G@ i@@ @@g@@@ E@ o@@ఠ&resultt  y   y @ OA@@b3        @}@@@ఐ'closure  y   y @@@@@@@ @@ z@@ @@ภ  y   y @@@@@@@ F@ $@@@@%@A@  y { @@ డU#Obj)set_field @   @  @  @   @  @@h@@@@@@ @@ @h@@@ @@ @@@@ @@ g@@@ @@ @@ @@ 3        @`@Z@[@@@@ఐ&!b $@   %@  @ϰ@@ @@@ F@ F@ @@@ 5@   6@  @@@@@ F@ F@ '@@డ#Obj$repr N@   O@  @  R@   S@  @@@@@@@ ;@@@ @@ F@@ఐ&result g@   h@  @P@@ S@@ k@   l@  @@R@@@ @ G@ ]@@~ @@.@@@ E@ c@ ఐ1update_to_forward A   A  @ǰ@@@@@@ @@ @@@ @@ {@@ఐ!b A   A  @G@@ @@@ (F@ ,F@ +@@" @@`@@@ -E@ &@ఐ&result B  @@@V@1@@W@@@X@@@Y@@@Z@@@[e@@@\@A@C@ /@A@@@堰@ఠ4force_gen_lazy_blocku E   E  @ PA@@(only_val @@@ tC@ 1@@ 2@ #arg@ ?C@ ;@@@ AC@ 7@@ 8@@ 9@@ :C@ 3@@ 4C@ 03        @.'@(@)@@@࣠&&wA* E   E  @ QA@@,3        @= E   K  4@@@@@ E   @@#blkxA E   E  !@ "RA@г6&lazy_t E  ) !E  /@А8=3        @$/R@'@(@@ )E  $ *E  (@@@GF@@@ = @@ 1E   2E  0@@@O@@@@ఐ M1update_to_forcing @H   AH  @ !@@@ P@@@ J@@ I ;@@@ H@@ G3 B A A B B B B B@)Clk@@@ B@>@?@@@@డ #Obj$repr dH   eH  @  hH   iH  @@+@@@@@@ fG@ Z@@ YW@@@ X@@ W,@@ఐs#blk H   H  @6@@9@@ H   H  @@ @@@ S@ gH@ dC@@Q @@ @@@ QG@@ I   I  @@ @@@ jG@ iV@@ @@@ kY@@ఐ(only_val I   I  @@@d@ఐ2do_force_val_block I   I  @ɰ@@@ߠ@@@ F@ y@@ xG@ w@@ v|@@ఐà#blk I   I  @@@@@@@@@ J   J  @@ @@@ nG@ m@@ @@@ o@@@ఐ .do_force_block J   J  @@@@@@@ F@ @@ G@ @@ @@ఐ#blk J   J  @@@@@@@ @@ K   K  !@@ @@@ q@@ @@@ r@@@డ %raise &K  % 'K  *@@@@@@@ @@ CG@ @@ @@ภ)Undefined ;K  +5@; a 2@@@@@@ gA@A _@@ ]@<@@6@@@ G@ @@#B@@Z@@@A JH  D@@\@CEA@~C@ L@A@I@IH@^@ఠ0force_lazy_blocky ZN ^ b [N ^ r@ iSA@@@ y@ @@@ C@ @@ @@ @@ C@ 3 b a a b b b b b@}@@@@@࣠@#blk{A {N ^ s |N ^ v@ TA@@3 t s s t t t t t@* N ^ ^ N ^ @@@@@  @@ఐƠ4force_gen_lazy_block N ^ y N ^ @#@@@@@ @@ @8@@@ @@ 9E@ @@ @@ 3        @&2C@)@*@@@אภ%false N ^  N ^ @; Y c@@@M@@@@B@@A @@ \@ @@@@@ E@ @@ఐP#blk N ^ E@#F@@f&@@;G@@)'@QHA@nC@ O@A@L@LK@b@ఠ)force_gen| Sfj Sfs@ UA@@(only_val@@@/C@ @@ @ #arg@C@ @@@ C@ @@ C@ @@ C@ @@ C@ 3        @@@@@@࣠$$~A( Sfu Sf}@ VA@@*3        @; Sff iC@@@@@ Sft @@#lzvA !Sf "Sf@ 0WA@г5&lazy_t .Sf /Sf@А7<3 ( ' ' ( ( ( ( (@$/P@'@(@@ 7Sf 8Sf@@@FE@@@  @@ ?Sf~ @Sf@@@N@@@@@ఠ#lzv M] N]@ \XA@@`_@@@\F@ 3 L K K L L L L L@%?gf@@@ @:@;@@@డ #Sys/opaque_identity k]  l] @  o]  p]@@@!a@ @@S@@R'%opaqueAA @@@'sys.mli=P=P=P=@@+Stdlib__Sys]@@@@:F@U@@V@@T6@@ఐy#lzv ] ] @@@@GC@@0@@D@A@ ]@@@ఠ!xԠ ^$* ^$+@ YA@@ @@@lF@]3        @Zib@c@d@@@డ #Obj$repr ^$. ^$1@  ^$2 ^$6@@ @@@۠@@@nF@b@@a @@@`@@_%@@ఐ#lzv ^$7 ^$:@/@@2@@#@@63@A@ ^$&@@@ఠ!tՠ c>D c>E@ ZA@@ @@@{F@o3        @JXQ@R@S@@@డ g#Obj#tag c>H c>K@  c>Lc>O@@@ @@@&@@%#@@@$@@#,caml_obj_tagA@ Ϡ@@@ ^|| ^|@'noalloc ^| ^|@@ ^| @@ G@% @@@ @@@t@@s@@@@r@@q?@@ఐ!xBc>PCc>Q@I@@ *@@@}G@G@S@@D @@XT@A@Nc>@ @@డ !=ZdU\[dU]@@!a@@@@@@$boolE@@@@@@@&%equalBAV@@@@VyWy@@ SQ@@@@@@@E@@@@ @@@@@@@@@3~}}~~~~~@@@@@@@ఐ!tdUZdU[@ @@@@డ #Obj+forward_tagdU^dUa@ dUbdUm@@ @@@@ bS % % cS % :@@ a\@ @@;F@1@@%@@@@@F@7@డ +#Obj#objesxes{@ es|es@@ @@@ @@@@@C@ F@@@W@@డ N#Obj%fieldeses@ eses@@ @@@ @@@@@@ @@@@@ @@@@@@@@@ఐl!xeses@@@ @@@G@G@@@@$es%es@@ @@@G@G@@@.es/es@@ @@@@G@@@k @А#argGC@@esAes@@CeswDes@@@@డ PgQg@@@@d@@@E@@@@ @@@@@@@@@@@ఐ~!tmgng@@@@@డ #Obj+forcing_tag~gg@ gg@@ y@@@}@ 9M   :M  @@ 8V@ @@8F@@@%@@@@@F@@డ%raisegg@@@@@@@@@F@@@"@@ภ)Undefinedgg@z@@@@@@F@3@@@@4@డ*"<>hh@@!a@@@ @@@o@@@@@@@)%notequalBAà@@@@~QQ~Q@@ R@@@@@@@E@@@@ @@@@@@@@@m@@ఐ!thh@w@@z@@డo#Obj(lazy_taghh@ hh@@ @@@@ O   O  @@ X@ @@8F@@@%@@O@@@F@@డ#Obj#obj7h8h @ ;h <h@@ ~@@@ $@@@ @@ JF@ @@ @@ఐ!xRhSh@Y@@ :@@@F@F@@@& @А#arglC@۰ehfh@@hhih@@@@ఐ4force_gen_lazy_blockti!ui5@@@@@@!@@ @@@@@@F@@@@@@ఐ(only_vali7i?@_@@ @@ఐR#lzvi@@@@@@@-F@2F@1 @@6@@$!@h@@I#@g@@%@dUW@@r'@c@@s@@@t@@@u\@A@C@6@A@@@@ఠ(indirect֠q?Cq?K@[A@@@#arg@C@<@@@BC@8@@9 @@@C@:@@;C@73@ @@@@@࣠@#lzvAq?Mq?P@\A@г'&lazy_tq?Xq?^@А).3@!Cq??xFP@@@q?Sq?W@@@;:@@@> @@q?Lq?_@@@C@@@@@ఠ#lzv٠ss@,]A@@UT@@@PE@F3@(B\[@@@C@=@>@@@డ#Sys/opaque_identity;s<s@ ?s@s@@а@@@&E@I@@J@@H"@@ఐh#lzvSsTs@,@@3/@@@@0@A@Xs@@@ఠ!xڠctdt@r^A@@J@@@`E@Q3a``aaaaa@FUN@O@P@@@డ#Obj$repr|t}t@ tt@@C@@@@@@bE@V@@Uo@@@T@@S%@@ఐ~#lzvtt@/@@2@@#@@63@A@t@@@ఠ!t۠uu@_A@@@@@oE@c3@IWP@Q@R@@@డ"#Obj#taguu@ uu@@@@@@@@h@@g@@@f@@e"@@ఐ}!xuu@,@@@@@qF@uF@t6@@' @@:7@A@u @@డY"||v v@@@@@]@@\@@@@[@@Z@@@Y@@X@@W'%sequorBA @@@@  @@^@! @@@@@@}@@|@@@@{@@z@@@y@@x@@w3@w~@@@@@@డߠ8v9v@ް@@@L@@@E@@@@ @@@@@@@@@!@@ఐ!tUvVv@+@@.@@డ#Obj(lazy_tagfvgv@ jvkv @@U@@/F@F@@@@v@@@@F@N@@డ*,vv@)@@@@@@E@@@@ @@*@@@@@@@l@@ఐ!tvv@v@@y@@డ#Obj+forcing_tagvv@ vv"@@3@@/F@@@@@@@@@F@@@o@@@@@E@@ఐz0force_lazy_blockw#0w#@@հ@@@ C@@@@@@E@@@@@ఐϠ#lzvw#Aw#D@@@@@@E@E@@@w#/w#E@@@w#*@@#@ఐ砐#lzvxFM@@@-C@@ v@@1@@@2W@l@@3@@@4@ A@HC@@A@ @  @1@\A@:4B@(@@[@= A@ Z,@[@"@OC@ib@c@d@@3@Il@@@h0CamlinternalLazyD@@TC@@ױB@@Q A@@ @@@ H************************************************************************>A@@?A@L@ H DBMMEBM@ H OCaml JCKC@ H PDQD3@ H Damien Doligez, projet Para, INRIA Rocquencourt VE44WE4@ H \F]F@ H Copyright 1997 Institut National de Recherche en Informatique et bGcG@ H en Automatique. hHiHg@ H nIhhoIh@ H All rights reserved. This file is distributed under the terms of tJuJ@ H the GNU Lesser General Public License version 2.1, with the zK{KN@ H special exception on linking described in the file LICENSE. LOOLO@ H MM@ H************************************************************************NN5@ # Internals of forcing lazy values. P77P7^@  [update_to_forcing blk] tries to update a [blk] with [lazy_tag] to [forcing_tag] using compare-and-swap (CAS), taking care to handle concurrent marking of the header word by a concurrent GC thread. Returns [0] if the CAS is successful. If the CAS fails, then the tag was observed to be something other than [lazy_tag] due to a concurrent mutator. In this case, the function returns [1]. V[#@ [reset_to_lazy blk] expects [blk] to be a lazy object with [Obj.forcing_tag] and updates the tag to [Obj.lazy_tag], taking care to handle concurrent marking of this object's header by a concurrent GC thread. _}}aX@ [update_to_forward blk] expects [blk] to be a lazy object with [Obj.forcing_tag] and updates the tag to [Obj.forward_tag], taking care to handle concurrent marking of this object's header by a concurrent GC thread. dg@ + Assumes [blk] is a block with tag forcing kk @5 Release the closure o  o  @ + Assumes [blk] is a block with tag forcing z  z  @5 Release the closure ~ < _~ < x@7 Called by [force_gen] D  D  @ j We expect the tag to be [lazy_tag], but may be other tags due to concurrent forcing of lazy values. F 3 5G y @ # used in the %lazy_force primitive M 6 6M 6 ]@ [force_gen ~only_val:false] is not used, since [Lazy.force] is declared as a primitive whose code inlines the tag tests of its argument, except when afl instrumentation is turned on. P  R(e@ b Using [Sys.opaque_identity] prevents two potential problems: - If the value is known to have Forward_tag, then it could have been shortcut during GC, so that information must be forgotten (see GPR#713 and issue #7301). This is not an issue here at the moment since [Obj.tag] is not simplified by the compiler, and GPR#713 also ensures that no value will be known to have Forward_tag. - If the value is known to be immutable, then if the compiler cannot prove that the last branch is not taken it will issue a warning 59 (modification of an immutable value) T\@ START no safe points. If a GC occurs here, then the object [x] may be short-circuited, and getting the first field of [x] would get us the wrong value. Luckily, the compiler does not insert GC safe points at this place, so it is ok. _>@b)=@4 END no safe points ff@ If [lzv] is already forced, then [indirect lzv] is [lzv]. Otherwise it returns a fresh thunk that, when forced, will force [lzv]. This provides a way to copy/move [lzv] that works correctly even if [lzv] is being forced concurrently. kEEp<>@ 5 Sys.opaque_identity: see [force_gen] comment above. rbdrb@@G+../ocamlopt0-strict-sequence(-absname"-w5+a-4-9-41-42-44-45-48"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal2-function-sections#-O3/-afl-inst-ratio!0"-c Z/home/teraram/ci/builds/workspace/parallel-build/flambda/true/label/ocaml-manycores/stdlib @@0 ܡV-5E3@@@8CamlinternalFormatBasics0|.e1R$|o 0zY# #4#-&Stdlib0t0VoS%{<F:-Stdlib__Int320y Mzs.Vs+Stdlib__Obj0Zh+:N*+Stdlib__Sys0b'8=OIn@@AWC@@Wa@@@ 7 A@S]A@  @m\h@@@@@ ~ 0:@\f   @  %l@@Pj@F@@@@@@@AB@@@@@@@@AuA@@@BC@@