#define MARK_VISITED(EXP) \
do { \
- if((EXP) && !CONSTANT_CLASS_P (EXP)) \
+ if((EXP) && !TREE_CONSTANT (EXP)) \
mark_visited (EXP); \
} while (0)
the name followed by "___" and the specified suffix. */
extern tree concat_name (tree gnu_name, const char *suffix);
-/* Highest number in the front-end node table. */
-extern int max_gnat_nodes;
-
-/* Current node being treated, in case abort called. */
-extern Node_Id error_gnat_node;
-
-/* True when gigi is being called on an analyzed but unexpanded
- tree, and the only purpose of the call is to properly annotate
- types with representation information. */
+/* If true, then gigi is being called on an analyzed but unexpanded tree, and
+ the only purpose of the call is to properly annotate types with
+ representation information. */
extern bool type_annotate_only;
-/* Current file name without path. */
+/* Current file name without path */
extern const char *ref_filename;
/* This structure must be kept synchronized with Call_Back_End. */
};
/* This is the main program of the back-end. It sets up all the table
- structures and then generates code. */
-extern void gigi (Node_Id gnat_root, int max_gnat_node,
- int number_name ATTRIBUTE_UNUSED,
+ structures and then generates code.
+
+ ??? Needs parameter descriptions */
+
+extern void gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
struct Node *nodes_ptr, Node_Id *next_node_ptr,
Node_Id *prev_node_ptr, struct Elist_Header *elists_ptr,
struct Elmt_Item *elmts_ptr,
/* Post an error message. MSG is the error message, properly annotated.
NODE is the node at which to post the error and the node to use for the
- '&' substitution. */
+ "&" substitution. */
extern void post_error (const char *msg, Node_Id node);
-/* Similar to post_error, but NODE is the node at which to post the error and
- ENT is the node to use for the '&' substitution. */
+/* Similar, but NODE is the node at which to post the error and ENT
+ is the node to use for the "&" substitution. */
extern void post_error_ne (const char *msg, Node_Id node, Entity_Id ent);
-/* Similar to post_error_ne, but NUM is the number to use for the '^'. */
+/* Similar, but NODE is the node at which to post the error, ENT is the node
+ to use for the "&" substitution, and N is the number to use for the ^. */
extern void post_error_ne_num (const char *msg, Node_Id node, Entity_Id ent,
- int num);
+ int n);
-/* Similar to post_error_ne, but T is a GCC tree representing the number to
- write. If T represents a constant, the text inside curly brackets in
- MSG will be output (presumably including a '^'). Otherwise it will not
- be output and the text inside square brackets will be output instead. */
+/* Similar to post_error_ne_num, but T is a GCC tree representing the number
+ to write. If the tree represents a constant that fits within a
+ host integer, the text inside curly brackets in MSG will be output
+ (presumably including a '^'). Otherwise that text will not be output
+ and the text inside square brackets will be output instead. */
extern void post_error_ne_tree (const char *msg, Node_Id node, Entity_Id ent,
tree t);
-/* Similar to post_error_ne_tree, but NUM is a second integer to write. */
+/* Similar to post_error_ne_tree, except that NUM is a second
+ integer to write in the message. */
extern void post_error_ne_tree_2 (const char *msg, Node_Id node, Entity_Id ent,
tree t, int num);
if none. */
extern tree get_exception_label (char kind);
+/* Current node being treated, in case gigi_abort or Check_Elaboration_Code
+ called. */
+extern Node_Id error_gnat_node;
+
+/* Highest number in the front-end node table. */
+extern int max_gnat_nodes;
+
/* If nonzero, pretend we are allocating at global level. */
extern int force_global;
/* Type declaration node <==> typedef virtual void *T() */
ADT_fdesc_type,
- /* Null pointer for above type. */
+ /* Null pointer for above type */
ADT_null_fdesc,
- /* Value 1 in signed bitsizetype. */
- ADT_sbitsize_one_node,
-
- /* Value BITS_PER_UNIT in signed bitsizetype. */
- ADT_sbitsize_unit_node,
-
/* Function declaration nodes for run-time functions for allocating memory.
Ada allocators cause calls to these functions to be generated. Malloc32
is used only on 64bit systems needing to allocate 32bit memory. */
#define ptr_void_ftype gnat_std_decls[(int) ADT_ptr_void_ftype]
#define fdesc_type_node gnat_std_decls[(int) ADT_fdesc_type]
#define null_fdesc_node gnat_std_decls[(int) ADT_null_fdesc]
-#define sbitsize_one_node gnat_std_decls[(int) ADT_sbitsize_one_node]
-#define sbitsize_unit_node gnat_std_decls[(int) ADT_sbitsize_unit_node]
#define malloc_decl gnat_std_decls[(int) ADT_malloc_decl]
#define malloc32_decl gnat_std_decls[(int) ADT_malloc32_decl]
#define free_decl gnat_std_decls[(int) ADT_free_decl]
and uses GNAT_NODE for location information. */
extern void gnat_pushdecl (tree decl, Node_Id gnat_node);
+extern void gnat_init_decl_processing (void);
extern void gnat_init_gcc_eh (void);
extern void gnat_install_builtins (void);
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);
+
/* Record DECL as a global renaming pointer. */
extern void record_global_renaming_pointer (tree decl);