12345678910111213141516171819202122232425262728293031323334353637(* header for all files *)moduleAll=structinclude(Batteries:moduletypeofBatterieswithmoduleFormat:=Batteries.Format)moduleFormat=Batteries.Legacy.Formatletcomp2fgab=f(ga)(gb)letcompareBy?cmp:(cmp=compare)f=comp2cmpfletstr_removems=String.nreplace~str:s~sub:m~by:""(* Sys.time gives runtime in seconds as float *)letsplit_time()=(* gives CPU time in h,m,s,ms *)letf=Sys.time()inleti=int_of_floatfinletms=int_of_float(Float.modulof1.0*.1000.)ini/3600,i/60mod60,imod60,msletstring_of_time()=(* CPU time as hh:mm:ss.ms *)leth,m,s,ms=split_time()inPrintf.sprintf"%02d:%02d:%02d.%03d"hmsmsletlocaltime()=letopenUnixinlettm=time()|>localtimeinPrintf.sprintf"%d-%02d-%02d %02d:%02d:%02d"(tm.tm_year+1900)(tm.tm_mon+1)tm.tm_mdaytm.tm_hourtm.tm_mintm.tm_secendincludeAll(* shortcut so that 'open Prelude' is enough *)(* header for files in analyses *)moduleAna=structincludeAll(* CIL *)includeGoblintCilletd_varinfo()x=d_lval()(Varx,NoOffset)includePrettyletsprintfx=Pretty.sprint~width:80(f()x)(* Analyses.Spec etc. *)(* include Analyses (* circular build :( *) *)(* module M = Messages (* same, but this is in Analyses anyway *) *)end