This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Ada] Macro-ize a couple of wrappers


For efficiency reasons.

Tested on i586-suse-linux, applied on the mainline.


2008-04-18  Eric Botcazou  <ebotcazou@adacore.com>

	* gigi.h (create_var_decl_1): Declare.
	(create_var_decl): Turn into a macro invoking create_var_decl_1.
	(create_true_var_decl): Likewise.
	* utils.c (create_var_decl_1): Make global and reorder parameters.
	(create_var_decl): Delete.
	(create_true_var_decl): Likewise.


-- 
Eric Botcazou
Index: gigi.h
===================================================================
--- gigi.h	(revision 134383)
+++ gigi.h	(working copy)
@@ -564,36 +564,51 @@ extern tree create_type_decl (tree type_
                               bool artificial_p, bool debug_info_p,
 			      Node_Id gnat_node);
 
-/* Returns a GCC VAR_DECL or CONST_DECL node.
+/* Return a VAR_DECL or CONST_DECL node.
 
    VAR_NAME gives the name of the variable.  ASM_NAME is its assembler name
    (if provided).  TYPE is its data type (a GCC ..._TYPE node).  VAR_INIT is
    the GCC tree for an optional initial expression; NULL_TREE if none.
 
-   CONST_FLAG is true if this variable is constant.
+   CONST_FLAG is true if this variable is constant, in which case we might
+   return a CONST_DECL node unless CONST_DECL_ALLOWED_P is false.
 
    PUBLIC_FLAG is true if this definition is to be made visible outside of
    the current compilation unit. This flag should be set when processing the
-   variable definitions in a package specification.  EXTERN_FLAG is nonzero
-   when processing an external variable declaration (as opposed to a
-   definition: no storage is to be allocated for the variable here).
+   variable definitions in a package specification.
+
+   EXTERN_FLAG is nonzero when processing an external variable declaration (as
+   opposed to a definition: no storage is to be allocated for the variable).
 
    STATIC_FLAG is only relevant when not at top level.  In that case
    it indicates whether to always allocate storage to the variable.
 
    GNAT_NODE is used for the position of the decl.  */
-extern tree create_var_decl (tree var_name, tree asm_name, tree type,
-                             tree var_init, bool const_flag,
-                             bool public_flag, bool extern_flag,
-                             bool static_flag,
-			     struct attrib *attr_list, Node_Id gnat_node);
-
-/* Similar to create_var_decl, forcing the creation of a VAR_DECL node.  */
-extern tree create_true_var_decl (tree var_name, tree asm_name, tree type,
-				  tree var_init, bool const_flag,
-				  bool public_flag, bool extern_flag,
-				  bool static_flag,
-				  struct attrib *attr_list, Node_Id gnat_node);
+tree
+create_var_decl_1 (tree var_name, tree asm_name, tree type, tree var_init,
+		   bool const_flag, bool public_flag, bool extern_flag,
+		   bool static_flag, bool const_decl_allowed_p,
+		   struct attrib *attr_list, Node_Id gnat_node);
+
+/* Wrapper around create_var_decl_1 for cases where we don't care whether
+   a VAR or a CONST decl node is created.  */
+#define create_var_decl(var_name, asm_name, type, var_init,	\
+			const_flag, public_flag, extern_flag,	\
+			static_flag, attr_list, gnat_node)	\
+  create_var_decl_1 (var_name, asm_name, type, var_init,	\
+		     const_flag, public_flag, extern_flag,	\
+		     static_flag, true, attr_list, gnat_node)
+
+/* Wrapper around create_var_decl_1 for cases where a VAR_DECL node is
+   required.  The primary intent is for DECL_CONST_CORRESPONDING_VARs, which
+   must be VAR_DECLs and on which we want TREE_READONLY set to have them
+   possibly assigned to a readonly data section.  */
+#define create_true_var_decl(var_name, asm_name, type, var_init,	\
+			     const_flag, public_flag, extern_flag,	\
+			     static_flag, attr_list, gnat_node)		\
+  create_var_decl_1 (var_name, asm_name, type, var_init,		\
+		     const_flag, public_flag, extern_flag,		\
+		     static_flag, false, attr_list, gnat_node)
 
 /* Given a DECL and ATTR_LIST, apply the listed attributes.  */
 extern void process_attributes (tree decl, struct attrib *attr_list);
Index: utils.c
===================================================================
--- utils.c	(revision 134383)
+++ utils.c	(working copy)
@@ -1418,31 +1418,31 @@ create_type_decl (tree type_name, tree t
   return type_decl;
 }
 
-/* Helper for create_var_decl and create_true_var_decl. Returns a GCC VAR_DECL
-   or CONST_DECL node.
+/* Return a VAR_DECL or CONST_DECL node.
 
    VAR_NAME gives the name of the variable.  ASM_NAME is its assembler name
    (if provided).  TYPE is its data type (a GCC ..._TYPE node).  VAR_INIT is
    the GCC tree for an optional initial expression; NULL_TREE if none.
 
    CONST_FLAG is true if this variable is constant, in which case we might
-   return a CONST_DECL node unless CONST_DECL_ALLOWED_FLAG is false.
+   return a CONST_DECL node unless CONST_DECL_ALLOWED_P is false.
 
    PUBLIC_FLAG is true if this definition is to be made visible outside of
    the current compilation unit. This flag should be set when processing the
-   variable definitions in a package specification.  EXTERN_FLAG is nonzero
-   when processing an external variable declaration (as opposed to a
-   definition: no storage is to be allocated for the variable here).
+   variable definitions in a package specification.
+
+   EXTERN_FLAG is nonzero when processing an external variable declaration (as
+   opposed to a definition: no storage is to be allocated for the variable).
 
    STATIC_FLAG is only relevant when not at top level.  In that case
    it indicates whether to always allocate storage to the variable.
 
    GNAT_NODE is used for the position of the decl.  */
 
-static tree
+tree
 create_var_decl_1 (tree var_name, tree asm_name, tree type, tree var_init,
-		   bool const_flag, bool const_decl_allowed_flag,
-		   bool public_flag, bool extern_flag, bool static_flag,
+		   bool const_flag, bool public_flag, bool extern_flag,
+		   bool static_flag, bool const_decl_allowed_p,
 		   struct attrib *attr_list, Node_Id gnat_node)
 {
   bool init_const
@@ -1464,7 +1464,7 @@ create_var_decl_1 (tree var_name, tree a
   /* The actual DECL node.  CONST_DECL was initially intended for enumerals
      and may be used for scalars in general but not for aggregates.  */
   tree var_decl
-    = build_decl ((constant_p && const_decl_allowed_flag
+    = build_decl ((constant_p && const_decl_allowed_p
 		   && !AGGREGATE_TYPE_P (type)) ? CONST_DECL : VAR_DECL,
 		  var_name, type);
 
@@ -1528,38 +1528,6 @@ create_var_decl_1 (tree var_name, tree a
 
   return var_decl;
 }
-
-/* Wrapper around create_var_decl_1 for cases where we don't care whether
-   a VAR or a CONST decl node is created.  */
-
-tree
-create_var_decl (tree var_name, tree asm_name, tree type, tree var_init,
-		 bool const_flag, bool public_flag, bool extern_flag,
-		 bool static_flag, struct attrib *attr_list,
-		 Node_Id gnat_node)
-{
-  return create_var_decl_1 (var_name, asm_name, type, var_init,
-			    const_flag, true,
-			    public_flag, extern_flag, static_flag,
-			    attr_list, gnat_node);
-}
-
-/* Wrapper around create_var_decl_1 for cases where a VAR_DECL node is
-   required.  The primary intent is for DECL_CONST_CORRESPONDING_VARs, which
-   must be VAR_DECLs and on which we want TREE_READONLY set to have them
-   possibly assigned to a readonly data section.  */
-
-tree
-create_true_var_decl (tree var_name, tree asm_name, tree type, tree var_init,
-		      bool const_flag, bool public_flag, bool extern_flag,
-		      bool static_flag, struct attrib *attr_list,
-		      Node_Id gnat_node)
-{
-  return create_var_decl_1 (var_name, asm_name, type, var_init,
-			    const_flag, false,
-			    public_flag, extern_flag, static_flag,
-			    attr_list, gnat_node);
-}
 
 /* Return true if TYPE, an aggregate type, contains (or is) an array.  */
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]