Caml1999I031 (Parmatch-const_compare~@(Asttypes(constant@@@n@ (constant@@@o#intA@@@p@@q@@r@3typing/parmatch.mliVV@@"D@&le_pat@)Typedtree'pattern@@@s@ 'pattern@@@t$boolE@@@u@@v@@w@!]"]@@BE@'le_pats@$listI&'pattern@@@x@@@y@2'pattern@@@z@@@{)@@@|@@}@@~@H`I`'@@iF@Ӡ&Compat@@%equal@%Types7constructor_description@@@i@ 7constructor_description@@@jP@@@k@@l@@m@ogpjRd@@G@@&compat@o'pattern@@@]@v'pattern@@@^l@@@_@@`@@a@lv}lv@@H@'compats@j'pattern@@@b@@@c@v'pattern@@@d@@@e@@@f@@g@@h@mm@@I@@@dn@J@@ %Empty #exnG@@@A&_none_@@A@KB@#lub@'pattern@@@@'pattern@@@'pattern@@@@@@@@rr!@@L@$lubs@'pattern@@@@@@@Ƞ'pattern@@@@@@Ҡ'pattern@@@@@@@@@@@v v@@)M@(get_mins@@!a@@@@@@@@@@@@@@@@@@@@@+z G G,z G ~@@LN@(set_args@*'pattern@@@@5'pattern@@@@@@?'pattern@@@@@@@@@@@QA 9 9RA 9 o@@rO@6set_args_erase_mutable@P'pattern@@@@7['pattern@@@@@@Ae'pattern@@@@@@@@@@@wB p pxB p @@P@-pat_of_constr@v'pattern@@@@.7constructor_description@@@'pattern@@@@@@@@D  D  @@Q@0complete_constrs@,pattern_data7constructor_description@@@@@@@'7constructor_description@@@@@@17constructor_description@@@@@@@@@@@E  H _ @@R@-pat_explosion8@@)PE_single@@U c xU c @@T-PE_gadt_cases@@U c U c @@U@@A@@@@@U c c@@A@SA@,ppat_of_type8@@(PT_empty@@W  W  @@ W&PT_any@@X  X  @@X*PT_pattern:@@@)Parsetree'pattern@@@&Stdlib'Hashtbl!t&stringO@@@7constructor_description@@@@@@'Hashtbl!t@@@1label_description@@@@@@@@5Y  6]4_@@VY@@A@@@@@9V  @@@@YVA@,ppat_of_type@#Env!t@@@@)type_expr@@@t@@@@@@@@V_aaW_a@@wZ@1pressure_variants@!t@@@@=a'pattern@@@@@@$unitF@@@@@@@@yazb@@[@ (pressure_variants_in_computation_pattern@A!t@@@@`/general_pattern+computation@@@@@@@@@)@@@@@@@@cd/@@\@-check_partial@@'Hashtbl!t@@@ʠ07constructor_description@@@@@@@'Hashtbl!t@@@͠D1label_description@@@@@@@'pattern@@@&optionJ'pattern@@@@@@@@@@@@@(Location!t@@@@Ǡ$case%value@@@@@@@@@'partial@@@@@@@@@@m qh@@)]@,check_unused@@@@@@'Hashtbl!t @@@ߠ7constructor_description@@@@@@@$'Hashtbl!t!@@@1label_description@@@@@@@A'pattern@@@nA'pattern@@@@@@@@@@@@@@@)M$caseR%value@@@@@@@@@@@@@@@@@irjwC^@@^@+irrefutable@h'pattern@@@^@@@@@@}z{{~z{@@_@(inactive'partial~'partial@@@@'pattern@@@{@@@@@@@@@@`@8check_ambiguous_bindings@y$case%value@@@@@@@@@B@@@@@@@@a@0some_private_tag%label@@@@ddd@@b@@p(Parmatch0V2R'(Warnings0zdͦkUe$%Types0lm?ƈ)Typedtree0r&/ĤVD dˠ.Type_immediacy0dV^25b)̓ԆSj%Subst0BYw>*Su}Ck-Stdlib__Uchar0*Ujmyc6]]W.Stdlib__String0I3UK# +Stdlib__Set0.z9FX+Stdlib__Seq05"g1<)b+Stdlib__Map0kZ,ҷ'V.Stdlib__Lexing01'jh,-k4,Stdlib__Lazy0C 4 "$p1tU/Stdlib__Hashtbl04$*uկdD.Stdlib__Format0{hXsHW#ȼ.Stdlib__Either0&]XF.Stdlib__Digest0aI]2t*x4%".Stdlib__Buffer0K ɦb+Z8)#KH"&Stdlib0yӶ~*%Shape0H[DTċwToe@Q)Primitive0յ_9|br$Path0L%SsN|#Ɣj)Parsetree0`ⰧkRE+Outcometree0gCtr @@@i`@ F [le_pats (p1 .. pm) (q1 .. qn)] means: forall i <= m, [le_pat pi qi] ua((va(s@@@@@@@F@@K&CompatAdd@@Т@@ff@Б%equalgg@б@г>7constructor_description%Typeshh!@@ @@@s0@}E@A@@б@гR7constructor_description%Typesi%1i%N@@ @@@t@@г$booljR`jRd@@ @@@u!@@@@@v$@@@*@@w'- @@@g@@G@@@-@F@@0@0H @A0@2@Afkem@@Б&compatlvlv@б@г'patternlvlv@@ @@@x0@Q@A@@б@г'patternlvlv@@ @@@y@@г⠐$boollvlv@@ @@@z@@@@@{ @@@&@@|#) @@@!lv}@@8H@@@)'compats,m-m@б@г̠$list7m8m@г'patternAmBm@@ @@@}0CBBCCCCC@a)@A@@@ @@@ @@б@г점$listWmXm@г'patternambm@@ @@@ @@@@@@% @@гB$boolsmtm@@ @@@2@@@@@5@@@5@@8> @@@m@@I@@@>@g@` @@0@Cb @A0@@Akern@@@f@@琠 F Exported compatibility functor, abstracted over constructor equality cuucu@@@@@@@d@@%EmptyBpp@ @@@Ap@@K@@@@@0@ 9@@*@@@C@@/"J@A@#lubrr@б@г'patternrr @@ @@@0@(60@A@@б@г'patternrr@@ @@@@@г'patternrr!@@ @@@@@@@@!@@@'@@$* @@@r@X [lub p q] is a pattern that matches all values matched by [p] and [q]. May raise [Empty], when [p] and [q] are not compatible. s""tm@@@@@@@'L@@7$lubsvv@б@г$list&v'v@г'pattern0v1v@@ @@@021122222@Zo6@A@@@ @@@ @@б@г۠$listFvGv@г'patternPvQv@@ @@@ @@@@@@% @@г$listbvcv@г'patternlvmv@@ @@@<@@@@@@A @@@#@@D*@@@D@@GM@@@v@Ԑ [ [lubs [p1; ...; pn] [q1; ...; qk]], where [n < k], is [[lub p1 q1; ...; lub pk qk]]. wx  E@@@@@@@M@,@Z(get_minsz G Kz G S@б@б@А!a@C@0@q*@Az G Wz G Y@@б@А!a z G ]z G _@@г$boolz G cz G g@@ @@@@@@!@@@@@$@@ @@б@гc$listz G oz G s@А!a4/z G lz G n@@@:@@@6 @@гx$listz G zz G ~@А!aIDz G wz G y@@@O@@@K @@@@@N@@@4@@Qz G V@@@z G G@@N@@@X(set_argsA 9 =A 9 E@б@г'patternA 9 HA 9 O@@ @@@0@q@A@@б@г$list!A 9 ["A 9 _@г'pattern+A 9 S,A 9 Z@@ @@@@@@@@@  @@гҠ$list=A 9 k>A 9 o@г'patternGA 9 cHA 9 j@@ @@@7@@@@@@< @@@#@@?*@@@E@@BH@@@ZA 9 9@ Those two functions recombine one pattern and its arguments: For instance: (_,_)::p1::p2::rem -> (p1, p2)::rem The second one will replace mutable arguments by '_' f|  g@ 6 8@@@@@@@~O@,@U6set_args_erase_mutablerB p tsB p @б@г,'pattern}B p ~B p @@ @@@0~~@n,@A@@б@г#$listB p B p @гG'patternB p B p @@ @@@@@@@@@  @@г?$listB p B p @гc'patternB p B p @@ @@@7@@@@@@< @@@#@@?*@@@E@@BH@@@B p p@@P@@@H-pat_of_constrD  D  @б@г'patternD  D  @@ @@@0@av@A@@б@г7constructor_descriptionD  D  @@ @@@@@г'patternD  D  @@ @@@@@@@@!@@@'@@$* @@@ D  @@ Q@@@*0complete_constrsE  E  @б@г,pattern_dataF  + F  7@г7constructor_description)F  *F  *@@ @@@0+**+++++@Mb)@A@@@ @@@ @@б@гԠ$list?G ; W@G ; [@г7constructor_descriptionIG ; ?JG ; V@@ @@@ @@@@@@% @@г$list[H _ {\H _ @г7constructor_descriptioneH _ cfH _ z@@ @@@<@@@@@@A @@@#@@D*@@@D@@GM@@@xE  @@R@@@MA(-pat_explosionCU c hU c u@@8@@)PE_single@@U c xU c @@T-PE_gadt_cases@@U c U c @@U@@A@@@@@U c c@𐠠  [ppat_of_type] builds an untyped pattern from its expected type, for explosion of wildcard patterns in Typecore.type_pat. There are four interesting cases: - the type is empty ([PT_empty]) - no further explosion is necessary ([PT_any]) - a single pattern is generated, from a record or tuple type or a single-variant type ([PE_single]) - an or-pattern is generated, in the case that all branches are GADT constructors ([PE_gadt_cases]). J  T _ b@@@@@@@A@S@##! @@@@#@U c @@@@ @@A@@0@B@A!@A(,ppat_of_typeDV  V  @@8@@(PT_empty@@W  W  @@W&PT_any@@X  X  @@X*PT_patterna@@@̠)Parsetree'pattern@@@Ӡ'Hashtbl!tW@@@7constructor_description@@@@@@'Hashtbl!tj@@@1label_description@@@ @@@#@@Y  ]4_@@*Y@@A@@@@@V  @@@@-V@SSW  Q@@@@T@PP#X  N@@@@Q@MM)Y  *Y  @@гO-pat_explosion3Z  4Z  @@W021122222@z8@@@A@@@@@$@@@"@A@@гX)ParsetreeXB[  C[  @@a@@гZ[ZL\(M\1@г\&stringU\V\ @@d"@@гab^\_\&@@h+@@@u,b\@@гefej]4VX@гf&stringr]4;s]4A@@n?@@гkl{]4C|]4T@@rH@@@I]4:m@@@@o@@A@k@@0}||}}}}}@J@Alo@,ppat_of_type5_ae_aq@б@г#Env!t#Env_as_ax@@@@@#S0@j@A@@б@гG)type_expr_a|_a@@ @@@#T@@г,ppat_of_type_a_a@@ @@@#U@@@@@#V!@@@'@@#W$* @@@_aa@@Z@@@*1pressure_variants6aa@б@гG!t#Envbb@@ @@@#X0@F`"@A@@б@г$listbb@г'patternbb@@ @@@#Y@@@@@@#[  @@гe$unit b b@@ @@@#\-@@@@@#]0@@@6@@#^39 @@@a@@1[@@@9 (pressure_variants_in_computation_pattern7%c&c@б@г!t#Env3d4d@@ @@@#_054455555@Um"@A@@б@г٠$listDd#Ed'@г/general_patternNdOd"@г+computationXdYd@@ @@@#`%@@@@@@#b* @@@&@@@#d/#@@гȠ$unitod+pd/@@ @@@#e<@@@@@#f? @@@E@@#gBH @@@}c@@\@@@H-check_partialumm@б@б@г`'Hashtbl!tnn @г&stringnn@@ @@@#h0@p.@A@@гN7constructor_descriptionnn@@ @@@#i@@@*@@@#ln&@@б@г'Hashtbl!to .o 7@г2&stringo o @@ @@@#m3@@г1label_descriptiono o ,@@ @@@#nA@@@(@@@#qGo $@@б@г'pattern)Parsetreep;@p;Q@@ @@@#rZ@@г}&option p;] p;c@г'pattern p;U p;\@@ @@@#sq@@@@@@#uv @@@"@@#vy%@@@:@@#w|5@@@n@@#xi@@б@г(Location!t(Location 5qhl 6qhv@@@@@&i@@б@г٠$list Dqh Eqh@г$case Nqh Oqh@г%value Xqhz Yqh@@ @@@&j@@@@@@&l @@@&@@@&n#@@г'partial oqh pqh@@ @@@&oͰ@@@@@&pа @@@C@@&qӰF @@@Y@@&rְ ~n@@@ m@֐  [check_partial pred loc caselist] and [check_unused refute pred caselist] are called with a function [pred] which will be given counter-example candidates: they may be partially ill-typed, and have to be type-checked to extract a valid counter-example. [pred] returns a valid counter-example or [None]. [refute] indicates that [check_unused] was called on a refutation clause.  f11 l@@@@@@@ ]@!@,check_unusedv r r@б@б@г u$bool s s@@ @@@&s0        @).@A@@б@г'Hashtbl!t t t@г !&string t t@@ @@@&t@@гn7constructor_description t t@@ @@@&u,@@@(@@@&x2 t$@@б@г'Hashtbl!t u  u@г R&string u u@@ @@@&yO@@г1label_description u u@@ @@@&z]@@@(@@@&}c u$@@б@г/'pattern)Parsetree v v,@@ @@@&~v@@г &option )v8 *v>@г'pattern 3v0 4v7@@ @@@&@@@@@@& @@@"@@&%@@@:@@&5@@@n@@&i@@@@@& @@б@г 蠐$list SwCR TwCV@г $case ]wCM ^wCQ@г %value gwCG hwCL@@ @@@&@@@@@@&ư @@@&@@@&˰#@@г נ$unit ~wCZ wC^@@ @@@&ذ@@@@@&۰ @@@B@@&ް s @@@ r@@ ^@@@+irrefutablew z{ z{@б@г R'pattern z{ z{@@ @@@&0        @@A@@г $bool z{ z{@@ @@@&@@@@@&@@@ z{{ @@ _@ @@(inactivex  @б'partialг 'partial  @@ @@@&0        @3H!@A@@б@г 'pattern  @@ @@@&@@г  $bool  @@ @@@&@@@@@&!@@2'@@&$  @@@ @ W An inactive pattern is a pattern, matching against which can be duplicated, erased or delayed without change in observable behavior of the program. Patterns containing (lazy _) subpatterns or reads of mutable fields are active.  | @@@@@@@ &`@@88check_ambiguous_bindingsy  @б@г $list %  &@г $case / 0 @г %value 9 :@@ @@@&0 ; : : ; ; ; ; ;@e|@@A@@@ @@@& @@@(@@@& %@@г $unit R S@@ @@@&@@@@@&"@@@ ] @@ ta@ @@"0some_private_tagz hdh idx@г 3%label qd{ rd@@ @@@&0 s r r s s s s s@9b@A@@@ {dd @@ b@ @@@  @  @ t @ @@@B@@v@@9@%@@!@A@A@@@&@$@@@@P@I4@@0        @8K6@A@ H************************************************************************ A@@ A@L@ H  BMM BM@ H OCaml  C C@ H  D D3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt  E44 E4@ H  F F@ H Copyright 1996 Institut National de Recherche en Informatique et  G G@ H en Automatique.  H Hg@ H  Ihh Ih@ H All rights reserved. This file is distributed under the terms of  J J@ H the GNU Lesser General Public License version 2.1, with the  K KN@ H special exception on linking described in the file LICENSE.  LOO LO@ H  M M@ H************************************************************************ N N5@ 7* Detection of partial matches and unused match cases.   * [const_compare c1 c2] compares the actual values represented by [c1] and [c2], while simply using [Stdlib.compare] would compare the representations. cf. MPR#5758  Q B* [le_pat p q] means: forall V, V matches q implies V matches p   G* [le_pats (p1 .. pm) (q1 .. qn)] means: forall i <= m, [le_pat pi qi]  G* Exported compatibility functor, abstracted over constructor equality u * [lub p q] is a pattern that matches all values matched by [p] and [q]. May raise [Empty], when [p] and [q] are not compatible.  \* [lubs [p1; ...; pn] [q1; ...; qk]], where [n < k], is [[lub p1 q1; ...; lub pk qk]].  * Those two functions recombine one pattern and its arguments: For instance: (_,_)::p1::p2::rem -> (p1, p2)::rem The second one will replace mutable arguments by '_'  * [ppat_of_type] builds an untyped pattern from its expected type, for explosion of wildcard patterns in Typecore.type_pat. There are four interesting cases: - the type is empty ([PT_empty]) - no further explosion is necessary ([PT_any]) - a single pattern is generated, from a record or tuple type or a single-variant type ([PE_single]) - an or-pattern is generated, in the case that all branches are GADT constructors ([PE_gadt_cases]). x * [check_partial pred loc caselist] and [check_unused refute pred caselist] are called with a function [pred] which will be given counter-example candidates: they may be partially ill-typed, and have to be type-checked to extract a valid counter-example. [pred] returns a valid counter-example or [None]. [refute] indicates that [check_unused] was called on a refutation clause. 6 Irrefutability tests  %y`` &y`z@ * An inactive pattern is a pattern, matching against which can be duplicated, erased or delayed without change in observable behavior of the program. Patterns containing (lazy _) subpatterns or reads of mutable fields are active. 4 Ambiguous bindings  . /@ F The tag used for open polymorphic variant types with an abstract row  4 5c@@-./boot/ocamlc"-g)-nostdlib"-I$boot*-use-prims2runtime/primitives0-strict-sequence*-principal(-absname"-w>+a-4-9-40-41-42-44-45-48-66-70+-warn-error"+a*-bin-annot,-safe-string/-strict-formats"-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"-c b c 3/home/barsac/ci/builds/workspace/step-by-step-build - @0lt62R>0 t s s t t t t t@ r@@ ;0'$O~75Build_path_prefix_map0xөvĠ8CamlinternalFormatBasics0cEXy*Su}Ck.Type_immediacy0dV^25b)̓ԆSj ː0r&/ĤVD dˠ%Types0lm?ƈ(Warnings0zdͦkUe$@0V2R'AZ@   u t@ji@ʰ * )@  @@ a `@ذ  @rq@A@@@')@@65 0 /    @@@@@P@