Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file odoc_loader.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177openResultmoduleError=Odoc_model.Errorletread_stringparent_definitionfilenametext=letlocation=letpos=Lexing.{pos_fname=filename;pos_lnum=1;pos_cnum=0;pos_bol=0}inLocation.{loc_start=pos;loc_end=pos;loc_ghost=true}inError.catch_errors_and_warnings(fun()->Doc_attr.pageparent_definitionlocationtext)letcorruptedfile=Error.raise_exception(Error.filename_only"corrupted"file)letnot_a_typedtreefile=Error.raise_exception(Error.filename_only"not a Typedtree"file)letnot_an_implementationfile=Error.raise_exception(Error.filename_only"not an implementation"file)letnot_an_interfacefile=Error.raise_exception(Error.filename_only"not an interface"file)letwrong_versionfile=Error.raise_exception(Error.filename_only"wrong OCaml version"file)leterror_msgfile(msg:string)=Error.raise_exception(Error.filename_only"%s"msgfile)exceptionCorruptedexceptionNot_an_implementationexceptionNot_an_interfaceexceptionMake_root_errorofstringletmake_compilation_unit~make_root~imports~interface?sourcefile~name~id?canonicalcontent=letopenOdoc_model.Lang.Compilation_unitinletinterface,digest=matchinterfacewith|Somedigest->(true,digest)|None->(matchList.assocnameimportswith|Somedigest->(false,digest)|None->raiseCorrupted|exceptionNot_found->raiseCorrupted)inletroot=matchmake_root~module_name:name~digestwith|Okroot->root|Error(`Msgm)->raise(Make_root_errorm)inletimports=List.filter(fun(name',_)->name<>name')importsinletimports=List.map(fun(s,d)->Import.Unresolved(s,d))importsinletsource=matchsourcefilewith|Some(Somefile,Somedigest,build_dir)->Some{Source.file;digest;build_dir}|_->Nonein{id;root;digest;imports;source;interface;hidden=Odoc_model.Root.contains_double_underscorename;content;expansion=None;linked=false;canonical;}letcompilation_unit_of_sig~make_root~imports~interface?sourcefile~name~id?canonicalsg=letcontent=Odoc_model.Lang.Compilation_unit.Modulesginmake_compilation_unit~make_root~imports~interface?sourcefile~name~id?canonicalcontentletread_cmti~make_root~parent~filename()=letcmt_info=Cmt_format.read_cmtfilenameinmatchcmt_info.cmt_annotswith|Interfaceintf->(matchcmt_info.cmt_interface_digestwith|None->raiseCorrupted|Some_asinterface->letname=cmt_info.cmt_modnameinletsourcefile=(cmt_info.cmt_sourcefile,cmt_info.cmt_source_digest,cmt_info.cmt_builddir)inletid,sg,canonical=Cmti.read_interfaceparentnameintfincompilation_unit_of_sig~make_root~imports:cmt_info.cmt_imports~interface~sourcefile~name~id?canonicalsg)|_->raiseNot_an_interfaceletread_cmt~make_root~parent~filename()=matchCmt_format.read_cmtfilenamewith|exceptionCmi_format.Error(Not_an_interface_)->raiseNot_an_implementation|cmt_info->(letname=cmt_info.cmt_modnameinletsourcefile=(cmt_info.cmt_sourcefile,cmt_info.cmt_source_digest,cmt_info.cmt_builddir)inletinterface=cmt_info.cmt_interface_digestinletimports=cmt_info.cmt_importsinmatchcmt_info.cmt_annotswith|Packed(_,files)->letid=`Root(parent,Odoc_model.Names.ModuleName.make_stdname)inletitems=List.map(funfile->letpref=Misc.chop_extensionsfileinAstring.String.Ascii.capitalize(Filename.basenamepref))filesinletitems=List.sortString.compareitemsinletitems=List.map(funname->letid=`Module(id,Odoc_model.Names.ModuleName.make_stdname)inletpath=`Rootnamein{Odoc_model.Lang.Compilation_unit.Packed.id;path})itemsinletcontent=Odoc_model.Lang.Compilation_unit.Packitemsinmake_compilation_unit~make_root~imports~interface~sourcefile~name~idcontent|Implementationimpl->letid,sg,canonical=Cmt.read_implementationparentnameimplincompilation_unit_of_sig~make_root~imports~interface~sourcefile~name~id?canonicalsg|_->raiseNot_an_implementation)letread_cmi~make_root~parent~filename()=letcmi_info=Cmi_format.read_cmifilenameinmatchcmi_info.cmi_crcswith|(name,(Some_asinterface))::importswhenname=cmi_info.cmi_name->letid,sg=Cmi.read_interfaceparentname(Odoc_model.Compat.signaturecmi_info.cmi_sign)incompilation_unit_of_sig~make_root~imports~interface~name~idsg|_->raiseCorrupted(** Catch errors from reading the object files and some internal errors *)letwrap_errors~filenamef=Odoc_model.Error.catch_errors_and_warnings(fun()->tryf()with|Cmi_format.Error(Not_an_interface_)->not_an_interfacefilename|Cmt_format.Error(Not_a_typedtree_)->not_a_typedtreefilename|Cmi_format.Error(Wrong_version_interface_)->wrong_versionfilename|Cmi_format.Error(Corrupted_interface_)->corruptedfilename|Corrupted->corruptedfilename|Not_an_implementation->not_an_implementationfilename|Not_an_interface->not_an_interfacefilename|Make_root_errorm->error_msgfilenamem)letread_cmti~make_root~parent~filename=wrap_errors~filename(read_cmti~make_root~parent~filename)letread_cmt~make_root~parent~filename=wrap_errors~filename(read_cmt~make_root~parent~filename)letread_cmi~make_root~parent~filename=wrap_errors~filename(read_cmi~make_root~parent~filename)