Caml1999I0373 %$(Location!t;@@)loc_start@@&Stdlib&Lexing(position@@@X4parsing/location.mliZZ@@A@'loc_end@@&Lexing(position@@@W[[7@@)B@)loc_ghost@@$boolE@@@V\8:\8J@@7C@@@A(Warnings#loc@@@Y@@@@+Y,]KN@@@@D@@A@$noneI@@@Z@8~ ; ;9~ ; G@@QD@@'is_none@@@@[.@@@\@@]@JA  KA  @@cE@@'in_file@&stringQ@@@^'@@@_@@`@^D  _D  @@wF@@$init@s&Lexing&lexbuf@@@a@@@@b$unitF@@@c@@d@@e@|G : :}G : d@@G@@$curr@&Lexing&lexbuf@@@fZ@@@g@@h@K  K  @@H@@+symbol_rloc@&@@@il@@@j@@k@N % %N % ?@@I@@+symbol_gloc@8@@@l~@@@m@@n@O @ @O @ Z@@J@@'rhs_loc@#intA@@@o@@@p@@q@S  S  @@K@@,rhs_interval@@@@r@@@@s@@@t@@u@@v@U  U @@L@@,get_pos_info@&Lexing(position@@@w@@@@z@=@@@y@C@@@x@@{@@|@W  W A@@ M@@#loc;!a@~@A#txt@@ [km[kv@@3O@#loc@@@@@}%\wy&\w@@>P@@@A@Y@@@@@+Z[[,]@@@@DN@A@'mknoloc@!a@0@@@@@@?_@_@@XQ@@%mkloc@!a@@@@@ @@@@@@@@W`X`@@pR@@*input_namei#ref@@@@@@@jeke@@S@@,input_lexbuf|#ref&optionL&Lexing&lexbuf@@@@@@@@@@ff@@T@@3input_phrase_buffer#ref&Buffer!t@@@@@@@@@@mm>@@U@@(echo_eof@7@@@;@@@@@@riiri@@V@@%reset@J@@@N@@@@@@ss@@W@@5rewrite_absolute_path@~@@@@@@@@@xx@@X@@;rewrite_find_first_existing@@@@r@@@@@@@@@@@ Y@@>rewrite_find_all_existing_dirs@@@@$listK@@@@@@@@@ ;@@&Z@@-absolute_path@@@@@@@@@@ !@@9[@@-show_filename@@@@@@@@@@33343V@@L\@@.print_filename@H&Format)formatter@@@@@@@@@@@@@@@OP@@h]@@)print_loc@d)formatter@@@@.@@@@@@@@@@@ij)@@^@@*print_locs@~6)formatter@@@@zL@@@@@@@@@@@@@@***U@@_@@4separate_new_message@U)formatter@@@#@@@@@@VVV@@`@@Ӡ#Doc@4separate_new_message*Format_doc'printer>@@@K@@@L@@@a@@(filename'printers@@@M@@@N@@@b@@/quoted_filename*'printer@@@O@@@P@!@@c@@#loc>'printer@@@Q@@@R@"$"A@@ d@@$locsQ'printer@@@S@@@T@@@U@ BD Bg@@%e@@@@hk@)f@@@2highlight_terminfo@%&Lexing&lexbuf@@@@.)formatter@@@@*@@@@@@@@@@@@@@@@89@@Qg@@#msg;@@@A !t@@@@@@@@@@M H HN H c@@@@fh@A@#msg#loc*@@@@@@@m'format4!a@ɠ)formatter@@@Ǡ@@@Ơ?@@@@@@@@@@@ e e e @@n@@+report_kind;@@,Report_errorĐ@@    @@p@.Report_warningŐC@@@@@    @@q@7Report_warning_as_errorƐQ@@@@@   !@@r@,Report_alertǐ_@@@@@!!!!.@@s@5Report_alert_as_errorȐm@@@@@!/!1!/!R@@t@@@A@@@@@  @@@@o@A@&report;@@$kind@@U@@@հ!d!f!d!y@@v@$main@@i@@@԰!z!|!z!@@w@#sub@@x@@@@@@Ӱ!!!!@@x@(footnote@@V!t@@@@@@Ѱ !! !!@@"y@@@A@@@@@ !T!T!!@@@@&u@A@.report_printer;@@"pp@@@ @@@@-&Format)formatter@@@@`@@@@@@@@@@@@4!!5""-@@M{@.pp_report_kind@@@!@@@ @@@@@R&Format)formatter@@@@z@@@@@@@@@@@@@@X"/"1Y"^"@@q|@+pp_main_loc@@@E@@@@;@@@@v&Format)formatter@@@@A@@@@@@@@ @@ @@ @@ |""}""@@}@+pp_main_txt@@@i@@@@_@@@@&Format)formatter@@@@!t@@@)@@@@@@@@@@@""##3@@~@*pp_submsgs@@@@@@@@@@@&Format)formatter@@@@J@@@@@@R@@@@@@@@@@@#4#6#_#@@@)pp_submsg@@@@@@@@@@@&Format)formatter@@@@o@@@v@@@@@@@@@@@####@@ @@-pp_submsg_loc@@@@@@@@@@@&Format)formatter@@@@@@@@@@@@@@@@@@##$$(@@-A@-pp_submsg_txt@@@@@@@@@@@2&Format)formatter@@@@!t@@@@@@@@@@@@@@ް;$)$+<$W$@@TB@@@A@@@@@?!!@$$@@@@Xz@A@2batch_mode_printer+@@@@K%W%WL%W%}@@dC@@9terminfo_toplevel_printer@`&Lexing&lexbuf@@@@@@@@@ @` %%a %%@@yD@@5best_toplevel_printer@@@@!R@@@"@@#@r %%s %%@@E@@,print_report@?)formatter@@@$@Y@@@%@@@&@@'@@(@&[&[&[&@@F@@.report_printer#ref@&@@@)@@@*@@+@@@,@&&&&@@G@@6default_report_printer@9@@@-@@@.@@/@'''(@@H@@.report_warning@@@@0@!t@@@1T@@@2@@@3@@4@@5@"(("((@@I@@0warning_reporter#ref@@@@6@!t@@@7w@@@8@@@9@@:@@;@@@<@&)W)W&)W)@@J@@8default_warning_reporter@@@@=@!t@@@>@@@?@@@@@@A@@B@))))))@@/K@@6formatter_for_warnings(#ref.)formatter@@@C@@@D@+.*M*M,.*M*w@@DL@@-print_warning@@@@E@E)formatter@@@F@ !t@@@G@@@H@@I@@J@@K@M0*y*yN0*y*@@fM@@-prerr_warning@$@@@L@:!t@@@M@@@N@@O@@P@g4++h4++?@@N@@,report_alert@>@@@Q@T%alert@@@RU@@@S@@@T@@U@@V@<++<+,#@@O@@.alert_reporter#ref@a@@@W@w%alert@@@X(x@@@Y@@@Z@@[@@\@@@]@@,,@,,@@P@@6default_alert_reporter@@@@^@%alert@@@_G@@@`@@@a@@b@@c@C--C--A@@Q@@+print_alert@@@@d@)formatter@@@e@%alert@@@fo@@@g@@h@@i@@j@H--H--@@R@@+prerr_alert@@@@k@%alert@@@l@@@m@@n@@o@L.+.+L.+.W@@S@@*deprecated#def@@@p@@@q#use@@@r@@@s@@@@t@@@@u@@@v@@w@@x@@y@@z@1P..2P..@@JT@@%alert#def @@@{@@@|#use@@@}@@@~$kind@@@@&@@@@ @@@@@@@@@@@@@@@@@gS//hS//O@@U@@2auto_include_alert@@@@@@@@@@zV/s/s{V/s/@@V@@7deprecated_script_alert@0@@@@@@@@@Z//Z/0@@W@@%error;@@@Al@@@@@@@`00`00@@@@X@A@+delayed_msg;@@@A@2@@@4!t@@@@@@@@@@@@c11c11K@@@@Y@A@%error#locj@@@@@@#subuР\@@@@@@@@@(footnoteD@@@@@@@@@@]@@@@@@@@@@@@e1M1Me1M1@@ Z@@&errorf#loc@@@@@@#sub @@@@@@@@@(footnote:@@@@@@@+'format4!a@)formatter@@@@@@K@@@@@@@@@@@@@@@<g11=h12@@U[@@2aligned_error_hint#loc@@@@@@#subU@@@@@@@@@(footnote @@@@@@@v'format4!a@)formatter@@@@@@@ !t@@@@@@@@@@@@@@"@@@@@@@@@j22l2d2@@\@@0error_of_printer#locGp@@@@@@#subR9@@@@@@@@@(footnoteb@@@@@@@@)formatter@@@@!a@]@@@@@@@@ @@@@@@@@@@@@@@q33r34 @@]@@5error_of_printer_file@@=)formatter@@@@!a@@@@@@@@@ @@@@@@@@t4"4"t4"4p@@ ^@@5register_error_of_exn@@#exnG@@@(@@@@@@@@@@@@@@ y44 y44@@ 6_@@,error_of_exn@@@@Р"OkK@@@䠠1Already_displayed@@@@A@@@@@@@@@ A6Q6Q B6Q6@@ Z`@@ %Error#=@`@@@@@A&_none_@@A@ ia@B@ 7Already_displayed_error#@@@A @ pb@B@,raise_errorf#loc  3@@@@@@#subp@@@@@@@@@(footnote%@@@@@@@ 'format4!a@)formatter@@@ #@@@!b@@@@@@@@@@@@@ 77 8 8T@@ c@@0report_exception@ p)formatter@@@@@@@ D@@@@@@@@ 8V8V 8V8@@ d@@@K㠠(Location0a7cK_H%9(Warnings0mJɒkgr@A@&stringQ;@@ A@@@@@B@@@%bytesC;@@ A@@@@@F@@@%floatD;@@A@@@@@J@@@$boolE;@@%falsec@@T@$trued@@Z@@@A@@@@@[@A@$unitF;@@"()e@@e@@@A@@@@@f@A@ #exnG;@@@A@@@@@j@@@#effH;@@O@A@A@@@@@@s@@@,continuationI;@@Q@@P@B@A@nY@@@@@@@@@%arrayJ;@@R@A@A@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&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@@A;5>4>@)Not_foundZ#O@@@AC=F<F@-Out_of_memoryW#W@@@AKENDN@.Stack_overflow^#_@@@ASMVLV@.Sys_blocked_io_#g@@@A[U^T^@)Sys_error[#o@j@@Ad^g]g@:Undefined_recursive_modulea#x@@w@s@u@@h@@Auoxnx@:Continuation_already_takenb#@@@A}wv@&Stdlib@Axࠡ &FormatWW@@A3@ @AW@@@A+!tAYY@@;@@)loc_start@@)&Lexing(position@@@ ˰ZZ@@A@'loc_end@@8&Lexing(position@@@ ΰ[[7@@B@)loc_ghost@@|@@@ Ѱ\8:\8J@@C@@@A(Warnings#loc@@@@@@@Y]KN@)ocaml.docܐ  [t] represents a range of characters in the source code. loc_ghost=false whenever the AST described by the location can be parsed from the location. In all other cases, loc_ghost must be true. Most locations produced by the parser have loc_ghost=false. When loc_ghost=true, the location is usually a best effort approximation. This info is used by tools like merlin that want to relate source code with parsetrees or later asts. ocamlprof skips instrumentation of ghost nodes. Example: in `let f x = x`, we have: - a structure item at location "let f x = x" - a pattern "f" at location "f" - an expression "fun x -> x" at location "x = x" with loc_ghost=true - a pattern "x" at location "x" - an expression "x" at location "x" In this case, every node has loc_ghost=false, except the node "fun x -> x", since [Parser.expression (Lexing.from_string "x = x")] would fail to parse. By contrast, in `let f = fun x -> x`, every node has loc_ghost=false. Line directives can modify the filenames and line numbers arbitrarily, which is orthogonal to loc_ghost, which describes the range of characters from loc_start.pos_cnum to loc_end.pos_cnum in the parsed string. ^OOu ' *@@@@@@@@@@@@#HH@Z @?@@Ш@гKMZ Z@PZZ@@@Y3@pg;@@@Ao@@@,@ @@@@52@@"@A@@g@@ @`@#\\T[%@S@@Ш@г_a['[-@d[.[6@@@m#@@p@@ &@i@#ee`\8C@_@@Ш@гh$bool%\8E&\8I@@p5@@s@@ 8@o@@Aгk(Warnings3Y4Y@p7Y8Y@@@zH@@spKon@nn@@@n@n@@ð~}@ZY  Note on the use of Lexing.position in this module. If [pos_fname = ""], then use [!input_name] instead. If [pos_lnum = -1], then [pos_bol = 0]. Use [pos_cnum] and re-parse the file to get the line and character numbers. Else all fields are correct. Vw , ,W| 7 9@@@@@@3UTTUUUUU@@A$noneb~ ; ?c~ ; C@гڠ!tk~ ; Fl~ ; G@@ @@@<@@@s~ ; ;@ A An arbitrary value of type [t]; describes an empty ghost range.  H H H @@@@@@@D@@@@@@@@@7'is_noneA  A  @б@г!tA  A  @@ @@@=3@PK8@A@@гo$boolA  A  @@ @@@>@@@@@?@@@A   @򐠠 4 True for [Location.none], false any other location B  B  @@@@@@@E@@@ݐ@@@@@@1'in_file D  D  @б@г&stringD  D  @@ @@@@3@J_8@A@@гi!tD  D  @@ @@@A@@@@@B@@@D   @; 6 Return an empty ghost range located in a given file. E  E  8@@@@@@@+F@@@K&@@@@@@1$init )G : >*G : B@б@г&Lexing&lexbuf8G : E9G : K@ <G : L=G : R@@@@@@C3?>>?????@ShA@A @@б@г&stringNG : VOG : \@@ @@@D@@г$unit[G : `\G : d@@ @@@E@@@@@F!@@@'@@G$/ @@@iG : :@ Z Set the file name and line number of the [lexbuf] to be the start of the named file. vH e ewI  @@@@@@@G@@@@@@@@@C$curr K  K  @б@г!&Lexing&lexbufK  K  @ K  K  @@@@@@H3@eA@A @@г!tK  K  @@ @@@I@@@@@J@@@K   @񐠠 : Get the location of the current token from the [lexbuf]. L  L  #@@@@@@@H@@@ܐ@@@@@@1+symbol_rloc N % )N % 4@б@г$unitN % 6N % :@@ @@@K3@Jh8@A@@гh!tN % >N % ?@@ @@@L@@@@@M@@@N % % @@I@@ @@+symbol_gloc O @ DO @ O@б@гǠ$unitO @ QO @ U@@ @@@N3@1F@A@@г!t)O @ Y*O @ Z@@ @@@O@@@@@P@@@4O @ @ @@LJ@@ @@'rhs_loc?S  @S  @б@г#intJS  KS  @@ @@@Q3LKKLLLLL@1F@A@@гȠ!tYS  ZS  @@ @@@R@@@@@S@@@dS   @ n [rhs_loc n] returns the location of the symbol at position [n], starting at 1, in the current parser rule. qQ \ \rR  @@@@@@@K@@@@@@@@@1,rhs_intervalU  U  @б@гf#intU  U  @@ @@@T3@J_8@A@@б@гw#intU U @@ @@@U@@г !tU U @@ @@@V@@@@@W!@@@'@@X$* @@@U  @@L@@@@*,get_pos_infoW W @б@г^&Lexing(positionW W "@ W #W +@@@@@@Y3@La(@A @@В@г&stringW /W 5@@ @@@Z@@@гӠ#intW 8W ;@@ @@@["@@@г⠐#intW >W A@@ @@@\1@@@@&@@ @@]:-@@@@ @@^=H@@@#W  @Y2 file, line, char 0XBB1XBY@@@@@@@IM@@$@iD@@@@@@\A+#locBHZ[cIZ[f@А!a@`3ONNOOOOO@q4;@@_@A@A@G@B@@@]Z[[^]@@@@vN@@AaZ[`bZ[b@@BA@;@A#txt@@C@an[kmo[kv@@O@#loc@@@@@ez\wy{\w@@P@@@A@Y@@@@@#@@@ @#[kp@@@Ш@А!a8[ks[ku@@$@@b=@"@#\w|@@@Ш@г!!t\w\w@@)L@@,@@fO@(@@A@E@@3@N@AFE@'mknoloc__@б@А!a@yC@t3@euU@A__@@г{#loc__@А!a__@@@@@@v @@@!@@w@@@_@@Q@@@@"%mkloc``@б@А!a@C@z3@7H@A``@@б@гj!t``@@ @@@{@@г#loc` `@А!a&!``@@@,@@@}( @@@@@~+@@@3@@.,@@@`@@6R@@@@4430 {1 Input info} 0c1c@@@@@@3/../////@FW@A*input_name<e=e@г#refEeFe@г&stringOePe@@ @@@"@@@@@@' @@@\e@@tS@@@@-,input_lexbufgfhf@г#refpfqf@г٠&optionzf{f@г &Lexing&lexbufff @ f f@@@@@@3@a\:@A @@@" @@@@@@1@@@ .@@@f1@@T@@3@@3input_phrase_bufferAmm)@г=#refm;m>@г&optionm4m:@гR&Buffer!tm+m1@ m2m3@@@@@@03@Fv:@A @@@" @@@2@@@1@@@4 .@@@m1@@U@@3@@ ! {1 Toplevel-specific functions} pAApAg@@@@@@3@$T@A(echo_eofBrimriu@б@г$unitriwri{@@ @@@5@@гɠ$unitriri@@ @@@6'@@@@@7*@@@'rii @@?V@@ @@0%resetC2s3s@б@гꠐ$unit=s>s@@ @@@83?>>?????@ID@A@@г$unitLsMs@@ @@@9@@@@@:@@@Ws @@oW@@ @@ml5 {1 Rewriting path } ivjv@@@@@@3hgghhhhh@*?@A5rewrite_absolute_pathDuxvx@б@гJ&stringxx@@ @@@;@@гW&stringxx@@ @@@<'@@@@@=*@@@x @ΐ  [rewrite_absolute_path path] rewrites [path] to honor the BUILD_PATH_PREFIX_MAP variable if it is set. It does not check whether [path] is absolute or not. The result is as follows: - If BUILD_PATH_PREFIX_MAP is not set, just return [path]. - otherwise, rewrite using the mapping (and if there are no matching prefixes that will just return [path]). See {{: https://reproducible-builds.org/specs/build-path-prefix-map/ } the BUILD_PATH_PREFIX_MAP spec} y@@@@@@@X@@@@@@@@@I;rewrite_find_first_existingE@б@г&string@@ @@@>3@b]8@A@@г5&option@г&string @@ @@@?@@@@@@A @@@$@@B!'@@@@&  [rewrite_find_first_existing path] uses a BUILD_PATH_PREFIX_MAP mapping and tries to find a source in mapping that maps to a result that exists in the file system. There are the following return values: - [None], means either {ul {- BUILD_PATH_PREFIX_MAP is not set and [path] does not exists, or} {- no source prefixes of [path] in the mapping were found,}} - [Some target], means [target] exists and either {ul {- BUILD_PATH_PREFIX_MAP is not set and [target] = [path], or} {- [target] is the first file (in priority order) that [path] mapped to that exists in the file system.}} - [Not_found] raised, means some source prefixes in the map were found that matched [path], but none of them existed in the file system. The caller should catch this and issue an appropriate error message. See {{: https://reproducible-builds.org/specs/build-path-prefix-map/ } the BUILD_PATH_PREFIX_MAP spec} @@@@@@@Y@@*@6@@@@@@@>rewrite_find_all_existing_dirsF$@б@г預&string& ,@@ @@@C3!  !!!!!@Yn8@A@@г$list.7/;@г&string8096@@ @@@D@@@@@@F @@@$@@G!'@@@H@~  [rewrite_find_all_existing_dirs dir] accumulates a list of existing directories, [dirs], that are the result of mapping a potentially abstract directory, [dir], over all the mapping pairs in the BUILD_PATH_PREFIX_MAP environment variable, if any. The list [dirs] will be in priority order (head as highest priority). The possible results are: - [[]], means either {ul {- BUILD_PATH_PREFIX_MAP is not set and [dir] is not an existing directory, or} {- if set, then there were no matching prefixes of [dir].}} - [Some dirs], means dirs are the directories found. Either {ul {- BUILD_PATH_PREFIX_MAP is not set and [dirs = [dir]], or} {- it was set and [dirs] are the mapped existing directories.}} - Not_found raised, means some source prefixes in the map were found that matched [dir], but none of mapping results were existing directories (possibly due to misconfiguration). The caller should catch this and issue an appropriate error message. See {{: https://reproducible-builds.org/specs/build-path-prefix-map/ } the BUILD_PATH_PREFIX_MAP spec} U<<V@@@@@@@nZ@@*@i@@@@@@@-absolute_pathGlm@б@гA&stringwx@@ @@@H3yxxyyyyy@Yn8@A@@гP&string@@ @@@I@@@@@J@@@ @ǐ  [absolute_path path] first makes an absolute path, [s] from [path], prepending the current working directory if [path] was relative. Then [s] is rewritten using [rewrite_absolute_path]. Finally the result is normalized by eliminating instances of ['.'] or ['..']. @@@@@@@[@@@@@@@@@18 {1 Printing locations} 1@@@@@@3@CX1@A-show_filenameH373D@б@г&string3F3L@@ @@@K@@г&string3P3V@@ @@@L'@@@@@M*@@@33 @! r In -absname mode, return the absolute path for this filename. Otherwise, returns the filename unchanged. W[@@@@@@@ \@@@1 @@@@@@I.print_filenameI  @б@г)formatter  @@ @@@N3        @b]8@A@@б@г&string + ,@@ @@@O@@г堐$unit 8 9@@ @@@P@@@@@Q!@@@'@@R$* @@@ F@@ ^]@@@@*)print_locJ Q R@б@г)formatter \ ]@@ @@@S3 ^ ] ] ^ ^ ^ ^ ^@CX@A@@б@гܠ!t m  n!@@ @@@T@@г '$unit z% {)@@ @@@U@@@@@V!@@@'@@W$* @@@ @@ ^@@@@**print_locsK *. *8@б@г)formatter *: *C@@ @@@X3        @CX@A@@б@г +$list *I *M@г(!t *G *H@@ @@@Y@@@@@@[  @@г x$unit *Q *U@@ @@@\-@@@@@]0@@@6@@^39 @@@ **@@ _@@@@94separate_new_messageL VZ Vn@б@гo)formatter Vp Vy@@ @@@_3        @Rg@A@@г $unit V} V@@ @@@`@@@@@a@@@ VV @@ !`@@ @@#DocC  @ /f@@Б4separate_new_message $ %@г*Format_doc'printer*Format_doc 3 4@  7 8@@г $unit B C@@ @@@3 D C C D D D D D@TiB@A@@@$ @@@ @@@ Q@@ ia@@@@ (filename \ ]@г8'printer*Format_doc i j@  m n@@г B&string x y@@ @@@3 z y y z z z z z@7_0@A@@@" @@@ @@@ @@ b@@@@ /quoted_filename  @гn'printer*Format_doc  @   !@@г x&string  @@ @@@3        @7]0@A@@@" @@@ @@@ @@ c@@@@ #loc "( "+@г'printer*Format_doc "/ "9@  ": "A@@г S!t "- ".@@ @@@3        @7]0@A@@@" @@@ @@@ "$@@ d@@@@ $locs BH BL@г'printer*Format_doc BU B_@  B` Bg@@г $list BP BT@г !t $BN %BO@@ @@@3 & % % & & & & &@Ag:@A@@@ @@@ @@@1@@@ &@@@ 8BD)@@ Pe@@+@@@@@@R@K@@3 B A A B B B B B@M@A 3 E D D E E E E E@@A J Khk@@@ M@@ b a - {1 Toplevel-specific location highlighting}  ^mm _m@@@@@@3 ] \ \ ] ] ] ] ]@Q@F@@@{@t8@@@"V@A2highlight_terminfo v w@б@г &Lexing&lexbuf  @   @@@@@@/ @@б@г )formatter  @@ @@@>@@б@г $$list  @г !!t  @@ @@@W@@@@@@\ @@г q$unit  @@ @@@i@@@@@l@@@4@@o7 @@@F@@rN@@@ @@ g@@@@x  ꐠ # {1 Reporting errors and warnings}    @@@@@@3        @y@A  - {2 The type of reports and report printers}       F@@@@@@A+#msgD  H M  H P@@;@@@Aɠ!t@@@@@@@@@@  H H  H c@@@@ /h@@@Aг#loc  H ` @г*Format_doc * H S + H ]@ . H ^ / H _@@@#3 . - - . . . . .@I2;@@@A:@@@j@@@@@'@@@$@A@@@3 '@@)@@U)(@#msg  G e i H e l@б#locг à!t T e s U e t@@ @@@n3 V U U V V V V V@qZT@A@@б@г 'format4 e e  f e @А!a@|E@o q e y r e {@@гN)formatter*Format_doc  e }  e @   e   e @@@@@@p0 @@г ?$unit  e   e @@ @@@q>@@г#msg  e   e @@ @@@rL@@@H>$ @@@wT  e xI@@А!aGY  e   e @@@L@@x^ @@o h@@@y @@zf  e n @@ @  e e@@ n@@@@mA++report_kindE      @@;@@,Report_errorĐ@@      @@ p@.Report_warningŐ @@@}@@      @@ q@7Report_warning_as_errorƐ @@@~@@     !@@ r@,Report_alertǐ @@@@@ !! !!.@@ s@5Report_alert_as_errorȐ @@@@@ !/!1 !/!R@@ *t@@@A@@@@@   @@@@ -o@@#EE   C@B@@@F@#BB "   #  @;@гD&string ,  E@@K3 * ) ) * * * * *@oe;@@@A@@@@@@@@@AK@@@@M@#II 7   8 ! @B@гK&string A ! L@@RM@@@@O@#KK G!! H!!$@D@гM&string Q!!(N@@T%O@@@@Q@#MM W!/!3 X!/!H@F@гO&string a!/!LP@@V5Q@@@@S@@A@O@@3 ` _ _ ` ` ` ` `@5@APS@A+&reportF n!T!Y o!T!_@@;@@$kind@@@@@ {!d!f |!d!y@@ v@$main@@@@@ !z!| !z!@@ w@#sub@@ @@@@@@ !! !!@@ x@(footnote@@ }!t@@@@@@ !! !!@@ y@@@A@@@@@ !T!T !!@@@@ u@@#AA< !d!j@;@@Ш@гD+report_kind !d!m !d!x@@L3        @[;@@@A@@@@@@@@@A@@T@@@P@#LLG !z!@F@@Ш@гO#msg !z! !z!@@W@@Z@@@V@#RRH !!@G@@Ш@гU$list !! !!@гZ#msg !! !!@@b2@@@g3 @@j@@6@a@#]]Q !!@P@@Ш@г`&option!!Z@гd*Format_doc!!!!@k!!!!@@@sT@@@xU l@@{@@X@p@@A@l@@3@W@Aml@A+.report_printerG%!!&!!@@;@@"pp@@@@@@@ &Format)formatter@@@@@@@ @@@@@@@@@ɰG!!H""-@@`{@.pp_report_kind@@@2@@@@@@@@ &Format)formatter@@@@@@@@@@@@@@@@@@԰n"/"1o"^"@@|@+pp_main_loc@@@Y@@@@@@@@ &Format)formatter@@@@ @@@D@@@@@@@@@@@߰""""@@}@+pp_main_txt@@@@@@@=@@@@ :&Format)formatter@@@@!t@@@m@@@@@@@@@@@""##3@@~@*pp_submsgs@@@@@@@f@@@@ c&Format)formatter@@@@_@@@@@@@@@@@@@@@@@#4#6#_#@@@)pp_submsg@@@@@@@@@@@ &Format)formatter@@@@ @@@@@@@@@@@@@@####@@*@@-pp_submsg_loc@@@@@@@@@@@ &Format)formatter@@@@ @@@@@@ @@ @@ @@ @@ 8##9$$(@@QA@-pp_submsg_txt@@@#@@@@@@@@ &Format)formatter@@@@0!t@@@@@@@@@@@@@@a$)$+b$W$@@zB@@@A@@@@@e!!f$$@ A printer for [report]s, defined using open-recursion. The goal is to make it easy to define new printers by re-using code from existing ones. s$$t%"%$@@@@@@@@@z@@#NN4{!!@3@@Ш@б@гQ.report_printer!!!"@@Y3@!j;@@@A@@@@@)&@@@A@@б@г[]"" ""@`""""@@@i@@б@гc&report""""$@@k!@@гh$unit""("",@@p*@@w+ @@,@@-0@@@@0@r@#nnN"/"?@M@@Ш@б@гq.report_printer"/"B"/"P@@yA@@б@гv&report"/"T"/"Z@@~L@@б@г{}"^"b"^"h@"^"i"^"r@@@]@@б@г+report_kind"^"v"^"@@h@@г$unit"^""^"@@q@@r @@s@@t+@@u7@@@@x@@#o""@n@@Ш@б@г.report_printer""""@@@@б@г&report""""@@@@б@г&""'""@*""+""@@@@@б@г!t6""7""@@@@г$unit?""@""@@@@ @@@@+@@7@@@@@@#L""@@@Ш@б@г.report_printerW""X""@@Ѱ@@б@г&reportb""c"#@@ܰ@@б@гn## o##@°r##s##@@@@@б@гŠ*Format_doc####(@̰##)##*@@@@@гϠ$unit##.##2@@@@ @@ %@@ 2@@ >@@@@@@#ְ֠#4#@@@@Ш@б@г٠.report_printer#4#C#4#Q@@ @@б@гޠ&report#4#U#4#[@@+@@б@г㠡#_#c#_#i@#_#j#_#s@@@<@@б@г렐$list#_#{#_#@г#msg#_#w#_#z@@P@@@Q @@г$unit#_##_#@@Z@@ [@@\(@@]5@@!^A@@$@@a@@###@@@Ш@б@г.report_printer####@@r@@б@г&report####@@ }@@б@г  ####@####@@@@@б@г#msg## ##@@@@г$unit(##)##@@@@% @@/@@6+@@=7@@@@@@!@#5##@@@Ш@б@г .report_printer@##A##@@(@@б@г%&reportK##L#$@@-Ű@@б@г*,W$$ X$$@/[$$\$$@@@8ְ@@б@г2!tg$$h$$@@:@@г7$unitp$$#q$$'@@?@@F @@P@@W+@@^7@@a@@@B@#>>}$)$8@@@Ш@б@гA.report_printer$)$;$)$I@@I@@б@гF&report$)$M$)$S@@N @@б@гKM$W$[$W$a@P$W$b$W$k@@@Y@@б@гS*Format_doc$W$o$W$y@Z$W$z$W${@@@b0@@г]$unit$W$$W$@@e9@@n:@@x;%@@<2@@=>@@@@@@h@@A@dؐba@aa@@@a@a@@3@J@Apo@琠 * {2 Report printers used in the compiler} %&%&%&%U@@@@@@3@^@A2batch_mode_printer|%W%[%W%m@гԠ.report_printer%W%o%W%}@@ @@@@@@%W%W@@C@@ @@9terminfo_toplevel_printer}  %%  %%@б@г&Lexing&lexbuf %% %%@  %%  %%@@@@@@3"!!"""""@@;(@A @@г .report_printer/ %%0 %%@@ @@@@@@@@@@@: %% @@RD@@ @@5best_toplevel_printer~E %%F %%@б@г$unitP %%Q %%@@ @@@3RQQRRRRR@1O@A@@г:.report_printer_ %%` %%@@ @@@@@@@@@@@j %% @ C Detects the terminal capabilities and selects an adequate printer w %%x %&9@@@@@@@E@@@@@@@@@19 {2 Printing a [report]} &;&;&;&Y@@@@@@3@CX1@A,print_report&[&_&[&k@б@г,)formatter&[&m&[&v@@ @@@@@б@гM&report&[&z&[&@@ @@@)@@гu$unit&[&&[&@@ @@@6@@@@@9@@@%@@<( @@@&[&[@ % Display an error or warning report. &&&&@@@@@@@F@@@@@@@@@[.report_printer&&&&@г#ref&&&&@б@г$unit&&&&@@ @@@3@~yB@A@@г.report_printer&&&&@@ @@@@@@@@@@@+@@@,&&)@@@/&&,@e Hook for redefining the printer of reports. The hook is a [unit -> report_printer] and not simply a [report_printer]: this is useful so that it can detect the type of the output (a file, a terminal, ...) and select a printer accordingly. <&&=''@@@@@@@UG@@<@uP@@@@@@76default_report_printerS''T'(@б@г $unit^'(_'( @@ @@@3`__`````@Po8@A@@гH.report_printerm'( n'(@@ @@@@@@@@@@@x'' @ + Original report printer for use in hooks. ((((L@@@@@@@H@@@@@@@@@18 {1 Reporting warnings} (O(O(O(l@@@@@@3@CX1@A / {2 Converting a [Warnings.t] into a [report]}  (n(n (n(@@@@@@.report_warning"(("((@б@г:!t"(("((@@ @@@+@@б@г!t(Warnings"(("((@ "(("((@@@@@@C @@гO&option"(("((@г&report"(("((@@ @@@Z@@@@@@_ @@@"@@b*@@@=@@e@@@@ "((@C w [report_warning loc w] produces a report for the given warning [w], or [None] if the warning is not to be printed. #(($)$)U@@@@@@@3I@@-@S.@@@@@@0warning_reporter1&)W)[2&)W)k@г#ref:&)W);&)W)@б@г!tF&)W)nG&)W)o@@ @@@3HGGHHHHH@B@A@@б@г!t(Warnings[&)W)s\&)W){@ _&)W)|`&)W)}@@@@@@ @@г̠&optionm&)W)n&)W)@г &reportw&)W)x&)W)@@ @@@1@@@@@@6 @@@"@@9*@@@?@@<B@@@U@@@A&)W)mS@@@&)W)WV@Ɛ ! Hook for intercepting warnings. '))'))@@@@@@@J@@f@@@@@@@a8default_warning_reporter))))))@б@г.!t))))))@@ @@@3@z8@A@@б@г !t(Warnings))))))@ ))))))@@@@@@ @@гE&option))))))@г&report))))))@@ @@@1@@@@@@6 @@@"@@9*@@@?@@<B@@@)))@9 - Original warning reporter for use in hooks. *))*)*-@@@@@@@)K@@-@I$@@@@@@[217 {2 Printing warnings} .,*/*//,*/*K@@@@@@3-,,-----@m1@A6formatter_for_warnings:.*M*Q;.*M*g@г#refC.*M*tD.*M*w@г)formatterM.*M*jN.*M*s@@ @@@"@@@@@@' @@@Z.*M*M@@rL@@@@--print_warninge0*y*}f0*y*@б@гߠ!tp0*y*q0*y*@@ @@@3rqqrrrrr@FA@A@@б@г)formatter0*y*0*y*@@ @@@@@б@г!t(Warnings0*y*0*y*@ 0*y*0*y*@@@@@@) @@гS$unit0*y*0*y*@@ @@@6@@@@@9@@@.@@<1 @@@B@@?E@@@0*y*y@퐠 ] Prints a warning. This is simply the composition of [report_warning] and [print_report]. 1**2*+@@@@@@@M@@!@ؐ@@@@@@^-prerr_warning4++4++&@б@гU!t4++(4++)@@ @@@3@w8@A@@б@г0!t(Warnings4++-4++5@ 4++64++7@@@@@@ @@г$unit 4++;4++?@@ @@@'@@@@@*@@@0@@-3 @@@4++@Q U Same as [print_warning], but uses [!formatter_for_warnings] as output formatter. (5+@+@)6++@@@@@@@AN@@@a<@@@@@@LJI6 {1 Reporting alerts} F8++G8++@@@@@@3EDDEEEEE@^s1@A]\ - {2 Converting an [Alert.t] into a [report]} Y:++Z:++@@@@@@,report_alertc<++d<++@б@гݠ!tn<++o<+,@@ @@@+@@б@г%alert(Warnings<+,<+, @ <+, <+,@@@@@@C @@г&option<+,<+,#@г /&report<+,<+,@@ @@@Z@@@@@@_ @@@"@@b*@@@=@@e@@@@<++@搠 q [report_alert loc w] produces a report for the given alert [w], or [None] if the alert is not to be printed. =,$,$>,k,@@@@@@@O@@-@ѐ@@@@@@.alert_reporter@,,@,,@гe#ref@,,@,,@б@гX!t@,,@,,@@ @@@3@B@A@@б@г3%alert(Warnings@,,@,,@ @,,@,,@@@@@@ @@гo&option@,,@,,@г &report@,,@,,@@ @@@ 1@@@@@@ 6 @@@"@@ 9*@@@?@@ <B@@@U@@@A0@,,S@@@3@,,V@i? Hook for intercepting alerts. @A,,AA,,@@@@@@@YP@@f@yT@@@@@@a6default_alert_reporterWC--XC--@б@гѠ!tbC--cC--@@ @@@3dccddddd@z8@A@@б@г%alert(WarningswC--"xC--*@ {C--+|C--0@@@@@@ @@г蠐&optionC--;C--A@г %&reportC--4C--:@@ @@@1@@@@@@6 @@@"@@9*@@@?@@<B@@@C--@ܐ + Original alert reporter for use in hooks. D-B-BD-B-r@@@@@@@Q@@-@ǐ@@@@@@[Ԑ5 {2 Printing alerts} F-t-tF-t-@@@@@@3@m1@A+print_alertH--H--@б@гW!tH--H--@@ @@@@@б@гw)formatterH--H--@@ @@@)@@б@г?%alert(Warnings H-- H--@ H--H--@@@@@@A @@гɠ$unitH--H--@@ @@@N@@@@@Q@@@.@@T1 @@@@@@WC@@@-H--@c Z Prints an alert. This is simply the composition of [report_alert] and [print_report]. :I--;J..)@@@@@@@SR@@!@sN@@@@@@v+prerr_alertQL.+./RL.+.:@б@гˠ!t\L.+.<]L.+.=@@ @@@3^]]^^^^^@8@A@@б@г%alert(WarningsqL.+.ArL.+.I@ uL.+.JvL.+.O@@@@@@ @@г0$unitL.+.SL.+.W@@ @@@ '@@@@@!*@@@0@@"-3 @@@L.+.+@ǐ S Same as [print_alert], but uses [!formatter_for_warnings] as output formatter. M.X.XN..@@@@@@@S@@@@@@@@@L*deprecatedP..P..@б#defг1!tP..P..@@ @@@#3@g|:@A@@б#useгD!tP..P..@@ @@@$@@б@гS!tP..P..@@ @@@%"@@б@г&stringP..P..@@ @@@&1@@г$unitP..P..@@ @@@'>@@@@@(A@@@%@@)D( @@B T:@@@* @@+KP..@@] \U@@@,@@-SP..@@ @P..@T= Prints a deprecation alert. +Q..,Q./ @@@@@@@DT@@.@d?@@@@@@s%alertBS//CS//@б#defг!tOS//PS//@@ @@@.3QPPQQQQQ@:@A@@б#useгѠ!tbS//(cS//)@@ @@@/@@б$kindг=&stringsS//2tS//8@@ @@@0$@@б@г!tS//<S//=@@ @@@13@@б@г[&stringS//AS//G@@ @@@2B@@гK$unitS//KS//O@@ @@@3O@@@@@4R@@@%@@5U( @@B7@@6XS//-@@W O@@@7 @@8`S//#@@r j@@@9@@:hS//@@ @S//"@< Prints an arbitrary alert. T/P/PT/P/q@@@@@@@U@@2@ᐠ@@@@@@2auto_include_alertV/s/wV/s/@б@г&stringV/s/V/s/@@ @@@;3@8@A@@г$unitV/s/V/s/@@ @@@<@@@@@=@@@ V/s/s @? P Prints an alert that -I +lib has been automatically added to the load path W//X//@@@@@@@/V@@@O*@@@@@@17deprecated_script_alert-Z//.Z/0 @б@г&string8Z/09Z/0@@ @@@>3:99:::::@J_8@A@@г$unitGZ/0HZ/0@@ @@@?@@@@@@@@@RZ// @ { [deprecated_script_alert command] prints an alert that [command foo] has been deprecated in favour of [command ./foo] _[00`\0j0@@@@@@@xW@@@s@@@@@@16 {1 Reporting errors} }^00~^00@@@@@@3|{{|||||@CX1@AA+%errorH`00`00@@;@@A '@@@B@@@@`00`00@ʐ F An [error] is a [report] which [report_kind] must be [Report_error]. a00a01@@@@@@@@@X@@@Aг&report`00@@3@.(;@@@A0@@@G@A@@@@%"@@@A $@@&Ȑ$#@##@@@#@#@@D10@A++delayed_msgIc11"c11-@@;@@A@@@@J=!t@@@K@@@M@@N@@@@c11c11K@@@@Y@@@Aб@г$unitc110c114@@3@tnh+;@@@A3@@@a@I@@@@@@@@A@@г'&optionc11E!@г+*Format_docc118c11B@2c11Cc11D@@@:$@@@?% 3@@F&)4@@6@@3@&@A76@%error"e1M1Q#e1M1V@б#locг!t/e1M1]0e1M1^@@ @@@f310011111@Cmg@A@@б#subг$listBe1M1kCe1M1o@гG#msgLe1M1gMe1M1j@@ @@@g@@@@@@i" @@б(footnoteг+delayed_msgbe1M1}ce1M1@@ @@@j3@@б@г;&stringqe1M1re1M1@@ @@@kB@@г%error~e1M1e1M1@@ @@@lO@@@@@mR@@0Ϡ(@@@n @@oYe1M1s@@XנB@@@p@@qae1M1b@@sߠk@@@r@@sie1M1X @@ @e1M1M#@@Z@@%@@p&errorfg11g11@б#locг(!tg11g11@@ @@@t3@!@A@@б#subгH$listg11g11@гѠ#msgg11g11@@ @@@u@@@@@@w" @@б(footnoteг+delayed_msgg11g11@@ @@@x3@@б@г'format4h12h12@А!a@J@yHh11h11@@г)formatter*Format_doch11h11@ h11h11@@@@@@za @@гՠ$unit(h11)h11@@ @@@{o@@г%error6h127h12@@ @@@|}@@@H>$ @@@Dh11I@@А!aGIh12Jh12@@@L@@ @@me@@@ @@Ug11 @@@@@@@]g11@@@@@@@eg11@@ @hg11@@[@@!@@2aligned_error_hintsj22tj22,@б#locг!tk2.25k2.26@@ @@@3@!@A@@б#subг$listk2.2Ck2.2G@г#msgk2.2?k2.2B@@ @@@@@@@@@" @@б(footnoteг栐+delayed_msgk2.2Uk2.2`@@ @@@3@@б@гJ'format4l2d2l2d2@А!a@J@Hl2d2gl2d2i@@г)formatter*Format_docl2d2kl2d2u@ l2d2vl2d2@@@@@@a @@г$unitl2d2l2d2@@ @@@o@@б@г^&optionl2d2l2d2@г!t*Format_doc l2d2l2d2@ l2d2l2d2@@@@@@ @@@ @@@@@г%error$l2d2%l2d2@@ @@@@@@@@ @@@rhNA @@@5l2d2fs@@А!aq:l2d2;l2d2@@@v@@ @@@@@ @@Fk2.2K @@@@@@@ȰNk2.2:@@@@@@@аVk2.20@@ @Yj22@ [aligned_error_hint ?loc ?sub ?footnote fmt ... aligned_hint] produces an error report where the potential [aligned_hint] message has been aligned with the main error message before being added to the list of submessages.fm22go3O3@@@@@@@\@@/@z@@@@@@0error_of_printer}q33~q33@б#locг!tq33q33@@ @@@3@ ":@A@@б#subг$listq33q33@г#msgq33q33@@ @@@@@@@@@" @@б(footnoteг+delayed_msgq33q33@@ @@@3@@б@б@г)formatter*Format_docr33r33@ r33r34@@@@@@M @@б@А!a@J@Xr34r34@@г$unitr34 r34@@ @@@g@@@@@j@@@#@@m+ @@б@А!a sr34r34@@г%error r34 r34 @@ @@@@@@2@@@@@@@r33 @@ga_@@@ @@ q33@@iy@@@@@(q33@@q@@@@@0q33$@@ @3q33'@@K]@@)@@5error_of_printer_file>t4"4&?t4"4;@б@б@г)formatter*Format_docOt4"4>Pt4"4H@ St4"4ITt4"4R@@@@@@3VUUVVVVV@*@A @@б@А!a@J@ gt4"4Vht4"4X@@г$unitpt4"4\qt4"4`@@ @@@@@@@@@@@%@@"- @@б@А!a (t4"4et4"4g@@г%errort4"4kt4"4p@@ @@@7@@@2@@:@@@@@=t4"4= @@@t4"4"@@^@@@@D : {1 Automatically reporting errors for raised exceptions} w4s4sw4s4@@@@@@3@Vv@A5register_error_of_exny44y44@б@б@гg#exny44y44@@ @@@@@г1&optiony44y44@гR%errory44y44@@ @@@3@@@@@@8 @@@"@@;%@@г$unity44y44@@ @@@H@@@@@Ky44 @@@y44 @3 ] Each compiler module which defines a custom type of exception which can surface as a user-visible error should register a "printer" for this exception using [register_error_of_exn]. The result of the printer is an [error] value containing a location, a message, and optionally sub-messages (each of them being located as well).  z44 616O@@@@@@@#_@@@C@@@@@@k,error_of_exn!6Q6U"6Q6a@б@гΠ#exn,6Q6c-6Q6f@@ @@@3.--.....@8@A@@г&option;6Q6<6Q6@з"OkF6Q6lG6Q6o@@гƠ%errorP6Q6sQ6Q6x@@ @@@$@@@@@1Already_displayed]6Q6{^6Q6@A@@@@@@Р!@@@@A@@@:l6Q6jm6Q6@@@:@@@A7@@@G@@DJ:@@@x6Q6Q=@@`@@?@@J%ErrorJ6666@#@@@@@@A6666@Ő h Raising [Error e] signals an error [e]; the exception will be caught and the error will be printed. 6677@@@@@@@a@@г%error66@@ 3@y5@A@@@@@@@@@@*@*)@7Already_displayed_errorK7 7*7 7A@#@@@A7 7 @ Raising [Already_displayed_error] signals an error which has already been printed. The exception will be caught, but nothing will be printed 7B7B77@@@@@@@b@@@@ 萠@@@@@@@3@;e_@A $@,raise_errorf7777@б#locгj!t7777@@ @@@3@E?@A@@б#subг$list 77 78@г#msg 77 77@@ @@@@@@@@@" @@б(footnoteгa+delayed_msg .78 /78@@ @@@3@@б@г'format4 =8 8G >8 8N@А!a@L@H I8 8# J8 8%@@г&)formatter*Format_doc W8 8' X8 81@  [8 82 \8 8;@@@@@@a @@г $unit j8 8= k8 8A@@ @@@o@@А!b@L@y z8 8C {8 8E@@@F<"@@@ 8 8"G@@А!aE 8 8R 8 8T@@@J@@ @@k֠c@@@ @@ 78 @@ޠ}@@@@@ 77@@@@@@@ 77@@ @ 77@@ c@@!@@0report_exception 8V8Z 8V8j@б@г>)formatter 8V8l 8V8u@@ @@@3        @@A@@б@г q#exn 8V8y 8V8|@@ @@@@@г $unit 8V8 8V8@@ @@@@@@@@!@@@'@@$* @@@ 8V8V@ ) Reraise the exception if it is unknown.  88 88@@@@@@@!d@@@0! @@@@@@C@{uA@@yR@2 @@Y@9@ @@]@V@A@yL@E@@@D@*@@@xB@"@@rM@-@@e@^7@/@@)@@p@D>A@@~xA@A@,&A@cP@I@@@a*@  @  P@ 0 @  ^@ + @  @  L@  @  8@  @  B@ "@U@5@n@N'@A@A@_@@*@ R@K@@l@ B@B@@@@3!!!!!!!!@@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@ * Source code locations (ranges of positions), used in parsetree. {b Warning:} this module is unstable and part of {{!Compiler_libs}compiler-libs}. !렠 * [t] represents a range of characters in the source code. loc_ghost=false whenever the AST described by the location can be parsed from the location. In all other cases, loc_ghost must be true. Most locations produced by the parser have loc_ghost=false. When loc_ghost=true, the location is usually a best effort approximation. This info is used by tools like merlin that want to relate source code with parsetrees or later asts. ocamlprof skips instrumentation of ghost nodes. Example: in `let f x = x`, we have: - a structure item at location "let f x = x" - a pattern "f" at location "f" - an expression "fun x -> x" at location "x = x" with loc_ghost=true - a pattern "x" at location "x" - an expression "x" at location "x" In this case, every node has loc_ghost=false, except the node "fun x -> x", since [Parser.expression (Lexing.from_string "x = x")] would fail to parse. By contrast, in `let f = fun x -> x`, every node has loc_ghost=false. Line directives can modify the filenames and line numbers arbitrarily, which is orthogonal to loc_ghost, which describes the range of characters from loc_start.pos_cnum to loc_end.pos_cnum in the parsed string.    * Note on the use of Lexing.position in this module. If [pos_fname = ""], then use [!input_name] instead. If [pos_lnum = -1], then [pos_bol = 0]. Use [pos_cnum] and re-parse the file to get the line and character numbers. Else all fields are correct.  B* An arbitrary value of type [t]; describes an empty ghost range. t 5* True for [Location.none], false any other location . 7* Return an empty ghost range located in a given file. 蠠 [* Set the file name and line number of the [lexbuf] to be the start of the named file.  ;* Get the location of the current token from the [lexbuf]. 8 o* [rhs_loc n] returns the location of the symbol at position [n], starting at 1, in the current parser rule. 3* file, line, char ֠1* {1 Input info} ٠ This is used for reporting errors coming from the toplevel. When running a toplevel session (i.e. when [!input_name] is "//toplevel//"), [!input_phrase_buffer] should be [Some buf] where [buf] contains the last toplevel phrase. " h" l@ "* {1 Toplevel-specific functions} 6* {1 Rewriting path }  * [rewrite_absolute_path path] rewrites [path] to honor the BUILD_PATH_PREFIX_MAP variable if it is set. It does not check whether [path] is absolute or not. The result is as follows: - If BUILD_PATH_PREFIX_MAP is not set, just return [path]. - otherwise, rewrite using the mapping (and if there are no matching prefixes that will just return [path]). See {{: https://reproducible-builds.org/specs/build-path-prefix-map/ } the BUILD_PATH_PREFIX_MAP spec} s * [rewrite_find_first_existing path] uses a BUILD_PATH_PREFIX_MAP mapping and tries to find a source in mapping that maps to a result that exists in the file system. There are the following return values: - [None], means either {ul {- BUILD_PATH_PREFIX_MAP is not set and [path] does not exists, or} {- no source prefixes of [path] in the mapping were found,}} - [Some target], means [target] exists and either {ul {- BUILD_PATH_PREFIX_MAP is not set and [target] = [path], or} {- [target] is the first file (in priority order) that [path] mapped to that exists in the file system.}} - [Not_found] raised, means some source prefixes in the map were found that matched [path], but none of them existed in the file system. The caller should catch this and issue an appropriate error message. See {{: https://reproducible-builds.org/specs/build-path-prefix-map/ } the BUILD_PATH_PREFIX_MAP spec}  * [rewrite_find_all_existing_dirs dir] accumulates a list of existing directories, [dirs], that are the result of mapping a potentially abstract directory, [dir], over all the mapping pairs in the BUILD_PATH_PREFIX_MAP environment variable, if any. The list [dirs] will be in priority order (head as highest priority). The possible results are: - [[]], means either {ul {- BUILD_PATH_PREFIX_MAP is not set and [dir] is not an existing directory, or} {- if set, then there were no matching prefixes of [dir].}} - [Some dirs], means dirs are the directories found. Either {ul {- BUILD_PATH_PREFIX_MAP is not set and [dirs = [dir]], or} {- it was set and [dirs] are the mapped existing directories.}} - Not_found raised, means some source prefixes in the map were found that matched [dir], but none of mapping results were existing directories (possibly due to misconfiguration). The caller should catch this and issue an appropriate error message. See {{: https://reproducible-builds.org/specs/build-path-prefix-map/ } the BUILD_PATH_PREFIX_MAP spec} ɠ * [absolute_path path] first makes an absolute path, [s] from [path], prepending the current working directory if [path] was relative. Then [s] is rewritten using [rewrite_absolute_path]. Finally the result is normalized by eliminating instances of ['.'] or ['..']. 9* {1 Printing locations} h s* In -absname mode, return the absolute path for this filename. Otherwise, returns the filename unchanged. / .* {1 Toplevel-specific location highlighting} ̠ $* {1 Reporting errors and warnings} F .* {2 The type of reports and report printers} 61 The entry point "3!!"4!!@ * A printer for [report]s, defined using open-recursion. The goal is to make it easy to define new printers by re-using code from existing ones. Ơ +* {2 Report printers used in the compiler} X D* Detects the terminal capabilities and selects an adequate printer Ƞ:* {2 Printing a [report]}  &* Display an error or warning report. b * Hook for redefining the printer of reports. The hook is a [unit -> report_printer] and not simply a [report_printer]: this is useful so that it can detect the type of the output (a file, a terminal, ...) and select a printer accordingly.  ,* Original report printer for use in hooks. Ơ9* {1 Reporting warnings}  0* {2 Converting a [Warnings.t] into a [report]}  x* [report_warning loc w] produces a report for the given warning [w], or [None] if the warning is not to be printed. : "* Hook for intercepting warnings.  .* Original warning reporter for use in hooks.  J8* {2 Printing warnings}  / ^* Prints a warning. This is simply the composition of [report_warning] and [print_report].  V* Same as [print_warning], but uses [!formatter_for_warnings] as output formatter.  ;7* {1 Reporting alerts}  .* {2 Converting an [Alert.t] into a [report]}   r* [report_alert loc w] produces a report for the given alert [w], or [None] if the alert is not to be printed.  * Hook for intercepting alerts.  / ,* Original alert reporter for use in hooks.  6* {2 Printing alerts}  [* Prints an alert. This is simply the composition of [report_alert] and [print_report].  > T* Same as [print_alert], but uses [!formatter_for_warnings] as output formatter.  ݠ>* Prints a deprecation alert.  S=* Prints an arbitrary alert.  Q* Prints an alert that -I +lib has been automatically added to the load path n |* [deprecated_script_alert command] prints an alert that [command foo] has been deprecated in favour of [command ./foo] (7* {1 Reporting errors}  G* An [error] is a [report] which [report_kind] must be [Report_error]. 젠 * [aligned_error_hint ?loc ?sub ?footnote fmt ... aligned_hint] produces an error report where the potential [aligned_hint] message has been aligned with the main error message before being added to the list of submessages.* ;* {1 Automatically reporting errors for raised exceptions} 砠 ^* Each compiler module which defines a custom type of exception which can surface as a user-visible error should register a "printer" for this exception using [register_error_of_exn]. The result of the printer is an [error] value containing a location, a message, and optionally sub-messages (each of them being located as well).  i* Raising [Error e] signals an error [e]; the exception will be caught and the error will be printed.  * Raising [Already_displayed_error] signals an error which has already been printed. The exception will be caught, but nothing will be printed ɠ ** Reraise the exception if it is unknown. @-./boot/ocamlc)-nostdlib"-I&./boot*-use-prims2runtime/primitives"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I'parsing"-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"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events"-c"ِ" =/builds/workspace/precheck/flambda/false/label/ocaml-linux-32 >10/.-,+*)('&%$#"! @@0XniCj\-qP<3""""""""@"@@8CamlinternalFormatBasics0%FU(Q/Tu0CamlinternalLazy0&͂7 Pˆ*Format_doc0]mWϓ:Mݠ#0a7cK_H%9&Stdlib0Lku]8_٠.Stdlib__Buffer08APF< t..Stdlib__Domain0:M;׉<O$Ġ.Stdlib__Either0Vy`u~c à.Stdlib__Format0ܚ#G7m|,Stdlib__Lazy0* -S$.)"0D.Stdlib__Lexing0e<.V +Stdlib__Seq0nwzG&amg+Stdlib__Sys0 -ռ鱦s5/-Stdlib__Uchar056uf4[_!0mJɒkgr