1234567891011121314151617181920212223242526272829303132333435363738394041424344moduleLocation=structopenLocationletprint_locppfloc=(*setup_colors ();*)letfile_valid=function|"_none_"->(* This is a dummy placeholder, but we print it anyway to please editors
that parse locations in error messages (e.g. Emacs). *)true|""|"//toplevel//"->false|_->trueinletline_validline=line>0inletfile=(* According to the comment in location.mli, if [pos_fname] is "", we must
use [!input_name]. *)ifloc.loc_start.pos_fname=""then!input_nameelseloc.loc_start.pos_fnameinletstartline=loc.loc_start.pos_lnuminletendline=loc.loc_end.pos_lnuminletfirst=reftrueinletcapitalizes=if!firstthen(first:=false;String.capitalize_asciis)elsesinletcomma()=if!firstthen()elseFormat.fprintfppf", "inFormat.fprintfppf"@{<loc>";iffile_validfilethenFormat.fprintfppf"%s \"%a\""(capitalize"file")print_filenamefile;(* Print "line 1" in the case of a dummy line number. This is to please the
existing setup of editors that parse locations in error messages (e.g.
Emacs). *)comma();letstartline=ifline_validstartlinethenstartlineelse1inletendline=ifline_validendlinethenendlineelsestartlineinifstartline=endlinethenFormat.fprintfppf"%s %i"(capitalize"line")startlineelseFormat.fprintfppf"%s %i-%i"(capitalize"lines")startlineendline;Format.fprintfppf"@}"end