12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364moduleStdlib=structletfailwithffmt=Printf.kprintffailwithfmtletinvalid_argffmt=Printf.kprintfinvalid_argfmtletraisefffmt=Printf.kprintf(funs->raise(fs))fmtexceptionFinallyofexn*exn(* CR jfuruse: looks lousy... *)letprotectfv~(finally:'a->unit)=letres=tryfvwithexn->(tryfinallyvwithfinal_exn->raise(Finally(exn,final_exn)));raiseexninfinallyv;resletprotect_withfv~finally=letres=tryfvwithexn->(tryignore@@finallyvwithfinal_exn->raise(Finally(exn,final_exn)));raiseexninres,finallyvletcatchfv=tryOk(fv)withe->Error(`Exne)lettry_ignorefv=tryfvwith_->()lettry_orfgv=tryfvwith_->gvlettry_boolfv=tryignore@@fv;truewith_->falseletprotect_f=protectf()letprotect_with_f=protect_withf()letcatch_f=catchf()lettry_ignore_f=try_ignoref()lettry_or_fg=try_orfg()lettry_bool_f=try_boolf()letteefv~handler=tryfvwithe->handlere;raiseetype'areturn={return:'jump.'a->'jump}letwith_return(typea)f:a=letmoduleM=structexceptionReturnofaendintryf{return=funa->raise(M.Returna)}withM.Returna->aendincludeStdlib(* Printexc
Printexc has a very bad name. Printexc for exn ?
*)letto_string=Printexc.to_stringletformatppft=Format.pp_print_stringppf(Printexc.to_stringt)letprint_backtrace=Printexc.print_backtraceletget_backtrace=Printexc.get_backtraceletregister_printer=Printexc.register_printer