diff --git a/src/kernel_services/ast_data/property.ml b/src/kernel_services/ast_data/property.ml index 16f4828980bb0c648de24f4539b7978aa5735cfb..d45b91734daebbe69d4e15629b11c5587c0a25a1 100644 --- a/src/kernel_services/ast_data/property.ml +++ b/src/kernel_services/ast_data/property.ml @@ -1065,210 +1065,6 @@ let rec pretty_debug fmt = function Cil_types_debug.pp_string io_name pp_other_loc io_loc -(* -------------------------------------------------------------------------- *) -(* --- Legacy Property Names --- *) -(* -------------------------------------------------------------------------- *) - -(* Shall be deprecated *) -module LegacyNames = -struct - - module NamesTbl = - State_builder.Hashtbl(Datatype.String.Hashtbl)(Datatype.Int) - (struct - let name = "PropertyNames" - let dependencies = [ ] - let size = 97 - end) - module IndexTbl = - State_builder.Hashtbl(Hashtbl)(Datatype.String) - (struct - let name = "PropertyIndex" - let dependencies = [ Ast.self; NamesTbl.self; Globals.Functions.self ] - let size = 97 - end) - - let self = IndexTbl.self - - let kf_prefix kf = (Ast_info.Function.get_vi kf.fundec).vname ^ "_" - - let ident_names names = - List.filter (function "" -> true - | _ as n -> '\"' <> (String.get n 0) ) names - - let pp_names fmt l = - let l = ident_names l in - match l with [] -> () - | _ -> Format.fprintf fmt "_%a" - (Pretty_utils.pp_list ~sep:"_" Format.pp_print_string) l - - let pp_code_annot_names fmt ca = - match ca.annot_content with - | AAssert(for_bhv,pred) | AInvariant(for_bhv,_,pred) -> - let named_pred = pred.tp_statement in - let pp_for_bhv fmt l = - match l with - | [] -> () - | _ -> Format.fprintf fmt "_for_%a" - (Pretty_utils.pp_list ~sep:"_" Format.pp_print_string) l - in - Format.fprintf fmt "%a%a" pp_names named_pred.pred_name pp_for_bhv for_bhv - | AVariant(term, _) -> pp_names fmt term.term_name - | _ -> () (* TODO : add some more names ? *) - - let behavior_prefix b = - if Cil.is_default_behavior b then "" - else b.b_name ^ "_" - - let variant_suffix = function - | (_,Some s) -> s.l_var_info.lv_name - | _ -> "" - - let string_of_termination_kind = function - Normal -> "post" - | Exits -> "exit" - | Breaks -> "break" - | Continues -> "continue" - | Returns -> "return" - - let stmt_prefix _s = "stmt_" - - let ki_prefix = function Kglobal -> "" | Kstmt s -> stmt_prefix s - - let extended_loc_prefix = function - | ELContract kf -> kf_prefix kf - | ELStmt (kf,s) -> kf_prefix kf ^ stmt_prefix s - | ELGlob -> "global_" - - let other_loc_prefix = function - | OLContract kf -> kf_prefix kf - | OLStmt (kf,s) -> kf_prefix kf ^ stmt_prefix s - | OLGlob _ -> "global_" - - let predicate_kind_txt pk ki = - let name = match pk with - | PKRequires b -> (behavior_prefix b) ^ "pre" - | PKAssumes b -> (behavior_prefix b) ^ "assume" - | PKEnsures (b, tk) -> (behavior_prefix b) ^ string_of_termination_kind tk - | PKTerminates -> "term" - in - (ki_prefix ki) ^ name - - let active_prefix fmt a = - let print_one a = Format.fprintf fmt "_%s" a in - Datatype.String.Set.iter print_one a - - let rec id_prop_txt p = match p with - | IPPredicate {ip_kind=pk;ip_kf=kf;ip_kinstr=ki;ip_pred=idp} -> - Format.asprintf "%s%s%a" - (kf_prefix kf) (predicate_kind_txt pk ki) - pp_names (Logic_const.pred_of_id_pred idp).pred_name - | IPExtended {ie_ext={ext_name};ie_loc=le} -> - Format.asprintf "%sextended%a" (extended_loc_prefix le) pp_names [ext_name] - | IPCodeAnnot {ica_kf=kf; ica_ca=ca} -> - let name = match ca.annot_content with - | AAssert (_, {tp_kind}) -> Cil_printer.string_of_assert tp_kind - | AInvariant (_,loop,{tp_kind}) -> - let kw = if loop then "invariant" else "loop_invariant" in - Cil_printer.ident_of_predicate ~kw tp_kind - | APragma _ -> "pragma" - | AStmtSpec _ -> "contract" - | AAssigns _ -> "assigns" - | AVariant _ -> "variant" - | AAllocation _ -> "allocates" - | AExtended(_,_,{ext_name}) -> ext_name - in Format.asprintf "%s%s%a" (kf_prefix kf) name pp_code_annot_names ca - | IPComplete {ic_kf=kf; ic_kinstr=ki; ic_active=a; ic_bhvs=lb} -> - let lb = Datatype.String.Set.elements lb in - Format.asprintf "%s%s%acomplete%a" - (kf_prefix kf) (ki_prefix ki) active_prefix a pp_names lb - | IPDisjoint {ic_kf=kf; ic_kinstr=ki; ic_active=a; ic_bhvs=lb} -> - let lb = Datatype.String.Set.elements lb in - Format.asprintf "%s%s%adisjoint%a" - (kf_prefix kf) (ki_prefix ki) active_prefix a pp_names lb - | IPDecrease {id_kf=kf; id_ca=None; id_variant=variant} -> - (kf_prefix kf) ^ "decr" ^ (variant_suffix variant) - | IPDecrease {id_kf=kf; id_variant=variant} -> - (kf_prefix kf) ^ "loop_term" ^ (variant_suffix variant) - | IPAxiomatic {iax_name} -> "axiomatic_" ^ iax_name - | IPLemma {il_name=name; il_pred} -> - Format.asprintf "%s_%s%a" - (Cil_printer.ident_of_lemma il_pred.tp_kind) - name pp_names il_pred.tp_statement.pred_name - | IPTypeInvariant {iti_name; iti_pred} -> - Format.asprintf "type_invariant_%s%a" - iti_name pp_names iti_pred.pred_name - | IPGlobalInvariant {igi_name; igi_pred} -> - Format.asprintf "global_invariant_%s%a" - igi_name pp_names igi_pred.pred_name - | IPAllocation {ial_kf=kf; ial_kinstr=ki; ial_bhv=Id_contract (a,b)} -> - Format.asprintf "%s%s%a%sallocates" - (kf_prefix kf) (ki_prefix ki) active_prefix a (behavior_prefix b) - | IPAllocation {ial_kf=kf; ial_kinstr=Kstmt _; ial_bhv=Id_loop ca} -> - Format.asprintf "%sloop_allocates%a" - (kf_prefix kf) pp_code_annot_names ca - | IPAllocation _ -> assert false - | IPAssigns {ias_kf=kf; ias_kinstr=ki; ias_bhv=Id_contract (a,b)} -> - Format.asprintf "%s%s%a%sassign" - (kf_prefix kf) (ki_prefix ki) active_prefix a (behavior_prefix b) - | IPAssigns {ias_kf=kf; ias_kinstr=Kstmt _; ias_bhv=Id_loop ca} -> - Format.asprintf "%sloop_assign%a" - (kf_prefix kf) pp_code_annot_names ca - | IPAssigns _ -> assert false - | IPFrom {if_from=(out,_)} -> - "from_id_"^(string_of_int (out.it_id)) - | IPReachable _ -> "reachable_stmt" - | IPBehavior {ib_kf=kf; ib_kinstr=ki; ib_active=a; ib_bhv=b} -> - Format.asprintf "%s%s%a%s" - (kf_prefix kf) (ki_prefix ki) active_prefix a b.b_name - | IPPropertyInstance {ii_kf=kf; ii_stmt=stmt; ii_ip=ip} -> - Format.asprintf "specialization_%s_at_%t" (id_prop_txt ip) - (fun fmt -> - Format.fprintf fmt "%a_stmt_%d" Kernel_function.pretty kf stmt.sid) - | IPOther {io_name; io_loc} -> other_loc_prefix io_loc ^ io_name - - (** function used to normalize basename *) - let normalize_basename s = - let is_valid_char_id = function - | 'a'..'z' | 'A' .. 'Z' | '0' .. '9' | '_' -> true - | _ -> false - and is_numeric = function - | '0'..'9' -> true - | _ -> false - in - if s ="" then "property" - else - let s = String.map (fun c -> if not (is_valid_char_id c) then '_' else c) s in - if is_numeric s.[0] then "property_" ^ s else s - - (** returns the name that should be returned by the function [get_prop_name_id] if the given property has [name] as basename. That name is reserved so that [get_prop_name_id prop] can never return an identical name. *) - let reserve_name_id basename = - let basename = normalize_basename basename in - try - let speed_up_start = NamesTbl.find basename in - (* this basename is already reserved *) - let n,unique_name = Extlib.make_unique_name NamesTbl.mem ~sep:"_" ~start:speed_up_start basename - in NamesTbl.replace basename (succ n) ; (* to speed up Extlib.make_unique_name for next time *) - unique_name - with Not_found -> (* first time that basename is reserved *) - NamesTbl.add basename 2 ; - basename - - (** returns the basename of the property. *) - let get_prop_basename ip = normalize_basename (id_prop_txt ip) - - (** returns a unique name identifying the property. - This name is built from the basename of the property. *) - let get_prop_name_id ip = - try IndexTbl.find ip - with Not_found -> (* first time we are asking for a name for that [ip] *) - let basename = get_prop_basename ip in - let unique_name = reserve_name_id basename in - IndexTbl.add ip unique_name ; - unique_name - -end - (* -------------------------------------------------------------------------- *) (* --- Property Names --- *) (* -------------------------------------------------------------------------- *) diff --git a/src/kernel_services/ast_data/property.mli b/src/kernel_services/ast_data/property.mli index 6d9f38b4c4eb2f6c042f597bdbeeab29ebbf9a24..eaf6c8bc0db251ebc066d74efacee36d742d1a6b 100644 --- a/src/kernel_services/ast_data/property.mli +++ b/src/kernel_services/ast_data/property.mli @@ -519,16 +519,6 @@ val source: identified_property -> Filepath.position option (** {2 names} *) (**************************************************************************) - -(** @since 19.0-Potassium deprecated old naming scheme, - to be removed in future versions. *) -module LegacyNames : -sig - val self: State.t - val get_prop_basename: identified_property -> string - val get_prop_name_id: identified_property -> string -end - (** @since Oxygen-20120901 *) module Names : sig