/* Codes that identify the various built in functions
so that expand_call can identify them quickly. */
-#define DEF_BUILTIN(x) x,
+#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA) ENUM,
enum built_in_function
{
#include "builtins.def"
TREE_OVERFLOW in
INTEGER_CST, REAL_CST, COMPLEX_CST
TREE_PUBLIC in
- VAR_DECL or FUNCTION_DECL
+ VAR_DECL or FUNCTION_DECL or IDENTIFIER_NODE
TREE_VIA_PUBLIC in
TREE_LIST or TREE_VEC
EXPR_WFL_EMIT_LINE_NOTE in
bounded_flag:
TREE_BOUNDED in
- expressions, VAR_DECL, PARM_DECL, FIELD_DECL, FUNCTION_DECL
+ expressions, VAR_DECL, PARM_DECL, FIELD_DECL, FUNCTION_DECL,
+ IDENTIFIER_NODE
TYPE_BOUNDED in
..._TYPE
*/
/* In a VAR_DECL or FUNCTION_DECL,
nonzero means name is to be accessible from outside this module.
- In an identifier node, nonzero means an external declaration
+ In an IDENTIFIER_NODE, nonzero means an external declaration
accessible from outside this module was previously seen
for this name in an inner scope. */
#define TREE_PUBLIC(NODE) ((NODE)->common.public_flag)
union tree_node *imag;
};
\f
+#include "hashtable.h"
+
/* Define fields and accessors for some special-purpose tree nodes. */
-#define IDENTIFIER_LENGTH(NODE) (IDENTIFIER_NODE_CHECK (NODE)->identifier.length)
-#define IDENTIFIER_POINTER(NODE) (IDENTIFIER_NODE_CHECK (NODE)->identifier.pointer)
+#define IDENTIFIER_LENGTH(NODE) \
+ (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
+#define IDENTIFIER_POINTER(NODE) \
+ ((char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
+
+/* Translate a hash table identifier pointer to a tree_identifier
+ pointer, and vice versa. */
+
+#define HT_IDENT_TO_GCC_IDENT(NODE) \
+ ((tree) ((char *) (NODE) - sizeof (struct tree_common)))
+#define GCC_IDENT_TO_HT_IDENT(NODE) \
+ (&((struct tree_identifier *) (NODE))->id)
struct tree_identifier
{
struct tree_common common;
- int length;
- const char *pointer;
+ struct ht_identifier id;
};
/* In a TREE_LIST node. */
extern tree maybe_get_identifier PARAMS ((const char *));
-/* Look up an identifier with the name TEXT, replace its identifier
- node with NODE, and return the old identifier node. This is used
- by languages which need to enable and disable keywords based on
- context; e.g. see remember_protocol_qualifiers in objc/objc-act.c. */
-
-extern tree set_identifier PARAMS ((const char *, tree));
-
/* Construct various types of nodes. */
#define build_int_2(LO,HI) \
extern tree merge_attributes PARAMS ((tree, tree));
-/* Given a type node TYPE and a TYPE_QUALIFIER_SET, return a type for
- the same kind of data as TYPE describes. Variants point to the
- "main variant" (which has no qualifiers set) via TYPE_MAIN_VARIANT,
- and it points to a chain of other variants so that duplicate
- variants are never made. Only main variants should ever appear as
- types of expressions. */
+/* Return a version of the TYPE, qualified as indicated by the
+ TYPE_QUALS, if one exists. If no qualified version exists yet,
+ return NULL_TREE. */
+
+extern tree get_qualified_type PARAMS ((tree, int));
+
+/* Like get_qualified_type, but creates the type if it does not
+ exist. This function never returns NULL_TREE. */
extern tree build_qualified_type PARAMS ((tree, int));
unsigned int record_align;
/* The alignment of the record so far, not including padding, in bits. */
unsigned int unpacked_align;
+ /* The alignment of the record so far, allowing for the record to be
+ padded only at the end, in bits. */
+ unsigned int unpadded_align;
/* The static variables (i.e., class variables, as opposed to
instance variables) encountered in T. */
tree pending_statics;
int packed_maybe_necessary;
} *record_layout_info;
+extern void set_lang_adjust_rli PARAMS ((void (*) PARAMS
+ ((record_layout_info))));
extern record_layout_info start_record_layout PARAMS ((tree));
extern tree bit_from_pos PARAMS ((tree, tree));
extern tree byte_from_pos PARAMS ((tree, tree));
/* Current line number in input file. */
extern int lineno;
-/* Nonzero for -pedantic switch: warn about anything
- that standard C forbids. */
-extern int pedantic;
-
/* Nonzero means lvalues are limited to those valid in pedantic ANSI C.
Zero means allow extended lvalues. */
unsigned char *, int));
extern tree get_callee_fndecl PARAMS ((tree));
extern void set_decl_assembler_name PARAMS ((tree));
+extern int type_num_arguments PARAMS ((tree));
\f
/* In stmt.c */
extern void end_cleanup_deferral PARAMS ((void));
extern int is_body_block PARAMS ((tree));
-extern void mark_block_as_eh_region PARAMS ((void));
-extern void mark_block_as_not_eh_region PARAMS ((void));
-extern int is_eh_region PARAMS ((void));
extern int conditional_context PARAMS ((void));
extern tree last_cleanup_this_contour PARAMS ((void));
-extern int expand_dhc_cleanup PARAMS ((tree));
-extern int expand_dcc_cleanup PARAMS ((tree));
extern void expand_start_case PARAMS ((int, tree, tree,
const char *));
extern void expand_end_case PARAMS ((tree));
#endif
extern void expand_function_end PARAMS ((const char *, int, int));
extern void expand_function_start PARAMS ((tree, int));
+extern void expand_pending_sizes PARAMS ((tree));
extern int real_onep PARAMS ((tree));
extern int real_twop PARAMS ((tree));
-extern void start_identifier_warnings PARAMS ((void));
extern void gcc_obstack_init PARAMS ((struct obstack *));
extern void init_obstacks PARAMS ((void));
extern void build_common_tree_nodes PARAMS ((int));