package p4spectec
Source file coverage_dangling.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29open Domain.Lib module DCov = Coverage.Dangling.Single module Value = Runtime.Value let make () = (* Dangling coverage and a reader for it *) let coverage = ref DCov.empty in let coverage_backup = ref DCov.empty in let read () = !coverage in (* Instruction coverage measurement handler *) let module H : Handler.HANDLER = struct include Handler.Default let init_spec (spec : Handler.spec) : unit = match spec with SL spec_sl -> coverage := DCov.init spec_sl | _ -> () let backup () : unit = coverage_backup := !coverage let restore () : unit = coverage := !coverage_backup; coverage_backup := DCov.empty let on_instr_dangling (hit : bool) (iid : IId.t) (value_cond : Value.t) : unit = if hit then coverage := DCov.hit !coverage iid else coverage := DCov.miss !coverage iid value_cond.note.vid end in (* Return the handler and the reader *) ((module H : Handler.HANDLER), read)