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+Outcometree0gCtr@@ @@@ @@г?+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@@б@гV&string}  '}  -@@ @@@ @@гz&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.2z U [3|  @@@@@@@JJ@/@I5search_attribute_type>B  ?B  @б@г$Vars#key%TypesOC  PC  @@@@@ 0QPPQQQQQ@h}2@A@@б@г/class_signature%TypescC  "dC  7@@ @@@ @@г)type_expr%TypessC  ;tC  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. RR@@@@@@@S@@б.Info_retrieverDMM@Б+all_special*Rem+Rex@б@г&string5S{6S{@@ @@@076677777@6@A@A@o@Y@ @}@i-@@@y.@@@@RElM@A#"@@б@г&stringaS{bS{@@ @@@,@@Вг#intqS{rS{@@ @@@<@@г$listS{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@@б@г7&stringW+W1@@ @@@@@г$boolW5W9@@ @@@@@@@@!@@@'@@$* @@@V@ 8 Return true if the given string contains a blank line. UU@@@@@@@O@@72just_after_special ]ai]a{@б@гu&string^~^~@@ @@@0@Pe,@A@@б@г&string)^~*^~@@ @@@@@Вг㠐#int9^~:^~@@ @@@!@@г&optionG^~H^~@г$info*Odoc_typesT^~U^~@@ @@@<@@@@@@A @@@' @@F+@@@;@@I>g^~@@@P@@MS@@@m]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. yY;>z\`@@@@@@@P@@`-first_specialdd@б@г&stringee@@ @@@0@y,@A@@б@г&stringee@@ @@@@@Вг[#intee@@ @@@!@@г3&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_types lZclZr@@ @@@0@~1@A@@А!a@D@ lZvlZx@@@ @@@@б@г&string,lZ}-lZ@@ @@@@@б@г&string;lZ<lZ@@ @@@.@@Вг&optionKlZLlZ@г$info*Odoc_typesXlZYlZ@@ @@@K@@@@@@P @@г$listklZllZ@А!aY_rlZslZ@@@_@@@f @@@ @@k&@@@C@@nFlZ@@@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@гc&stringtHYtH_@@ @@@0@4@A@@@@@@ @@@tHN@= R This variable is used to load a file as a string and retrieve characters from it. s!sG@@@@@@@8T@'@)file_name,w-w@г#ref5w6w@г&string?w@w@@ @@@0A@@AAAAA@nW4@A@@@ @@@ @@@Nw@w The name of the analysed file. Zvek[ve@@@@@@@rU@(@2get_string_of_filef|g|@б@г#intq|r|@@ @@@0srrsssss@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@@ @@@ @@г7$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  @б@гl&string  @@ @@@0        @Pe,@A@@б@г}&string  ! @@ @@@@@б@б@А!a@F@ 3 4@@г(Location!t(Location A B"@@@@@2@@@@@5@@б@г蠐$list S* T.@А!a,E Z' [)@@@2@@@L @@Вг #int k/: l/=@@ @@@\@@г&option y/P z/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  @б@г r#int  @@ @@@0        @,@A@@б@г #int  @@ @@@@@Вг ]&option  @гj$info*Odoc_types  @@ @@@.@@@@@@3 @@г $list  @г*Odoc_class-class_element*Odoc_class  @@@@@'P@@@@@@)U @@@* @@*Z2@@@O@@+]R +@@@d@@,ag@@@ 1@Z 3 The function used to get the comments in a class.  =X^ >X@@@@@@@ UY@@t6get_comments_in_module IIS JIi@б@г #int TIl UIo@@ @@@-0 V U U V V V V V@,@A@@б@г #int eIs fIv@@ @@@.@@Вг 預&option uz vz@г$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 0 1@@ @@@P@@г &option >' ?-@г$info*Odoc_types K L&@@ @@@ k@@@@@@ p @@@' @@ u+@@@?@@@z ` =@@@M @@QB@@@a@@dE@@@x@@{H@@@@@K@@@ qN@  [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. } ~n@@@@@@@ [@]@2manifest_structure   @б@г(Odoc_env#env(Odoc_env   @@@@@0        @1@A@@б@г ?$list ? C@Вг &string  $@@ @@@@@г 9&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; $@@@@@@@ ;\@ @-get_type_kind /2< 02I@б@г#env(Odoc_env =LV >Lb@@ @@@P0 ? > > ? ? ? ? ?@/@A@@б@г 㠐$list NL OL@Вг &string [Lg \Lm@@ @@@Q@@г ݠ&option iL jL@г$info*Odoc_types vLp wL@@ @@@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. 1 2 Z @@@@@@@ Ia@ @Q+merge_infosr =!Z!d >!Z!o@б@г &option H!r! I!r!@г$info*Odoc_types U!r!| V!r!@@ @@@$0 W V V W W W W W@w9@A@@@ @@@$ @@б@г ߠ&option k!r! l!r!@г$info*Odoc_types x!r! y!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/""0""@@ @@@'m6@@б@гn!t)Odoc_nameA""B""@@ @@@'nH@@б@гP+module_type)ParsetreeS""T"#@@ @@@'oZ@@б@г +module_type%Typese"#f"#)@@ @@@'pl@@г0module_type_kind+Odoc_moduleu#-#;v#-#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.2#Y#_3##@@@@@@@Jd@&@y1analyse_signature>%%?%%@б@г&stringI%%J%%@@ @@@'0KJJKKKKK@,@A@@б@г&stringZ%%[%&@@ @@@'@@б@гi)signature)Parsetreel&& m&& @@ @@@'#@@б@г)signature%Types~&&$&&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 #D$D3@ H Maxence Guesdon, projet Cristal, INRIA Rocquencourt )E44*E4@ H /F0F@ H Copyright 2001 Institut National de Recherche en Informatique et 5G6G@ H en Automatique. ;HS})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@