From 7ab09585fd3333a66e119102ffa8efeee9ef038c Mon Sep 17 00:00:00 2001 From: Thibaut Benjamin <thibaut.benjamin@gmail.com> Date: Mon, 10 Oct 2022 16:03:20 +0200 Subject: [PATCH] [e-acsl] refactor Gmp: remove Rational.name_arith_bop --- src/plugins/e-acsl/src/code_generator/gmp.ml | 8 ++++++++ src/plugins/e-acsl/src/code_generator/gmp.mli | 8 ++++++++ src/plugins/e-acsl/src/code_generator/rational.ml | 10 +--------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/plugins/e-acsl/src/code_generator/gmp.ml b/src/plugins/e-acsl/src/code_generator/gmp.ml index 9ab2527d36b..1048b8a9d3f 100644 --- a/src/plugins/e-acsl/src/code_generator/gmp.ml +++ b/src/plugins/e-acsl/src/code_generator/gmp.ml @@ -159,6 +159,14 @@ module Z = struct end module Q = struct + let name_arith_bop = function + | PlusA -> "__gmpq_add" + | MinusA -> "__gmpq_sub" + | Mult -> "__gmpq_mul" + | Div -> "__gmpq_div" + | Mod | Lt | Gt | Le | Ge | Eq | Ne | BAnd | BXor | BOr | LAnd | LOr + | Shiftlt | Shiftrt | PlusPI | MinusPI | MinusPP -> assert false + exception Not_a_decimal of string exception Is_a_float diff --git a/src/plugins/e-acsl/src/code_generator/gmp.mli b/src/plugins/e-acsl/src/code_generator/gmp.mli index e8756f44515..219cb2a108a 100644 --- a/src/plugins/e-acsl/src/code_generator/gmp.mli +++ b/src/plugins/e-acsl/src/code_generator/gmp.mli @@ -48,6 +48,14 @@ module Z : sig end +module Q : sig + + val name_arith_bop: binop -> string + (** [name_of_mpz_arith_bop bop] returns the name of the GMP function on integer + corresponding to the [bop] arithmetic operation. *) + +end + val normalize_str: string -> string (** Normalize the string so that it fits the representation used by the underlying real library. For example, "0.1" is a real number in ACSL diff --git a/src/plugins/e-acsl/src/code_generator/rational.ml b/src/plugins/e-acsl/src/code_generator/rational.ml index b53f8d76ad0..14bb46e1067 100644 --- a/src/plugins/e-acsl/src/code_generator/rational.ml +++ b/src/plugins/e-acsl/src/code_generator/rational.ml @@ -111,16 +111,8 @@ let new_var_and_init ~loc ?scope ?name env kf t_opt mk_stmts = (Gmp_types.Q.t ()) (fun v e -> Gmp.init ~loc e :: mk_stmts v e) -let name_arith_bop = function - | PlusA -> "__gmpq_add" - | MinusA -> "__gmpq_sub" - | Mult -> "__gmpq_mul" - | Div -> "__gmpq_div" - | Mod | Lt | Gt | Le | Ge | Eq | Ne | BAnd | BXor | BOr | LAnd | LOr - | Shiftlt | Shiftrt | PlusPI | MinusPI | MinusPP -> assert false - let binop ~loc bop e1 e2 env kf t_opt = - let name = name_arith_bop bop in + let name = Gmp.Q.name_arith_bop bop in (* TODO: [t1_opt] and [t2_opt] could be provided when creating [e1] and [e2] *) let e1, env = Gmp_gen.Q.create ~loc None env kf e1 in -- GitLab