Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file traces.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365(*****************************************************************************)(* *)(* Open Source License *)(* Copyright (c) 2021 Nomadic Labs <contact@nomadic-labs.com> *)(* *)(* Permission is hereby granted, free of charge, to any person obtaining a *)(* copy of this software and associated documentation files (the "Software"),*)(* to deal in the Software without restriction, including without limitation *)(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *)(* and/or sell copies of the Software, and to permit persons to whom the *)(* Software is furnished to do so, subject to the following conditions: *)(* *)(* The above copyright notice and this permission notice shall be included *)(* in all copies or substantial portions of the Software. *)(* *)(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*)(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *)(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *)(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*)(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *)(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *)(* DEALINGS IN THE SOFTWARE. *)(* *)(*****************************************************************************)moduletypeS=Traced_sigs.Trace.SmoduletypeEXTENDED=sigincludeSvalpp:(Format.formatter->'err->unit)->Format.formatter->'errtrace->unitvalpp_top:(Format.formatter->'err->unit)->Format.formatter->'errtrace->unitvalfold:('a->'error->'a)->'a->'errortrace->'avalsalvage:('error->'aoption)->'errortrace->('a,'errortrace)resultvalsalvage_s:('error->'aLwt.toption)->'errortrace->('a,'errortrace)resultLwt.tvalsalvage_e:('error->('a,'errortrace)resultoption)->'errortrace->('a,'errortrace)resultvalsalvage_es:('error->('a,'errortrace)resultLwt.toption)->'errortrace->('a,'errortrace)resultLwt.tvalrecover:('error->'aoption)->('errortrace->'a)->'errortrace->'avalrecover_s:('error->'aLwt.toption)->('errortrace->'aLwt.t)->'errortrace->'aLwt.tvalrecover_e:('error->('a,'errortrace)resultoption)->('errortrace->('a,'errortrace)result)->'errortrace->('a,'errortrace)resultvalrecover_es:('error->('a,'errortrace)resultLwt.toption)->('errortrace->('a,'errortrace)resultLwt.t)->'errortrace->('a,'errortrace)resultLwt.tvalwrap:('a->'b)->'atrace->'btraceendmoduleSingletonR:EXTENDED=structtype'errortrace='errorletmakee=eletconse_=eletcons_liste_=eletconpe_=eletconp_liste_=eletpppp_errorfmte=pp_errorfmteletpp_toppp_errorfmte=pp_errorfmteletfoldfacce=facceopenBare_structs.Monadletsalvagefe=matchfewithNone->Errore|Somex->Okxletsalvage_sfe=matchfewith|None->Lwt.return(Errore)|Somex->x>>=Lwt.return_okletsalvage_efe=matchfewithNone->Errore|Somex->xletsalvage_esfe=matchfewithNone->Lwt.return(Errore)|Somex->xletrecoverfge=matchfewithNone->ge|Somex->xletrecover_sfge=recoverfgeletrecover_efge=recoverfgeletrecover_esfge=recoverfgeletwrapfe=feendmoduleSingletonL:EXTENDED=structtype'errortrace='errorletmakee=eletconse_=eletcons_liste_=eletconp_e=eletrecconp_liste=function[]->e|e::es->conp_listeesletpppp_errorfmte=pp_errorfmteletpp_toppp_errorfmte=pp_errorfmteletfoldfacce=facceopenBare_structs.Monadletsalvagefe=matchfewithNone->Errore|Somex->Okxletsalvage_sfe=matchfewith|None->Lwt.return(Errore)|Somex->x>>=Lwt.return_okletsalvage_efe=matchfewithNone->Errore|Somex->xletsalvage_esfe=matchfewithNone->Lwt.return(Errore)|Somex->xletrecoverfge=matchfewithNone->ge|Somex->xletrecover_sfge=recoverfgeletrecover_efge=recoverfgeletrecover_esfge=recoverfgeletwrapfe=feendmoduleSingletonND:EXTENDED=structletprng=Random.State.make_self_init()leteitherab=ifRandom.State.boolprngthenaelsebletrecanye=function|[]->e|x::xs->ifRandom.State.boolprngtheneelseanyxxstype'errortrace='errorletmakee=eletcons=eitherletcons_list=anyletconp=eitherletconp_list=anyletpppp_errorfmte=pp_errorfmteletpp_toppp_errorfmte=pp_errorfmteletfoldfacce=facceopenBare_structs.Monadletsalvagefe=matchfewithNone->Errore|Somex->Okxletsalvage_sfe=matchfewith|None->Lwt.return(Errore)|Somex->x>>=Lwt.return_okletsalvage_efe=matchfewithNone->Errore|Somex->xletsalvage_esfe=matchfewithNone->Lwt.return(Errore)|Somex->xletrecoverfge=matchfewithNone->ge|Somex->xletrecover_sfge=recoverfgeletrecover_efge=recoverfgeletrecover_esfge=recoverfgeletwrapfe=feendmoduleFlat:EXTENDED=structtype'errortrace='errorlistletmakee=[e]letconset=e::tletcons_listees=e::esletconpeler=el@erletconp_listees=Stdlib.List.flatten(e::es)letpppp_errorfmtt=Format.pp_print_list~pp_sep:Format.pp_print_cutpp_errorfmttletpp_toppp_errorfmtt=lete=Stdlib.List.hdtinpp_errorfmteletfoldfacce=Stdlib.List.fold_leftfacceopenBare_structs.Monadletsalvageft=lete=Stdlib.List.hdtinmatchfewithNone->Errort|Somex->Okxletsalvage_sft=lete=Stdlib.List.hdtinmatchfewith|None->Lwt.return(Errort)|Somex->x>>=Lwt.return_okletsalvage_eft=lete=Stdlib.List.hdtinmatchfewithNone->Errort|Somex->xletsalvage_esft=lete=Stdlib.List.hdtinmatchfewithNone->Lwt.return(Errort)|Somex->xletrecoverfgt=lete=Stdlib.List.hdtinmatchfewithNone->gt|Somex->xletrecover_sfgt=recoverfgtletrecover_efgt=recoverfgtletrecover_esfgt=recoverfgtletwrapft=Stdlib.List.mapftendmoduleFull:EXTENDED=structtype'atree=|Parof'atreelist(* invariant: never empty *)|Seqof'a*'atree|Singlof'atype'errortrace='errortreeletmakee=Singleletconset=Seq(e,t)letcons_listees=matchList.reveswith|[]->Single|[ee]->Seq(e,Singlee)|last::rev_es->Seq(e,List.fold_left(funacce->Seq(e,acc))(Singllast)rev_es)letconpel=functionParer->Par(el::er)|_aser->Par[el;er]letconp_listees=Par(e::es)(* TODO: use the printbox package instead *)letrecpppp_errorfmt=function|Parts->Format.pp_open_vboxfmt2;List.iter(pppp_errorfmt)ts;Format.pp_close_boxfmt()|Seq(e,t)->pp_errorfmte;Format.pp_force_newlinefmt();pppp_errorfmtt|Single->pp_errorfmteletrecpp_toppp_errorfmt=function|Parts->Format.pp_open_vboxfmt2;List.iter(pp_toppp_errorfmt)ts;Format.pp_close_boxfmt()|Seq(e,_)|Single->pp_errorfmteletrecfoldfacc=function|Parts->List.fold_left(foldf)accts|Seq(e,t)->foldf(facce)t|Single->facceopenBare_structs.Monadletpre_salvageft=letrecaux_t=function|Parts->aux_parts|Seq(e,_)|Single->feandaux_par=function|[]->None|t::ts->(matchaux_ttwith|Some_assalvaged->salvaged|None->aux_parts)inaux_ttletsalvageft=matchpre_salvageftwithSomex->Okx|None->Errortletsalvage_sft=matchpre_salvageftwith|Somex->x>>=funx->Lwt.return(Okx)|None->Lwt.return(Errort)letsalvage_eft=matchpre_salvageftwithSomex->x|None->Errortletsalvage_esft=matchpre_salvageftwith|Somex->x>>=funx->Lwt.returnx|None->Lwt.return(Errort)letrecoverfgt=matchpre_salvageftwithSomex->x|None->gtletrecover_sfgt=recoverfgtletrecover_efgt=recoverfgtletrecover_esfgt=recoverfgtletrecwrapf=function|Parts->Par(List.map(wrapf)ts)|Seq(e,t)->Seq(fe,wrapft)|Single->Singl(fe)end