Caml1999T037uROMC0CamlinternalLazyA+!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@@@@@@u3@$3-@@ @@гࠐ#int\$J\$M@@ @@@v@@@@@w@@;caml_lazy_update_to_forcingA@ @@@&\$$']P{@'noalloc-]Ps.]Pz@@1]Pp @@?BA@@  @ @--reset_to_lazyeAbYbBbYo@б@г#Obj!tPbYrQbYu@ TbYvUbYw@@@@@@83ONNOOOOO@Om=@@ @@г$unitdbY{ebY@@ @@@9@@@@@:@@7caml_lazy_reset_to_lazyA@N@@@sbYYtbY@'noalloczbY{bY@@~bY @@CA@@  @ @,1update_to_forwardfhh@б@г#Obj!thh@ hh@@@@@@=3@Nl<@@ @@гI$unithh@@ @@@>@@@@@?@@;caml_lazy_update_to_forwardA@@@@hi@'noallocii@@i @@DA@@  @ @,@ఠ.do_force_blockgl  l  )@EA@@@@@LC@C#arg@D@@EC@B3@Hf6@@@࣠@#blkiAl  *l  -@ FA@@3@&l  x  @@@@@  @@@ఠ!bjm 0 6m 0 7@ GA@@&Stdlib#Obj!t@@@UE@H3@#/>@&@'@@@డ#Obj$repr1m 0 :2m 0 =@ 5m 0 >6m 0 B@@@!a@(@@@@@)%identityAA @@@'obj.mliYY@@+Stdlib__ObjB@@@@h9@@@K@@J2@@ఐe#blk]m 0 C^m 0 F@<@@z?@@0@@J@@A@bm 0 2@@@@kn J Pln J W@@@@@@aC@C@C@[C@X@@`3pooppppp@[pi@j@k@@@'closurek@HA@@@@_@@^б@г$unitn J un J y@@&@@@W@@А( n J }n J @@@ -@@Y%@@76A@@@5@@@c4@@b,@డ#Obj#objn J [n J ^@ n J _n J b@@@@@@!a@@@)%identityAA@@@ZZ@@C@@@@@@@n@x@@@ijC@e@@hE@jG@m@@ld@@డM#Obj%fieldn J dn J g@ n J hn J m@@@@@@1@#intA@@@0@@@/@@.@@-*%obj_fieldBAŠ@@@@ii @@J@"@@@@@@{@@@@z@@@y@@x@@w@@ఐ!b(n J n)n J o@@@@@@H@H@@@@9n J p:n J q@@A@@@H@H@@@Cn J cDn J r@@2@@@s@H@@@ @б@гy@}@@@d@Аn~@@@@f@^n J Z_n J @@@@@@@@@E@@A@hn J L @@ డ#Obj)set_fieldxo  yo  @ |o  }o  @@@k@@@8@@@@7@v@@@6$unitF@@@5@@4@@3@@2.%obj_set_fieldCAT@@@@@UwVw@@TK@)$@@@@@@@!@@@@@@@ @@@@@@@@@3@97I@L@4@@@@ఐ!bo  o  @E@@@@@F@F@@@@o  o  @@P@@@F@F@'@@డH#Obj$repro  o  @ o  o  @@@@@@@@F@@@@@@J@@ภ"()o  o  @;@@@N@@@@A@@A@@@@@G@]@@o  o  @@@@@@G@g@@ @@@@@E@n@@ఠ&resultl-q  .q  @G@=*@@డ#Obj$reprv A Xv A [@ v A \v A `@@^@@@@@@@QG@N@@^G@O@@PG@D@@@C@@BT@@࣠@%paramnAĠv A fv A h@@@@@f@@@@డ'%raisev A lv A q@@#exnG@@@!a@@@&%raiseAA @@@*stdlib.mli^BB^Bg@@@@@@@@@@VEK@U@@T@@ఐ̠!ev A rv A s@@@-@@@[K@]K@\@@6 @@@v A av A t@@fG@`@@v A Wv A u@@@@@6@aH@M@@ @@@@@bF@5@ ఐ۠-reset_to_lazyw w {w w @@@@@@@g@@@f@@e@@ఐ !b1w w 2w w @@@@@@nG@rG@q@@  @@!@@@sF@m@డ%raiseJx  Kx  @@@@@@@wjF@v@@u@@ఐ9!e^x  [@\@@@@@|F@~F@}@@d@@@Me@@@/f@@@@@kp  h@@3a``aaaaa@@@@j@@@k@@@l@@O@vmA@C@t@A@q@qp@@ఠ2do_force_val_blocko{  {  @KA@@@@C@#arg@@@C@3@@@@@@࣠@#blkqA{  {  @LA@@3@&{  B  @@@@@  @@@ఠ!br|  |  @MA@@@@@E@3@(7@@ @@@డ)#Obj$repr|  |  @ |  |  @@@@@L@@@@@@@ఐI#blk|  |  @'@@^*@@@@.+@A@|  @@@@}  }  @@@@@@vC@ }  @@@@@,@@@@@@@XC@@@E@G@@@R@@డ#Obj%fieldb}  c}  @ f}  g}  #@@s@@@U@@@@s@@@]@@@@@@@w@@ఐϠ!b}  $}  %@@@q@@@H@H@@@@}  &}  '@@@@@H@H@@@}  }  (@@@@@@H@@@m @б@г_@c@@@@А'd@@f@@@}  }  8@@@@@@@@@E@@A@}   @@ డ/#Obj)set_field~ < >~ < A@ ~ < B~ < K@@Y@@@@@@@Y@@@@@@@X@@@@@@@@@3@@@@@@@ఐF!b~ < L~ < M@@@@@@F@F@@@@ ~ < N ~ < O@@@@@F@F@'@@డ#Obj$repr "~ < Q #~ < T@  &~ < U '~ < Y@@@@@8@@@ F@@@@@@I@@ภ7 <~ < Z =~ < \@6@@@G@ V@@ B~ < P C~ < ]@@1@@@@ G@ `@@{ @@1@@@ E@f@@ఠ&resultt [ y  \ y @ jOA@@c3 T S S T T T T T@t@@@ఐb'closure i y  j y @~@@@z@@@ y@@ @@ภt y y  z y @s@@@@@@ F@ "@@@@#@A@  y { @@ డ#Obj)set_field @   @  @  @   @  @@@@@@@@ @@@@ @@@@ @@@ @@ @@ @@ 3        @X@R@S@@@@ఐ!b @   @  @@@@@@ 0F@ 4F@ 3@@@ @   @  @@J@@@ /F@ 6F@ 5'@@డB#Obj$repr @   @  @  @   @  @@@@@@@@ ;@@ :D@@ఐ&result @   @  @N@@Q@@ @   @  @@@@@ .@ FG@ E[@@v @@@@@ GE@ -a@ ఐ1update_to_forward A   A  @a@@@@@@ Lw@@@ K@@ Jw@@ఐ|!b .A   /A  @.@@@@@ SF@ WF@ V@@  @@@@@ XE@ R@ఐꠐ&result EB  @@@K@/@@L@@@M@@@N@z@@O@@@PL@f@@Q@A@C@ Z@A@@@à@ఠ4force_gen_lazy_blocku \E   ]E  @ kPA@@(only_val @@@ C@ \@ #arg@ hC@ d@@@ jC@ a@@ b@@ cC@ ]@@ ^C@ [3 t s s t t t t t@@@@@@࣠""wA& E   E  @ QA@@*3        @9 E   K  4@@@@@ E   @@#blkxA@ E   E  !@@10@@@ k3        @#D@@@@@  @ RA; г>&lazy_t E  ) E  /@А@E E  $ E  (@@@LK@@@ f @@ E   E  0@@@T@@@@ఐࠐ1update_to_forcing H   H  @@@@@@@ r@@@ q@@ p3        @8F>@A@5@@@@డ O#Obj$repr H   H  @  H   H  @@@@@@@@ G@ @@@ ~@@ }&@@ఐp#blk H   H  @0@@3@@ H   H  @@ !@@@ y@ H@ =@@I @@ @@@ xA@@ 'I   (I  @@ @@@ G@ P@@ @@@ S@@ఐ(only_val 9I   :I  @@@^@ఐƠ2do_force_val_block EI   FI  @ư@@@ڠ@@@ F@ G@ @@ t@@ఐ#blk \I   ]I  @~@@@@@@@@ hJ   iJ  @@ ]@@@ G@ @@ `@@@ @@@ఐ.do_force_block {J   |J  @@@@@@@ F@  G@ @@ @@ఐ#blk J   J  @@@@@@@@@ K   K  !@@ @@@ @@ @@@ @@@డ %raise K  % K  *@@@@@@@ :G@ @@ @@ภ)Undefined K  +,@;  @@@@@@ A@A @@ @3@@@@@ G@ @@!9@@Q@@@A H  ;@@S@:D fc>E@ tZA@@ m@@@ FF@ <3 d c c d d d d d@HVO@P@Q@@@డ #Obj#tag c>H c>K@  c>L c>O@@@ r@@@&!@@@%@@$,caml_obj_tagA@ M@@@ L^|| M^|@'noalloc S^| T^|@@ W^| @@ UG@#@@@ @@@ @<@@@ ?@@ >;@@ఐ!x c>P c>Q@E@@ @@@ GG@ KG@ JO@@@ @@TP@A@ c>@ @@డ -!= dU\ dU]@@!a@@$boolE@@@'@@&@@%&%equalBA@@@@y y@@ Q@@@@@@@ YE@ P@@@@ O@@ N@@ M3        @@@@@@@ఐ!tdUZdU[@ @@@@డ o#Obj+forward_tagdU^dUa@ dUbdUm@@ @@@k@ S % % S % :@@ \@ @@9F@ Z1@@%@@@@@ [F@ X7@డ #Obj#obj7esx8es{@ ;es|<es@@ @@@ *@@@ aC@ F@ `@@ _U@@డ #Obj%fieldXesYes@ \es]es@@ i@@@ K@@@ n@ i@@@ m S@@@ l@@ k@@ jz@@ఐX!xwesxes@@@ g@@@ ~G@ G@ @@@eses@@ @@@ }G@ G@ @@eses@@ @@@ f@ G@ |@@e @А#arg0C@ \eses@@eswes@@@@డ 預gg@@@@P@@@ E@ @@@@ @@ @@ @@ఐh!tgg@ڰ@@@@డ <#Obj+forcing_taggg@ gg@@ @@@e@ M   M  @@ V@ @@6F@ @@%@@@@@ F@ @డ a%raisegg@:@@@:@@@ F@ @@ @@ภ)Undefinedgg@S@@@L@@@ F@ '@@@@(@డ "<>'h(h@@!a@@[@@@*@@)@@()%notequalBAa@@@@a~QQb~Q@@ "R@@@@@@@ E@ @@@@ @@ @@ Y@@ఐ!tVhWh@c@@f@@డ #Obj(lazy_tagghhh@ khlh@@ q@@@g@ ,O   -O  @@ +X@ @@6F@ @@%@@@@@ F@ @డ #Obj#objhh @ h h@@ ٰ@@@ @@@ #F@ @@ @@ఐ!xhh@7@@ @@@ F@ F@ @@$ @А#argEC@ Űhh@@hh@@@@ఐl4force_gen_lazy_blocki!i5@ذ@@ie@@@ @`a@@@ dF@ @@ @@ @vఐ](only_vali7i?@@@@@@ఐ"#lzvi@`@ưa@@@@@ F@ F@ @@2j@@$@hl@@E @gn@@ @dUWp@@^ @Aq@@_@r@@`@s@@a,@rtA@C@ {@A@x@xw@@ఠ(indirect֠q?Cq?K@![A@@@B#arg@ BC@ @@@ C@ O @@@ CC@ @@ C@ 3#""#####@@@@@@࣠@#lzvA@<q?M=q?P@@"!@@@ 376677777@5Fq??GxFP@@@@ @W\A/г2&lazy_tTq?XUq?^@А49Zq?S[q?W@@@@?@@@  @@bq?Lcq?_@@@H"@@@@@ఠ#lzv٠psqs@]A@@ZY@@@ E@ 3onnooooo@9G?@B@3@@@డ#Sys/opaque_identityss@ ss@@@@@ E@ @@ @@ఐg#lzvss@&@@-)@@@@*@A@s@@@ఠ!xڠtt@^A@@ @@@ E@ 3@@OH@I@J@@@డ'#Obj$reprtt@ tt@@ @@@@@@ E@  @@@ @@ #@@ఐv#lzvtt@-@@0@@!@@41@A@t@@@ఠ!t۠uu@_A@@@@@ E@ 3@GUN@O@P@@@డm#Obj#taguu@ uu@@@@@@@@ @@@ @@  @@ఐy!x)u*u@*@@@@@ F@ F@ 4@@% @@85@A@5u @@డ"||Av Bv@@o@@@P@u@@@Oy@@@N@@M@@L'%sequorBA @@@@  @@@^@@@@@@@ @@@@ @@@ @@ @@ 3`__`````@m{t@u@v@@@@డyvzv@@@@@@@ .E@ %@@@@ $@@ #@@ "@@ఐ!tvv@'@@*@@డ#Obj(lazy_tagvv@ vv @@<@@-F@ /B@@@@l@@@ @ 0F@ -J@@డ"vv@@@@\@@@ >E@ 5@@@@ 4@@ 3@@ 2d@@ఐ㠐!tvv@n@@q@@డH#Obj+forcing_tagvv@ vv"@@ @@-F@ ?@@@@@@@ @ @F@ =@@k@@@@@ AE@ @ఐ.0force_lazy_block w#0w#@@@@@C@ H@@@ GE@ F@@ E@@ఐ#lzv#w#A$w#D@j@@@@@ ME@ OE@ N@@/w#/0w#E@@@2w#*@@ @ఐˠ#lzv;xFM@@@C@ P@@v@@@ @@C@X@@@@@@A@/C@ R@A@@@@NA@qkB@_/@@@z @ @f@@,@PI@J@K@@3TSSTTTTT@2S@@@O0CamlinternalLazyD@@ C@@B@@ A@@ @@@ H************************************************************************uA@@vA@L@ H {BMM|BM@ H OCaml CC@ H DD3@ H Damien Doligez, projet Para, INRIA Rocquencourt E44E4@ H FF@ H Copyright 1997 Institut National de Recherche en Informatique et GG@ H en Automatique. HHg@ H IhhIh@ H All rights reserved. This file is distributed under the terms of JJ@ H the GNU Lesser General Public License version 2.1, with the KKN@ 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. #kEE$p<>@ 5 Sys.opaque_identity: see [force_gen] comment above. )rbd*rb@@C+../ocamlopt0-strict-sequence(-absname"-w5+a-4-9-41-42-44-45-48"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal2-function-sections/-afl-inst-ratio!0"-c:; [/home/teraram/ci/builds/workspace/parallel-build/flambda/false/label/ocaml-manycores/stdlib @@0 ܡV-5E376677777@4@@8CamlinternalFormatBasics0%FU(Q/TuV0&͂7 Pˆ&Stdlib0Lku]8_٠-Stdlib__Int320 u&+Stdlib__Obj0]'kZ<栠+Stdlib__Sys0 -ռ鱦s5/@@AWC@DN@@@0@  @w@ l @@JT@@@@  nx@& ) 3@בw 0 :]@@P@F@@@G@D@@@AB@@@@@@@@AA@@@BC@@