typedef struct cpp_options cpp_options;
typedef struct cpp_token cpp_token;
typedef struct cpp_string cpp_string;
-typedef struct cpp_hashnode cpp_hashnode;
+typedef struct c_common_identifier cpp_hashnode;
typedef struct cpp_macro cpp_macro;
typedef struct cpp_lexer_pos cpp_lexer_pos;
typedef struct cpp_lookahead cpp_lookahead;
union
{
- struct cpp_hashnode *node; /* An identifier. */
+ cpp_hashnode *node; /* An identifier. */
struct cpp_string str; /* A string, or number. */
unsigned int arg_no; /* Argument no. for a CPP_MACRO_ARG. */
unsigned char c; /* Character represented by CPP_OTHER. */
BT_STDC /* `__STDC__' */
};
-/* There is a slot in the hashnode for use by front ends when integrated
- with cpplib. It holds a tree (see tree.h) but we mustn't drag that
- header into every user of cpplib.h. cpplib does not do anything with
- this slot except clear it when a new node is created. */
-union tree_node;
+#include "c-rid.h"
-struct cpp_hashnode
+#define C_RID_CODE(id) (((struct c_common_identifier *) (id))->rid_code)
+
+/* The common part of an identifier node shared amongst all 3 C front
+ ends. Also used to store CPP identifiers, which are a superset of
+ identifiers in the grammatical sense. */
+struct c_common_identifier
{
- const unsigned char *name; /* Null-terminated name. */
- unsigned int hash; /* Cached hash value. */
- unsigned short length; /* Length of name excluding null. */
+ struct tree_identifier ident; /* See tree-core.h. */
unsigned short arg_index; /* Macro argument index. */
unsigned char directive_index; /* Index into directive table. */
- ENUM_BITFIELD(node_type) type : 8; /* Node type. */
- unsigned char flags; /* Node flags. */
+ ENUM_BITFIELD(rid) rid_code : 8; /* Rid code - for front ends. */
+ ENUM_BITFIELD(node_type) type : 8; /* CPP node type. */
+ unsigned char flags; /* CPP flags. */
union
{