aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-tree.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/c-tree.h')
-rw-r--r--gcc/c-tree.h71
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);