From 5f096e8a03cb8ab0b40ee85ad6587e7ca28fc064 Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond <guillaume.melquiond@inria.fr> Date: Wed, 16 Oct 2013 15:44:12 +0200 Subject: [PATCH] Alt-Ergo: Discard arithmetic triggers, as they cause syntax errors. (Fix for bug #16454) --- drivers/alt_ergo_bare.drv | 15 +++++++++++++++ src/printer/alt_ergo.ml | 13 ++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/drivers/alt_ergo_bare.drv b/drivers/alt_ergo_bare.drv index 135a0258ad..2a5f43dde8 100644 --- a/drivers/alt_ergo_bare.drv +++ b/drivers/alt_ergo_bare.drv @@ -48,6 +48,11 @@ theory int.Int syntax function (*) "(%1 * %2)" syntax function (-_) "(-%1)" + meta "invalid trigger" predicate (<=) + meta "invalid trigger" predicate (<) + meta "invalid trigger" predicate (>=) + meta "invalid trigger" predicate (>) + syntax predicate (<=) "(%1 <= %2)" syntax predicate (<) "(%1 < %2)" syntax predicate (>=) "(%1 >= %2)" @@ -89,6 +94,11 @@ theory real.Real syntax function (-_) "(-%1)" syntax function inv "(1.0 / %1)" + meta "invalid trigger" predicate (<=) + meta "invalid trigger" predicate (<) + meta "invalid trigger" predicate (>=) + meta "invalid trigger" predicate (>) + syntax predicate (<=) "(%1 <= %2)" syntax predicate (<) "(%1 < %2)" syntax predicate (>=) "(%1 >= %2)" @@ -124,6 +134,11 @@ theory real.RealInfix syntax function (/.) "(%1 / %2)" syntax function (-._) "(-%1)" + meta "invalid trigger" predicate (<=.) + meta "invalid trigger" predicate (<.) + meta "invalid trigger" predicate (>=.) + meta "invalid trigger" predicate (>.) + syntax predicate (<=.) "(%1 <= %2)" syntax predicate (<.) "(%1 < %2)" syntax predicate (>=.) "(%1 >= %2)" diff --git a/src/printer/alt_ergo.ml b/src/printer/alt_ergo.ml index e7adeb94bb..d6f21c11d1 100644 --- a/src/printer/alt_ergo.ml +++ b/src/printer/alt_ergo.ml @@ -26,6 +26,10 @@ let meta_printer_option = Theory.register_meta "printer_option" [Theory.MTstring] ~desc:"Pass@ additional@ parameters@ to@ the@ pretty-printer." +let meta_invalid_trigger = + Theory.register_meta "invalid trigger" [Theory.MTlsymbol] + ~desc:"Specify@ that@ a@ symbol@ is@ not@ allowed@ in@ a@ trigger." + type info = { info_syn : syntax_map; info_ac : Sls.t; @@ -34,6 +38,7 @@ type info = { info_csm : lsymbol list Mls.t; info_pjs : Sls.t; info_axs : Spr.t; + info_inv_trig : Sls.t; } let ident_printer = @@ -222,7 +227,7 @@ and print_expr info fmt = and print_triggers info fmt tl = let filter = function | { t_ty = Some _ } -> true - | { t_node = Tapp (ps,_) } -> not (ls_equal ps ps_equ) + | { t_node = Tapp (ps,_) } -> not (Sls.mem ps info.info_inv_trig) | _ -> false in let tl = List.map (List.filter filter) tl in let tl = List.filter (function [] -> false | _::_ -> true) tl in @@ -373,7 +378,7 @@ let () = register_printer "alt-ergo-old" *) let print_decls = - let print ac sl tc csm pjs axs sm fmt d = + let print inv_trig ac sl tc csm pjs axs sm fmt d = let info = { info_syn = sm; info_ac = ac; @@ -382,8 +387,10 @@ let print_decls = info_csm = Mls.map Array.to_list csm; info_pjs = pjs; info_axs = axs; + info_inv_trig = Sls.add ps_equ inv_trig; } in print_decl info fmt d in + Trans.on_tagged_ls meta_invalid_trigger (fun inv_trig -> Trans.on_tagged_ls meta_ac (fun ac -> Trans.on_meta meta_printer_option (fun args -> let sl = List.fold_left check_showlabels false args in @@ -391,7 +398,7 @@ let print_decls = Trans.on_meta Eliminate_algebraic.meta_proj (fun mal -> let csm,pjs,axs = List.fold_left add_projection (Mls.empty,Sls.empty,Spr.empty) mal in - Printer.sprint_decls (print ac sl tc csm pjs axs)))) + Printer.sprint_decls (print inv_trig ac sl tc csm pjs axs))))) let print_task _env pr thpr _blacklist ?old:_ fmt task = (* In trans-based p-printing [forget_all] is a no-no *) -- GitLab