From c58cba8a1b391a5acaa91e34e8fd406a94ca088f Mon Sep 17 00:00:00 2001 From: Julien Signoles <julien.signoles@cea.fr> Date: Thu, 27 Aug 2020 09:42:43 +0200 Subject: [PATCH] [kernel] export membership functions in Globals.Types --- src/kernel_services/ast_data/globals.ml | 8 ++++++++ src/kernel_services/ast_data/globals.mli | 10 ++++++++++ src/plugins/e-acsl/src/project_initializer/rtl.ml | 9 +-------- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/kernel_services/ast_data/globals.ml b/src/kernel_services/ast_data/globals.ml index 9e7fc4010ab..8ca2727ea32 100644 --- a/src/kernel_services/ast_data/globals.ml +++ b/src/kernel_services/ast_data/globals.ml @@ -741,10 +741,18 @@ module Types = struct TypeNameToGlobal.mark_as_computed () end + let mem_enum_tag x = + resolve_types (); + Enums.mem x + let find_enum_tag x = resolve_types (); Enums.find x + let mem_type namespace s = + resolve_types (); + Types.mem (s, namespace) + let find_type namespace s = resolve_types (); Types.find (s, namespace) diff --git a/src/kernel_services/ast_data/globals.mli b/src/kernel_services/ast_data/globals.mli index c9866e785bf..d61900ee900 100644 --- a/src/kernel_services/ast_data/globals.mli +++ b/src/kernel_services/ast_data/globals.mli @@ -219,10 +219,20 @@ module Types : sig (** The two functions below are suitable for use in functor {!Logic_typing.Make} *) + val mem_enum_tag: string -> bool + (** @return true iff there is an enum constant with the given name in the + AST. + @since Frama-C+dev *) + val find_enum_tag: string -> exp * typ (** Find an enum constant from its name in the AST. @raise Not_found when no such constant exists. *) + val mem_type: Logic_typing.type_namespace -> string -> bool + (** @return true iff there is a type with the given name in the given + namespace in the AST. + @since Frama-C+dev *) + val find_type: Logic_typing.type_namespace -> string -> typ (** Find a type from its name in the AST. @raise Not_found when no such type exists. *) diff --git a/src/plugins/e-acsl/src/project_initializer/rtl.ml b/src/plugins/e-acsl/src/project_initializer/rtl.ml index 2a6e9673773..47f3c40f6cd 100644 --- a/src/plugins/e-acsl/src/project_initializer/rtl.ml +++ b/src/plugins/e-acsl/src/project_initializer/rtl.ml @@ -124,14 +124,7 @@ let lookup_rtl_globals rtl_ast = end (* [do_ty] is [do_it] for types *) and do_ty acc l g kind tname = - let mem _g = - try - ignore (Globals.Types.find_type kind tname); - true - with Not_found -> - false - in - do_it mem acc l g + do_it (fun _ -> Globals.Types.mem_type kind tname) acc l g and do_globals acc globs = match globs with | [] -> -- GitLab