Caml1999T037tQOC0CamlinternalLazyA+!tA3camlinternalLazy.mlR`hR`i@А!a@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;@@@A@A@@@@@@G@B@@@R``R`u@@@@@A@@R`eR`g@@BA@;@A@AנB@@@@Y@@@@@@@@@@Aг &lazy_tR`o@А!aR`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@@]Pp @@$BA@@  @ @--reset_to_lazye&bYb'bYo@б@г#Obj!t5bYr6bYu@ 9bYv:bYw@@@@@@8343344444@Om=@@ @@гꠐ$unitIbY{JbY@@ @@@9@@@@@:@@7caml_lazy_reset_to_lazyA@N@@@XbYYYbY@'noalloc_bY`bY@@cbY @@qCA@@  @ @,1update_to_forwardfshth@б@г#Obj!thh@ hh@@@@@@=3@Nl<@@ @@г7$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$reprm 0 :m 0 =@ m 0 >m 0 B@@@!a@(@@@@@)%identityAA @@@'obj.mliYY@@+Stdlib__ObjB@@@@h9@@@K@@J2@@ఐe#blkBm 0 CCm 0 F@<@@z?@@0@@J@@A@Gm 0 2@@@@Pn J PQn J W@@@@@@aC@C@C@[C@X@@`3UTTUUUUU@[pi@j@k@@@'closurek@tHA@@@@_@@^б@г$unitxn J uyn 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@f@@@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 nn J o@@@@@@H@H@@@@n J pn J q@@A@@@H@H@@@(n J c)n J r@@2@@@s@H@@@ @б@гy@}@@@d@Аn~@@@@f@Cn J ZDn J @@@@@@@@@E@@A@Mn J L @@ డ#Obj)set_field]o  ^o  @ ao  bo  @@@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@@ఠ&resultlq  q  @!IA@@3        @~@@@ఐ'closure q  !q  @@@@@@@@@@@ภF0q  1q  @E@@@@@@F@"@@@@#@A@:q   @@ డ#Obj)set_fieldJr  Kr  @ Nr  Or  @@@@@X@@@@@@@@b@@@@@@@@@@@@3YXXYYYYY@X @R@S@@@@ఐ{!bqr  rr  @@@|@@@F@F@@@@r  r  @@@@@F@F@'@@డ#Obj$reprr  r  @ r  r  @@@@@G@@@@@D@@ఐ&resultr  r  @N@@YQ@@r  r  @@@@@@G@[@@v @@@@@E@a@ ఐ]1update_to_forwards  s  &@3@@@^@@@ I@@@ @@ w@@ఐ!bs  's  (@@@u@@@F@F@@@  @@@@@E@@ఐꠐ&resultt * .t * 4@@@@0@@@@@@@@@ఠ!em u 5 < u 5 =@JA@@@@@@@@ డ#Obj)set_field v A E!v A H@ $v A I%v A R@@ð@@@.@@@'@@@@&@8@@@%@@@$@@#@@"@@!3/../////@6M@@@@3@4@@@@ఐT!bJv A SKv A T@@@U@@@8G@G@=*@@డ#Obj$reprtv A Xuv A [@ xv A \yv 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@@ఐ !bw w w w @@@@@@nG@rG@q@@  @@!@@@sF@m@డ%raise/x  0x  @@@@@@@wjF@v@@u@@ఐ9!eCx  [@\@@@@@|F@~F@}@@d@@@Me@@@/f@@@@@Pp  h@@3FEEFFFFF@@@@j@@@k@@@l@@O@vmA@C@t@A@q@qp@@ఠ2do_force_val_blockod{  e{  @sKA@@@@C@#arg@@@C@3hgghhhhh@@@@@@࣠@#blkqA{  {  @LA@@3zyyzzzzz@&{  B  @@@@@  @@@ఠ!br|  |  @MA@@@@@E@3@(7@@ @@@డ)#Obj$repr|  |  @ |  |  @@@@@L@@@@@@@ఐI#blk|  |  @'@@^*@@@@.+@A@|  @@@@}  }  @@@@@@vC@ ~ < 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@@ '~ < P (~ < ]@@1@@@@ G@ `@@{ @@1@@@ E@f@@ఠ&resultt @ y  A y @ OOA@@c3 9 8 8 9 9 9 9 9@t@@@ఐb'closure N y  O y @~@@@z@@@ y@@ @@ภt ^ y  _ y @s@@@@@@ F@ "@@@@#@A@ h y { @@ డ#Obj)set_field x@   y@  @  |@   }@  @@@@@@@@ @@@@ @@@@ @@@ @@ @@ @@ 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 *B  @@@K@/@@L@@@M@@@N@z@@O@@@PL@f@@Q@A@C@ Z@A@@@à@ఠ4force_gen_lazy_blocku AE   BE  @ PPA@@(only_val @@@ C@ \@ #arg@ hC@ d@@@ jC@ a@@ b@@ cC@ ]@@ ^C@ [3 Y X X Y Y Y Y Y@@@@@@࣠""wA& qE   rE  @ QA@@*3 j i i j j j j j@9 yE   zK  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 I   I  @@@^@ఐƠ2do_force_val_block *I   +I  @ư@@@ڠ@@@ F@ G@ @@ t@@ఐ#blk AI   BI  @~@@@@@@@@ MJ   NJ  @@ ]@@@ G@ @@ `@@@ @@@ఐ.do_force_block `J   aJ  @@@@@@@ F@  G@ @@ @@ఐ#blk wJ   xJ  @@@@@@@@@ K   K  !@@ @@@ @@ @@@ @@@డ %raise K  % K  *@@@@@@@ :G@ @@ @@ภ)Undefined K  +,@;  @@@@@@ A@A @@ @3@@@@@ G@ @@!9@@Q@@@A H  ;@@S@:Sfj ?Sfs@ MUA@@(only_val@@@ C@ @ #arg@ C@ @@@ C@ C@ @@ C@ @@ C@ 3 T S S T T T T T@@@@@@࣠  ~A$ lSfu mSf}@ {VA@@(3 e d d e e e e e@7 tSff uiC@@@@@ wSft @@#lzvA@ Sf Sf@@0/@@@ 3 | { { | | | | |@#B@@@@@  @ WA: г=&lazy_t Sf Sf@А?D Sf Sf@@@KJ@@@  @@ Sf~ Sf@@@S@@@@@ఠ#lzv ] ]@ XA@@ed@@@ ,F@ 3        @6D<@?@3@@@డ E#Sys/opaque_identity ]  ] @  ]  ]@@@!a@ @@ &'%opaqueAA @@@'sys.mli=P=P=P=@@+Stdlib__Sys]@@@@2F@ (@@ '.@@ఐv#lzv ] ] @8@@?;@@,@@<@A@ ]@@@ఠ!xԠ ^$* ^$+@ YA@@ @@@ :F@ -3        @RaZ@[@\@@@డ #Obj$repr ^$. ^$1@  !^$2 "^$6@@ @@@֠@@@ ;F@ 1 1@@@ 0@@ /#@@ఐ#lzv :^$7 ;^$:@-@@0@@!@@41@A@ ?^$&@@@ఠ!tՠ Jc>D Kc>E@ YZA@@ m@@@ FF@ <3 I H H I I I I I@HVO@P@Q@@@డ #Obj#tag dc>H ec>K@  hc>L ic>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        @@@@@@@ఐ!t dUZ dU[@ @@@@డ o#Obj+forward_tag dU^ dUa@  dUb dUm@@ @@@k@ S % % S % :@@ \@ @@9F@ Z1@@%@@@@@ [F@ X7@డ #Obj#objesxes{@  es|!es@@ @@@ *@@@ aC@ F@ `@@ _U@@డ #Obj%field=es>es@ AesBes@@ i@@@ K@@@ n@ i@@@ m S@@@ l@@ k@@ jz@@ఐX!x\es]es@@@ g@@@ ~G@ G@ @@@mesnes@@ @@@ }G@ G@ @@wesxes@@ @@@ 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@@ఐ!t;h<h@c@@f@@డ #Obj(lazy_tagLhMh@ PhQh@@ q@@@g@ ,O   -O  @@ +X@ @@6F@ @@%@@@@@ F@ @డ #Obj#objrhsh @ vh wh@@ ٰ@@@ @@@ #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@@@8#arg@ BC@ @@@ C@ E @@@ CC@ @@ C@ 3@@@@@@࣠@#lzvA@!q?M"q?P@@"!@@@ 3@5+q??,xFP@@@@ @<\A/г2&lazy_t9q?X:q?^@А49?q?S@q?W@@@@?@@@  @@Gq?LHq?_@@@H"@@@@@ఠ#lzv٠UsVs@d]A@@ZY@@@ E@ 3TSSTTTTT@9G?@B@3@@@డ#Sys/opaque_identityosps@ ssts@@@@@ 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!xuu@*@@@@@ F@ F@ 4@@% @@85@A@u @@డ"||&v 'v@@o@@@P@u@@@Oy@@@N@@M@@L'%sequorBA @@@@  @@@^@@@@@@@ @@@@ @@@ @@ @@ 3EDDEEEEE@m{t@u@v@@@@డ^v_v@@@@@@@ .E@ %@@@@ $@@ #@@ "@@ఐ!twvxv@'@@*@@డ#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_blockw#0w#@@@@@C@ H@@@ GE@ F@@ E@@ఐ#lzvw#A w#D@j@@@@@ ME@ OE@ N@@w#/w#E@@@w#*@@ @ఐˠ#lzv xFM@@@C@ P@%v@@@ @@C@X@@@@@@A@/C@ R@A@@@@3A@qkB@_/@@@z @ @f@@,@PI@J@K@@398899999@2S@@@O0CamlinternalLazyD@@ C@@B@@ A@@ @@@ H************************************************************************ZA@@[A@L@ H `BMMaBM@ H OCaml fCgC@ H lDmD3@ H Damien Doligez, projet Para, INRIA Rocquencourt rE44sE4@ H xFyF@ 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. rbdrb@@7)../ocamlc0-strict-sequence(-absname"-w5+a-4-9-41-42-44-45-48"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal"-c D/builds/workspace/precheck/flambda/false/label/ocaml-linux-32/stdlib @@0 ܡV-5E3@@@8CamlinternalFormatBasics0%FU(Q/Tu80&͂7 Pˆ&Stdlib0Lku]8_٠-Stdlib__Int320 u&+Stdlib__Obj0]'kZ<栠+Stdlib__Sys0 -ռ鱦s5/@@AWCޑ@AK@ @@-@  @Y@ i @@GQ@@@@  ku@# & 0@ԑްt~ - 7Z@@P@F@@@D@A@@@AB@@@@@@@@AA@@@BC@@