From 34f41ff77a4ac9eae924c557bd8df38332cd4301 Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Wed, 12 Feb 2020 16:26:30 +0100 Subject: [PATCH] [kernel] Change default ACSL extension short printer --- .../examples/acsl_extension_ext_types.ml | 3 ++- .../ast_queries/acsl_extension.ml | 20 +++++++++++-------- tests/spec/Extend_short_print.i | 2 +- tests/spec/Extend_short_print.ml | 4 ++-- .../spec/oracle/Extend_short_print.res.oracle | 2 +- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/doc/developer/examples/acsl_extension_ext_types.ml b/doc/developer/examples/acsl_extension_ext_types.ml index 504b903633e..a387bad3fef 100644 --- a/doc/developer/examples/acsl_extension_ext_types.ml +++ b/doc/developer/examples/acsl_extension_ext_types.ml @@ -30,7 +30,8 @@ let visitor _ _ = Cil.SkipChildren let gen_printer s _pp fmt = function | Ext_id i -> - Format.fprintf fmt "%s%s" (if s then "" else "load: ") (Ts.find i).lt_name + Format.fprintf fmt "%s: %s" + (if s then "ext_type" else "load") (Ts.find i).lt_name | _ -> assert false let printer = gen_printer false diff --git a/src/kernel_services/ast_queries/acsl_extension.ml b/src/kernel_services/ast_queries/acsl_extension.ml index ade873ecd95..9d03166f5ac 100644 --- a/src/kernel_services/ast_queries/acsl_extension.ml +++ b/src/kernel_services/ast_queries/acsl_extension.ml @@ -31,7 +31,7 @@ type extension = { typer: extension_typer ; visitor: extension_visitor ; printer: extension_printer ; - short_printer: extension_printer option + short_printer: extension_printer ; } and extension_preprocessor = lexpr list -> lexpr list @@ -48,12 +48,17 @@ let default_printer printer fmt = function | Ext_terms ts -> Pretty_utils.pp_list ~sep:",@ " printer#term fmt ts | Ext_preds ps -> Pretty_utils.pp_list ~sep:",@ " printer#predicate fmt ps +let default_short_printer name _printer fmt _ext_kind = + Format.fprintf fmt "%s" name + let make - category + name category ?(preprocessor=Extlib.id) typer ?(visitor=fun _ _ -> Cil.DoChildren) - ?(printer=default_printer) ?short_printer status = + ?(printer=default_printer) + ?(short_printer=default_short_printer name) + status = { category; status; preprocessor; typer; visitor; printer; short_printer } module Extensions = struct @@ -73,7 +78,7 @@ module Extensions = struct let register cat name ?preprocessor typer ?visitor ?printer ?short_printer status = let info = - make cat ?preprocessor typer ?visitor ?printer ?short_printer status + make name cat ?preprocessor typer ?visitor ?printer ?short_printer status in if is_extension name then Kernel.warning ~wkey:Kernel.wkey_acsl_extension @@ -106,9 +111,8 @@ module Extensions = struct Format.fprintf fmt "@[<hov 2>%s %a;@]" name pp kind let short_print name printer fmt kind = - match (find name).short_printer with - | None -> Format.fprintf fmt "%s" name - | Some pp -> Format.fprintf fmt "%s: %a" name (pp printer) kind + let pp = (find name).short_printer in + Format.fprintf fmt "%a" (pp printer) kind end (* Registration functions *) @@ -155,7 +159,7 @@ let deprecated_find ?(strong=true) name cat op_name = match Hashtbl.find_opt Extensions.ext_tbl name with | None -> if strong then Hashtbl.add strong_cat name cat ; - (make cat default_typer false) + (make name cat default_typer false) | Some ext -> if strong && Hashtbl.mem strong_cat name then begin if ext.category = cat then ext diff --git a/tests/spec/Extend_short_print.i b/tests/spec/Extend_short_print.i index 62da2756985..568f3561f8b 100644 --- a/tests/spec/Extend_short_print.i +++ b/tests/spec/Extend_short_print.i @@ -5,5 +5,5 @@ OPT: -no-autoload-plugins -load-module @PTEST_DIR@/@PTEST_NAME@.cmxs /*@ without_short \true ; - with_short \true ; + has_short \true ; */ \ No newline at end of file diff --git a/tests/spec/Extend_short_print.ml b/tests/spec/Extend_short_print.ml index de0cb70361f..386cc1080b5 100644 --- a/tests/spec/Extend_short_print.ml +++ b/tests/spec/Extend_short_print.ml @@ -1,11 +1,11 @@ open Cil_types let typer _context _loc _tree = Ext_id 42 -let short_printer _printer fmt _kind = Format.fprintf fmt "some content" +let short_printer _printer fmt _kind = Format.fprintf fmt "HS: some content" let () = Acsl_extension.register_global "without_short" typer false ; - Acsl_extension.register_global "with_short" typer ~short_printer false + Acsl_extension.register_global "has_short" typer ~short_printer false let process_global _ = function | Dextended(e, _, _) -> Kernel.feedback "%a" Cil_printer.pp_short_extended e diff --git a/tests/spec/oracle/Extend_short_print.res.oracle b/tests/spec/oracle/Extend_short_print.res.oracle index fe5db7f43bb..a44980575a8 100644 --- a/tests/spec/oracle/Extend_short_print.res.oracle +++ b/tests/spec/oracle/Extend_short_print.res.oracle @@ -1,3 +1,3 @@ [kernel] Parsing tests/spec/Extend_short_print.i (no preprocessing) -[kernel] with_short: some content +[kernel] HS: some content [kernel] without_short -- GitLab