Caml1999I031_Ġ(Odoc_sigӠ0Signature_search@#ele8@@@A@@@@@,odoc_sig.mliU U@@@@@A@#tab8@@@A&Stdlib'Hashtbl!t@@@̠%Types.signature_item@@@@@@@@@@#V$VL@@@@3AA@%table@)signature@@@0@@@@@@8Z9Z@@HC@,search_value@@@@@&stringO@@@4)type_expr@@@@@@@@T_U_@@dD@0search_extension@+@@@@@@@N5extension_constructor@@@@@@@@ndlrodl@@~E@+search_type@E@@@@6@@@h0type_declaration@@@@@@@@iX^iX@@F@,search_class@_@@@@P@@@1class_declaration@@@@@@@@n < Bn < }@@G@1search_class_type@y@@@@j@@@6class_type_declaration@@@@@@@@s , 2s , w@@H@-search_module@@@@@@@@+module_type@@@@@@@@x  x  S@@I@2search_module_type@@@@@@@@&optionJ+module_type@@@@@@@@@@@}  }  I@@J@5search_attribute_type@$Vars#key@@@@/class_signature@@@)type_expr@@@@@@@@B  C  J@@(K@2search_method_type@@@@@/class_signature@@@)type_expr@@@@@@@@5H  6I@@@EL@@@9S:JAH@IM@@.Info_retriever+all_special@@@@@ @@@#intA@@@$listI*Odoc_types$info@@@@@@@@@@@@@nReioS{@@~N@9blank_line_outside_simple@1@@@@7@@@$boolE@@@@@@@@VW9@@O@2just_after_special@L@@@@R@@@I@@@E$info@@@@@@@@@@@@@]ae^~@@P@-first_special@t@@@@z@@@q@@@m$info@@@@@@@@@@@@@de@@Q@,get_comments@@$text@@@!a@@@@@@@@@@@$info@@@@@@Ơ#@@@@@@@@@@@@kCGlZ@@ R@@@Mn@$S@Ӡ(Analyser@@①$file#ref@@@@@@@1tHN2tHc@@AT@)file_name.#ref@@@ @@@!@DwEw@@TU@2get_string_of_file@@@@"@@@@#@@@$@@%@@&@]|^|@@mV@,prepare_file@ @@@'@&@@@($unitF@@@)@@*@@+@xKQyK|@@W@(preamble@;@@@,@A@@@-@@!a@0(Location!t@@@.@@/@@@@@1O@@@4 K$info@@@2@@@3@@5@@6@@7@@8@@9@/V@@X@5get_comments_in_class@j@@@:@p@@@;n$info@@@>@@@?|*Odoc_class-class_element@@@<@@@=@@@@@A@@B@@@Y@6get_comments_in_module@@@@C@@@@D$info@@@G@@@H+Odoc_module.module_element@@@E@@@F@@I@@J@@K@IOz@@)Z@;name_comment_from_type_decl@@@@L@@@@M@)Parsetree0type_declaration@@@N@@@T@@@Qb$info@@@O@@@P@@R@@@S@@U@@V@@W@@X@XY3@@h[@2manifest_structure@(Odoc_env#env@@@Y@,@@@\$info@@@Z@@@[@@]@@@^@m)type_expr@@@_)Odoc_type-type_manifest@@@`@@a@@b@@c@G}@@\@-get_type_kind@=#env@@@d@Ig@@@gʠS$info@@@e@@@f@@h@@@i@.type_decl_kind@@@j;)type_kind@@@k@@l@@m@@n@28@@]@-get_cstr_args@v#env@@@o@@@@p@)Typedtree5constructor_arguments@@@qb0constructor_args@@@r@@s@@t@@u@   !@@a@+merge_infos@$info@@@v@@@w@#$info@@@x@@@y.$info@@@z@@@{@@|@@}@#!Z!`$!!@@3b@8analyse_module_type_kind&erasedF)Odoc_name#Map!tР'Removed@+Constrained/with_constraint@@@~@@@@@@A@@@@@@@@@@#env@@@@-!t@@@@:+module_type@@@@X+module_type@@@h0module_type_kind@@@@@@@@@@@@@@~"0"6#-#W@@c@7analyse_class_type_kind@&#env@@@@\!t@@@@A@@@@o*class_type@@@@*class_type@@@/class_type_kind@@@@@@@@@@@@@@##$C$g@@d@1analyse_signature@v@@@@|@@@@)signature@@@@)signature@@@(t_module@@@@@@@@@@@@%%&&K@@e@@@p&L&S@f@@@o̠(Odoc_sig0X0f|>S}(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__List0"%BTAT;9d.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+Outcometree0gCtrdlv?dl@б@г#tabIdlJdl@@ @@@ 0KKKKKKKK@Sh,@A@@б@г&stringZdl[dl@@ @@@ @@г5extension_constructor%Typesjdlkdl@@ @@@ !@@@@@ $@@@*@@ '- @@@xdlr@ This function returns the Types.extension_constructor for the extension whose name is given, in the given table. @raise Not_found if error.acFk@@@@@@@E@@:+search_typeʠiXbiXm@б@гB#tabiXpiXs@@ @@@ 0@Sh,@A@@б@г &stringiXwiX}@@ @@@ @@гI0type_declaration%TypesiXiX@@ @@@ !@@@@@ $@@@*@@ '- @@@iX^@ This function returns the Types.type_declaration for the type whose name is given, in the given table. @raise Not_found if error.fh2W@@@@@@@F@@:,search_classˠn < Fn < R@б@г#tabn < Un < X@@ @@@ 0@Sh,@A@@б@г_&stringn < \n < b@@ @@@ @@г1class_declaration%Typesn < fn < }@@ @@@ !@@@@@ $@@@*@@ '- @@@n < B@J This function returns the Types.class_declaration for the class whose name is given, in the given table. @raise Not_found if error.(k)m  ;@@@@@@@@G@@:1search_class_type̠4s , 65s , G@б@г栐#tab?s , J@s , M@@ @@@ 0AAAAAAAA@Sh,@A@@б@г&stringPs , QQs , W@@ @@@ @@г6class_type_declaration%Types`s , [as , w@@ @@@ !@@@@@ $@@@*@@ '- @@@ns , 2@ This function returns the Types.class_type_declaration for the class type whose name is given, in the given table. @raise Not_found if error.zp  {r  +@@@@@@@H@@:-search_module͠x  !x  .@б@г8#tabx  1x  4@@ @@@ 0@Sh,@A@@б@г&stringx  8x  >@@ @@@ @@г?+module_type%Typesx  Bx  S@@ @@@ !@@@@@ $@@@*@@ '- @@@x  @ This function returns the Types.module_type for the module whose name is given, in the given table. @raise Not_found if error.u y w  @@@@@@@I@@:2search_module_typeΠ}  }  @б@г#tab}  }  #@@ @@@ 0@Sh,@A@@б@гU&string}  '}  -@@ @@@ @@гx&option}  C}  I@г+module_type%Types}  1}  B@@ @@@ +@@@@@@ 0 @@@%@@ 3(@@@9@@ 6<@@@!}   @O This function returns the optional Types.module_type for the module type whose name is given, in the given table. @raise Not_found if error.-z U [.|  @@@@@@@EJ@/@I5search_attribute_type9B  :B  @б@г$Vars#key%TypesJC  KC  @@@@@ 0LLLLLLLL@h}2@A@@б@г/class_signature%Types^C  "_C  7@@ @@@ @@г)type_expr%TypesnC  ;oC  J@@ @@@ $@@@@@ '@@@-@@*0 @@@|B  @ This function returns the Types.type_expr for the given val name in the given class signature. @raise Not_found if error. K QA  @@@@@@@K@@=2search_method_typeH  H @б@г&stringII@@ @@@0@Vq,@A@@б@г@/class_signature%TypesII-@@ @@@@@гP)type_expr%TypesI1I@@@ @@@$@@@@@'@@@-@@*0 @@@H  @ This function returns the Types.type_expr for the given method name in the given class signature. @raise Not_found if error.E L QG  @@@@@@@L@@=@A@A@A@@u@a%@@@q5@!@}@i*@@0@Vk,@ATJAH@@, > The functions used to retrieve information from a signature.  R R@@@@@@@ S@ @б.Info_retrieverDMM@Б+all_special%Rem&Rex@б@г&string0S{1S{@@ @@@022222222@2@A@A@o@Y@ @}@i-@@@y.@@@@REgM@A#"@@б@г&string\S{]S{@@ @@@,@@Вг#intlS{mS{@@ @@@<@@г$listzS{{S{@г*Odoc_types$info*Odoc_typesS{S{@@@@@Y@@@@@@^ @@@) @@c-@@@=@@f@!@@@l@@io$@@@Rei'@ϐ Return the couple [(n, list)] where [n] is the number of characters read to retrieve [list], which is the list of special comments found in the string. OQ2d@@@@@@@N@6@|9blank_line_outside_simpleVV@б@г%&stringW!W'@@ @@@0@,@A@@б@г6&stringW+W1@@ @@@@@г$boolW5W9@@ @@@@@@@@!@@@'@@$* @@@V@ 8 Return true if the given string contains a blank line. UU@@@@@@@O@@72just_after_special]ai ]a{@б@гt&string^~^~@@ @@@0@Pe,@A@@б@г&string$^~%^~@@ @@@@@Вгߠ#int4^~5^~@@ @@@!@@г&optionB^~C^~@г$info*Odoc_typesO^~P^~@@ @@@<@@@@@@A @@@' @@F+@@@;@@I>b^~@@@P@@MS@@@h]ae@  [just_after_special file str] return the pair ([length], [info_opt]) where [info_opt] is the first optional special comment found in [str], without any blank line before. [length] is the number of chars from the beginning of [str] to the end of the special comment. tY;>u\`@@@@@@@P@@`-first_specialdd@б@г점&stringee@@ @@@0@y,@A@@б@г&stringee@@ @@@@@ВгW#intee@@ @@@!@@г1&optionee @г@$info*Odoc_typesee@@ @@@<@@@@@@A @@@' @@F+@@@;@@I>e@@@P@@MS@@@d@ [first_special file str] return the pair ([length], [info_opt]) where [info_opt] is the first optional special comment found in [str]. [length] is the number of chars from the beginning of [str] to the end of the special comment. `c@@@@@@@Q@@`,get_commentskCKkCW@б@б@г$text*Odoc_typeslZc lZr@@ @@@0        @~1@A@@А!a@D@ lZvlZx@@@ @@@@б@г&string'lZ}(lZ@@ @@@@@б@г&string6lZ7lZ@@ @@@.@@Вг&optionFlZGlZ@г$info*Odoc_typesSlZTlZ@@ @@@K@@@@@@P @@г$listflZglZ@А!aY_mlZnlZ@@@_@@@f @@@ @@k&@@@C@@nF|lZ@@@V@@rY@@@g@@ulZb@@@kCG @ ) Return a pair [(comment_opt, element_comment_list)], where [comment_opt] is the last special comment found in the given string and not followed by a blank line, and [element_comment_list] the list of values built from the other special comments found and the given function. gj B@@@@@@@R@@@w@@6@"@@@0@@A 0@n@ANn@@Ԑ A Functions to retrieve simple and special comments from strings. LJJLJ@@@@@@@M@0@@A@(AnalyserEpp@@Т@@Р.Info_retrieverqq@0@:@&@w@c@]@@:-S@A@@Б$filetHRtHV@г#reftH`tHc@гb&stringtHYtH_@@ @@@0@4@A@@@@@@ @@@tHN@= R This variable is used to load a file as a string and retrieve characters from it.ssG@@@@@@@3T@'@)file_name'w(w@г#ref0w1w@г&string:w;w@@ @@@0<<<<<<<<@nW4@A@@@ @@@ @@@Iw@w The name of the analysed file. UvekVve@@@@@@@mU@(@2get_string_of_filea|b|@б@г#intl|m|@@ @@@0nnnnnnnn@3P,@A@@б@г(#int}|~|@@ @@@@@г렐&string||@@ @@@@@@@@!@@@'@@ $* @@@|@Ɛ This function takes two indexes (start and end) and returns the string corresponding to the indexes in the file global variable. The function prepare_file must have been called to fill the file global variable.y{T@@@@@@@V@@7,prepare_fileKUKa@б@г&stringKdKj@@ @@@ 0@Pe,@A@@б@г-&stringKnKt@@ @@@ @@г6$unitKxK|@@ @@@ @@@@@ !@@@'@@$* @@@KQ@ f [prepare_file f input_f] sets [file_name] with [f] and loads the file [input_f] into [file].~)J@@@@@@@ W@@7(preambleU @б@гk&string  @@ @@@0        @Pe,@A@@б@г|&string   @@ @@@@@б@б@А!a@F@ . /@@г(Location!t(Location < ="@@@@@2@@@@@5@@б@г堐$list N* O.@А!a,E U' V)@@@2@@@L @@Вг #int f/: g/=@@ @@@\@@г렐&option t/P u/V@г$info*Odoc_types /@ /O@@ @@@w@@@@@@ | @@@' @@ +@@@<@@ ?@@@T@@  #@@@}@@ &@@@@@)@@@ ,@ΐ _ [preamble f input_f loc ast ] retrieves the position and contents of the preamble for the file [f]: i.e, the first documentation comment before any elements in [ast]. If there is no such preamble, [0,None] is returned. The function [loc] is used to obtain the location of this first element of [ast]. ~ @@@@@@@ X@;@5get_comments_in_classl  @б@г n#int  @@ @@@0        @,@A@@б@г #int  @@ @@@@@Вг [&option  @гj$info*Odoc_types  @@ @@@.@@@@@@3 @@г $list  @г*Odoc_class-class_element*Odoc_class  @@@@@'P@@@@@@)U @@@* @@*Z2@@@O@@+]R &@@@d@@,ag@@@ ,@Z 3 The function used to get the comments in a class.  8X^ 9X@@@@@@@ PY@@t6get_comments_in_module DIS EIi@б@г #int OIl PIo@@ @@@-0 Q Q Q Q Q Q Q Q@,@A@@б@г #int `Is aIv@@ @@@.@@Вг 砐&option pz qz@г$info*Odoc_types }z ~z@@ @@@/.@@@@@@13 @@г '$list z z@г+Odoc_module.module_element+Odoc_module z z@@@@@P@@@@@@U @@@* @@Z2@@@O@@]R z@@@d@@ag@@@ IO@搠 4 The function used to get the comments in a module.     H@@@@@@@ Z@@t;name_comment_from_type_decl  @б@г #int  @@ @@@0        @,@A@@б@г #int  @@ @@@@@б@г)Parsetree0type_declaration)Parsetree  @@@@@%@@Вг #int   @@ @@@5@@г $list / 3@Вг &string + ,@@ @@@P@@г &option 9' :-@г$info*Odoc_types F G&@@ @@@ k@@@@@@ p @@@' @@ u+@@@?@@@z [ =@@@M @@QB@@@a@@dE@@@x@@{H@@@@@K@@@ lN@  [name_comment_from_type_kind pos_end pos_limit type_kind]. This function takes a [Parsetree.type_kind] and returns the list of (name, optional comment) for the various fields/constructors of the type, or an empty list for an abstract type. [pos_end] is last char of the complete type definition. [pos_limit] is the position of the last char we could use to look for a comment, i.e. usually the beginning of the next element. x yn@@@@@@@ [@]@2manifest_structure   @б@г(Odoc_env#env(Odoc_env   @@@@@0        @1@A@@б@г <$list ? C@Вг &string  $@@ @@@@@г 7&option 7 =@гF$info*Odoc_types ' 6@@ @@@9@@@@@@> @@@' @@C+@@@?@@@H =@@б@г |)type_expr%Types GS Gb@@ @@@[@@г)Odoc_type-type_manifest)Odoc_type Gf G}@@@@@Lm@@@@@Mp@@@/@@Ns+ @@@y@@Ov|@@@ @ @ This function converts a [Types.type_expr] into a [Odoc_type.type_kind], by associating the comment found in the parsetree of each object field, if any.  5; @@@@@@@ 6\@ @-get_type_kind *2< +2I@б@г#env(Odoc_env 8LV 9Lb@@ @@@P0 : : : : : : : :@/@A@@б@г ࠐ$list IL JL@Вг &string VLg WLm@@ @@@Q@@г ۠&option dL eL@г$info*Odoc_types qLp rL@@ @@@R9@@@@@@T> @@@' @@UC+@@@?@@@WH Lf=@@б@г .type_decl_kind%Types  @@ @@@X[@@г)type_kind)Odoc_type  @@ @@@Yk@@@@@Zn@@@-@@[q) @@@w@@\tz@@@ 28@ ␠ This function converts a [Types.type_kind] into a [Odoc_type.type_kind], by associating the comment found in the parsetree of each constructor/field, if any.  1@@@@@@@ ]@ @-get_cstr_argsq      @б@гH#env(Odoc_env      @@ @@@]0        @/@A@@б@г #int      @@ @@@^@@б@г)Typedtree5constructor_arguments)Typedtree      @@@@@$%@@г0constructor_args)Odoc_type     !@@ @@@$5@@@@@$8@@@-@@$;0 @@@A@@$>D@@@   @ N This function converts a [Types.constructor_arguments] into a [Odoc_type.constructor_args], by associating the comment found in the parsetree of each inner record field, if any. , - Z @@@@@@@ Da@ @Q+merge_infosr 8!Z!d 9!Z!o@б@г &option C!r! D!r!@г$info*Odoc_types P!r!| Q!r!@@ @@@$0 R R R R R R R R@w9@A@@@ @@@$ @@б@г ݠ&option f!r! g!r!@г$info*Odoc_types s!r! t!r!@@ @@@$#@@@@@@$( @@г &option !! !!@г $info*Odoc_types !! !!@@ @@@$B@@@@@@$G @@@&@@$J-@@@J@@$MS@@@ !Z!` @ Ӑ 4 This function merges two optional info structures.  !!  !!Y@@@@@@@ b@/@`8analyse_module_type_kind "0": "0"R@б&erasedг)Odoc_name#Map!t)Odoc_name "" ""@з+Constrained "U"i "U"u@@г ~$list "U" "U"@г/with_constraint)Parsetree "U"y "U"@@ @@@'e0        @X@A@@@ @@@'g @@@%@@'Removed"" ""@A@@@@@@Р @8@@@'iA@@@'j"U"g""@@@V@@@'l$K@@б@г#env(Odoc_env*""+""@@ @@@'m6@@б@гn!t)Odoc_name<""=""@@ @@@'nH@@б@гP+module_type)ParsetreeN""O"#@@ @@@'oZ@@б@г +module_type%Types`"#a"#)@@ @@@'pl@@г0module_type_kind+Odoc_modulep#-#;q#-#W@@ @@@'q|@@@@@'r@@@+@@'s. @@@@@@'tC@@@U@@'uX@@o@@@'v @@'w"U"_@@ @"0"6@ P Return a module_type_kind from a Parsetree.module_type and a Types.module_type !!!"/@@@@@@@c@,@7analyse_class_type_kind####@б@г!#env(Odoc_env####@@ @@@'x0@/@A@@б@г!t)Odoc_name#$#$ @@ @@@'y@@б@г#int#$#$@@ @@@'z#@@б@г*class_type)Parsetree#$#$+@@ @@@'{5@@б@г *class_type%Types#$/#$?@@ @@@'|G@@г/class_type_kind*Odoc_class $C$M $C$g@@ @@@'}W@@@@@'~Z@@@+@@']. @@@@@@'`C@@@R@@'cU@@@i@@'fl@@@!##@ O ` Analysis of a Parsetree.class_type and a Types.class_type to return a class_type_kind.-#Y#_.##@@@@@@@Ed@&@y1analyse_signature9%%:%%@б@г&stringD%%E%%@@ @@@'0FFFFFFFF@,@A@@б@г&stringU%%V%&@@ @@@'@@б@гi)signature)Parsetreeg&& h&& @@ @@@'#@@б@г)signature%Typesy&&$z&&3@@ @@@'5@@г(t_module+Odoc_module&&7&&K@@ @@@'E@@@@@'H@@@+@@'K. @@@@@@'NC@@@T@@'QW@@@%%@ ː V This function takes an interface file name, a file containing the code, a parse tree and the signature obtained from the compiler. It goes through the parse tree, creating values for encountered functions, modules, ..., looking in the source file for comments, and in the signature for types information. $i$o%%@@@@@@@e@#@d@@j@V@ @@@{@S@?@@@"@<@(@0@@0@2@A!0@@Ar&L&S@@@@@@p@ @@@    @@ =8+@$@@ f@@@0@(@@@@Z@F @V@B@B@.@|@L@8@_@Ky@e@m@@@3&@A@ H************************************************************************ A@@ A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Maxence Guesdon, projet Cristal, INRIA Rocquencourt $E44%E4@ H *F+F@ H Copyright 2001 Institut National de Recherche en Informatique et 0G1G@ H en Automatique. 6H7Hg@ H S})Odoc_type0;#bۇ( H8 0E#(m!|AYޠ*Odoc_value0.MݕI/_+Outcometree0gCtr*Su}Ck.Type_immediacy0dV^25b)̓ԆSjܐ0r&/ĤVD dˠD0lm?ƈ(Warnings0zdͦkUe$@0X0f|>S}Ac@@('@=<  @@  9hg@@@@  @  @@@ D C@A@@@'&@  @"~} e d@@PO@76 X W@@@   x w@  @@@  @-,Ѱ%$@ml@   + *@@P@