@@ -285,51 +285,68 @@ object (self)
285285 None
286286
287287 method private record_proof_result
288+ ?(site: (string * int * string ) option = None )
288289 (status:po_status_t )
289290 (deps:dependencies_t )
290291 (expl:string ) =
291292 begin
292293 po#set_status status;
293294 po#set_dependencies deps;
294- po#set_explanation expl;
295+ po#set_explanation ~site expl;
295296 po#set_resolution_timestamp (current_time_to_string () )
296297 end
297298
298- method set_diagnostic (msg: string ) = po#add_diagnostic_msg msg
299+ method set_diagnostic
300+ ?(site: (string * int * string ) option = None )
301+ (msg: string ) =
302+ po#add_diagnostic_msg ~site msg
299303
300- method set_key_diagnostic (key: string ) (msg: string ) =
301- po#add_diagnostic_key_msg key msg
304+ method set_key_diagnostic
305+ ?(site : (string * int * string) option = None )
306+ (key : string )
307+ (msg : string ) =
308+ po#add_diagnostic_key_msg ~site key msg
302309
303- method set_ref_diagnostic (fname: string ) =
310+ method set_ref_diagnostic
311+ ?(site : (string * int * string) option = None ) (fname : string ) =
304312 match self#get_summary fname with
305313 | Some s ->
306314 begin
307315 match s.fs_domainref with
308316 | Some (ref , desc ) ->
309- po#add_diagnostic_key_msg (" DomainRef:" ^ ref ^ " :" ^ fname) desc
317+ po#add_diagnostic_key_msg ~site (" DomainRef:" ^ ref ^ " :" ^ fname) desc
310318 | _ -> ()
311319 end
312320 | _ -> ()
313321
314- method set_diagnostic_arg (index: int ) (txt: string ) =
322+ method set_diagnostic_arg
323+ ?(site : (string * int * string) option = None )
324+ (index : int )
325+ (txt : string ) =
315326 let txt = " [" ^ (string_of_int) index ^ " ]:" ^ txt in
316- po#add_diagnostic_arg_msg index txt
327+ po#add_diagnostic_arg_msg ~site index txt
317328
318- method set_exp_diagnostic ?(lb= false ) ?(ub= false ) (e:exp ) (s:string ) =
329+ method set_exp_diagnostic
330+ ?(site : (string * int * string) option = None )
331+ ?(lb =false )
332+ ?(ub =false )
333+ (e :exp )
334+ (s :string ) =
319335 match e with
320336 | Const (CInt _ ) -> ()
321337 | _ ->
322338 let prefix =
323339 if lb then " lb-exp" else if ub then " ub-exp" else " exp" in
324- self#set_diagnostic (" [" ^ prefix ^ " :" ^ (e2s e) ^ " ]: " ^ s)
340+ self#set_diagnostic ~site (" [" ^ prefix ^ " :" ^ (e2s e) ^ " ]: " ^ s)
325341
326342 method set_diagnostic_invariants (index :int ) =
327343 let invs = List. map (fun inv -> inv#index) (self#get_invariants index) in
328344 match invs with
329345 | [] -> ()
330346 | _ -> po#set_diagnostic_invariants index invs
331347
332- method set_diagnostic_call_invariants =
348+ method set_diagnostic_call_invariants
349+ ?(site : (string * int * string) option = None ) () =
333350 let callinvs = self#get_call_invariants in
334351 let entrysym = env#get_p_entry_sym in
335352 List. iter (fun inv ->
@@ -338,22 +355,25 @@ object (self)
338355 begin
339356 match l with
340357 | [s] when s#equal entrysym ->
341- self#set_diagnostic (" [" ^ v#getName#getBaseName ^ " :calls]:none" )
358+ self#set_diagnostic
359+ ~site (" [" ^ v#getName#getBaseName ^ " :calls]:none" )
342360 | _ ->
343361 let lst =
344362 List. fold_left (fun acc s ->
345363 if s#equal entrysym then
346364 acc
347365 else
348366 acc ^ " ; " ^ s#getBaseName) " " l in
349- self#set_diagnostic (" [" ^ v#getName#getBaseName ^ " :calls]" ^ lst)
367+ self#set_diagnostic
368+ ~site (" [" ^ v#getName#getBaseName ^ " :calls]" ^ lst)
350369 end
351370 | _ -> () ) callinvs
352371
353- method set_all_diagnostic_invariants =
372+ method set_all_diagnostic_invariants
373+ ?(site : (string * int * string) option = None ) () =
354374 let locinv = invio#get_location_invariant cfgcontext in
355375 let invs = locinv#get_invariants in
356- List. iter (fun inv -> po#add_diagnostic_msg (p2s (inv#toPretty))) invs
376+ List. iter (fun inv -> po#add_diagnostic_msg ~site (p2s (inv#toPretty))) invs
357377
358378 method get_init_vinfo_mem_invariants
359379 (vinfo : varinfo ) (offset : offset ): invariant_int list =
@@ -377,6 +397,7 @@ object (self)
377397 | _ -> acc) [] (invio#get_location_invariant cfgcontext)#get_invariants
378398
379399 method set_init_vinfo_mem_diagnostic_invariants
400+ ?(site : (string * int * string) option = None )
380401 (vinfo : varinfo ) (offset : offset ) =
381402 let numv = self#env#mk_program_var vinfo NoOffset NUM_VAR_TYPE in
382403 let ctxtinvs = (invio#get_location_invariant cfgcontext)#get_invariants in
@@ -398,12 +419,14 @@ object (self)
398419 else
399420 acc
400421 | _ -> acc) [] ctxtinvs in
401- List. iter (fun inv -> po#add_diagnostic_msg (p2s (inv#toPretty))) invs
422+ List. iter (fun inv -> po#add_diagnostic_msg ~site (p2s (inv#toPretty))) invs
402423
403- method set_vinfo_diagnostic_invariants (vinfo:varinfo ) =
424+ method set_vinfo_diagnostic_invariants
425+ ?(site : (string * int * string) option = None ) (vinfo :varinfo ) =
404426 let vinfovalues = self#get_vinfo_offset_values vinfo in
405427 List. iter (fun (inv , offset ) ->
406428 po#add_diagnostic_msg
429+ ~site
407430 (" ["
408431 ^ vinfo.vname
409432 ^ " ]: "
@@ -416,7 +439,10 @@ object (self)
416439 method private record_unevaluated (x :xpr_t ) =
417440 fApi#add_unevaluated po#get_predicate (xd#index_xpr x)
418441
419- method record_safe_result (deps:dependencies_t ) (expl:string ) =
442+ method record_safe_result
443+ ?(site : (string * int * string) option = None )
444+ (deps : dependencies_t )
445+ (expl : string ) =
420446 let _ = match deps with
421447 | DEnvC (_ , assumptions ) ->
422448 let (ppos, spos) = self#get_ppos_spos in
@@ -434,12 +460,16 @@ object (self)
434460 (fApi#add_api_assumption ~isglobal: true ~ppos ~spos pred)
435461 ) assumptions
436462 | _ -> () in
437- self#record_proof_result Green deps expl
463+ self#record_proof_result ~site Green deps expl
438464
439- method record_violation_result (deps:dependencies_t ) (expl:string ) =
440- self#record_proof_result Red deps expl
465+ method record_violation_result
466+ ?(site : (string * int * string) option = None )
467+ (deps :dependencies_t )
468+ (expl :string ) =
469+ self#record_proof_result ~site Red deps expl
441470
442471 method delegate_to_api
472+ ?(site : (string * int * string) option = None )
443473 ?(isfile =false )
444474 ?(isglobal =false )
445475 (pred :po_predicate_t )
@@ -454,12 +484,13 @@ object (self)
454484 ^ (p2s (po_predicate_to_pretty apred))
455485 ^ " delegated to api" in
456486 begin
457- self#record_proof_result Green deps expl;
487+ self#record_proof_result ~site Green deps expl;
458488 true
459489 end
460490 | _ ->
461491 begin
462492 self#set_diagnostic
493+ ~site
463494 (" condition " ^ (p2s (po_predicate_to_pretty pred)) ^ " not delegated" );
464495 false
465496 end
0 commit comments