diff options
Diffstat (limited to 'gcc/c-tree.h')
-rw-r--r-- | gcc/c-tree.h | 71 |
1 files changed, 25 insertions, 46 deletions
diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 6da67df..bd53dbc 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -24,22 +24,21 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "c-common.h" -/* Language-dependent contents of an identifier. */ +/* Each C symbol points to three linked lists of c_binding structures. + These describe the values of the identifier in the three different + namespaces defined by the language. The contents of these lists + are private to c-decl.c. */ -/* The limbo_value is used for block level extern declarations, which need - to be type checked against subsequent extern declarations. They can't - be referenced after they fall out of scope, so they can't be global. +struct c_binding; - The rid_code field is used for keywords. It is in all - lang_identifier nodes, because some keywords are only special in a - particular context. */ +/* Language-dependent contents of an identifier. */ struct lang_identifier GTY(()) { struct c_common_identifier common_id; - tree symbol_value; - tree tag_value; - tree label_value; + struct c_binding *symbol_binding; /* vars, funcs, constants, typedefs */ + struct c_binding *tag_binding; /* struct/union/enum tags */ + struct c_binding *label_binding; /* labels */ }; /* The resulting tree type. */ @@ -64,26 +63,6 @@ struct lang_decl GTY(()) tree pending_sizes; }; -/* Macros for access to language-specific slots in an identifier. */ -/* Each of these slots contains a DECL node or null. */ - -/* The value of the identifier in the namespace of "ordinary identifiers" - (data objects, enum constants, functions, typedefs). */ -#define IDENTIFIER_SYMBOL_VALUE(NODE) \ - (((struct lang_identifier *) (NODE))->symbol_value) -/* The value of the identifier in the namespace of struct, union, - and enum tags. */ -#define IDENTIFIER_TAG_VALUE(NODE) \ - (((struct lang_identifier *) (NODE))->tag_value) -/* The value of the identifier in the namespace of labels. */ -#define IDENTIFIER_LABEL_VALUE(NODE) \ - (((struct lang_identifier *) (NODE))->label_value) - -/* In identifiers, C uses the following fields in a special way: - TREE_PUBLIC to record that there was a previous local extern decl. - TREE_USED to record that such a decl was used. - TREE_ADDRESSABLE to record that the address of such a decl was used. */ - /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */ #define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE) @@ -128,11 +107,13 @@ struct lang_type GTY(()) /* For a FUNCTION_DECL, nonzero if it was an implicit declaration. */ #define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP) -/* Nonzero for a declaration of an external object which is not - currently in scope. This is either a built-in declaration of - a library function, before a real declaration has been seen, - or a declaration that appeared in an inner scope that has ended. */ -#define C_DECL_INVISIBLE(EXP) DECL_LANG_FLAG_3 (EXP) +/* For any decl, nonzero if it is bound in the externals scope and + pop_scope mustn't chain it into any higher block. */ +#define C_DECL_IN_EXTERNAL_SCOPE(EXP) DECL_LANG_FLAG_3 (EXP) + +/* For FUNCTION_DECLs, evaluates true if the decl is built-in but has + been declared. */ +#define C_DECL_DECLARED_BUILTIN(EXP) DECL_LANG_FLAG_4 (EXP) /* Nonzero for a decl which either doesn't exist or isn't a prototype. N.B. Could be simplified if all built-in decls had complete prototypes @@ -147,11 +128,6 @@ struct lang_type GTY(()) without prototypes. */ #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_BINFO (NODE) -/* Values for the first parameter to poplevel. */ -#define KEEP_NO 0 -#define KEEP_YES 1 -#define KEEP_MAYBE 2 - /* Save and restore the variables in this file and elsewhere that keep track of the progress of compilation of the current function. Used for nested functions. */ @@ -181,9 +157,9 @@ extern int c_in_case_stmt; extern int global_bindings_p (void); extern tree getdecls (void); -extern void pushlevel (int); +extern void push_scope (void); +extern tree pop_scope (void); extern void insert_block (tree); -extern void set_block (tree); extern tree pushdecl (tree); extern void c_expand_body (tree); @@ -203,12 +179,11 @@ extern void finish_decl (tree, tree, tree); extern tree finish_enum (tree, tree, tree); extern void finish_function (void); extern tree finish_struct (tree, tree, tree); -extern tree get_parm_info (int); +extern tree get_parm_info (bool); extern tree grokfield (tree, tree, tree); extern tree groktypename (tree); extern tree groktypename_in_parm_context (tree); extern tree implicitly_declare (tree); -extern int in_parm_level_p (void); extern void keep_next_level (void); extern tree lookup_name (tree); extern void pending_xref_error (void); @@ -216,7 +191,6 @@ extern void c_push_function_context (struct function *); extern void c_pop_function_context (struct function *); extern void push_parm_decl (tree); extern tree pushdecl_top_level (tree); -extern void pushtag (tree, tree); extern tree set_array_declarator_type (tree, tree, int); extern void shadow_tag (tree); extern void shadow_tag_warned (tree, int); @@ -230,7 +204,6 @@ extern tree c_begin_compound_stmt (void); extern void c_expand_decl_stmt (tree); extern void c_static_assembler_name (tree); extern tree make_pointer_declarator (tree, tree); -extern void merge_translation_unit_decls (void); /* in c-objc-common.c */ extern int c_disregard_inline_limits (tree); @@ -257,6 +230,7 @@ enum { }; extern tree require_complete_type (tree); +extern int same_translation_unit_p (tree, tree); extern int comptypes (tree, tree, int); extern tree c_size_in_bytes (tree); extern bool c_mark_addressable (tree); @@ -313,6 +287,11 @@ extern int current_function_returns_abnormally; extern int system_header_p; +/* True means global_bindings_p should return false even if the scope stack + says we are in file scope. */ + +extern bool c_override_global_bindings_to_false; + /* In c-decl.c */ extern void c_finish_incomplete_decl (tree); extern void *get_current_scope (void); |