summaryrefslogtreecommitdiff
path: root/libcpp/identifiers.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcpp/identifiers.c')
-rw-r--r--libcpp/identifiers.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/libcpp/identifiers.c b/libcpp/identifiers.c
index c22f4a714bb..41f32a2bbae 100644
--- a/libcpp/identifiers.c
+++ b/libcpp/identifiers.c
@@ -1,6 +1,6 @@
/* Hash tables for the CPP library.
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
- 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
Written by Per Bothner, 1994.
Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987
@@ -28,18 +28,18 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "cpplib.h"
#include "internal.h"
-static cpp_hashnode *alloc_node (hash_table *);
+static hashnode alloc_node (hash_table *);
/* Return an identifier node for hashtable.c. Used by cpplib except
when integrated with the C front ends. */
-static cpp_hashnode *
+static hashnode
alloc_node (hash_table *table)
{
cpp_hashnode *node;
node = XOBNEW (&table->pfile->hash_ob, cpp_hashnode);
memset (node, 0, sizeof (cpp_hashnode));
- return node;
+ return HT_NODE (node);
}
/* Set up the identifier hash table. Use TABLE if non-null, otherwise
@@ -53,7 +53,7 @@ _cpp_init_hashtable (cpp_reader *pfile, hash_table *table)
{
pfile->our_hashtable = 1;
table = ht_create (13); /* 8K (=2^13) entries. */
- table->alloc_node = (hashnode (*) (hash_table *)) alloc_node;
+ table->alloc_node = alloc_node;
_obstack_begin (&pfile->hash_ob, 0, 0,
(void *(*) (long)) xmalloc,
@@ -107,12 +107,15 @@ cpp_defined (cpp_reader *pfile, const unsigned char *str, int len)
return node && node->type == NT_MACRO;
}
+/* We don't need a proxy since the hash table's identifier comes first
+ in cpp_hashnode. However, in case this is ever changed, we have a
+ static assertion for it. */
+extern char proxy_assertion_broken[offsetof (struct cpp_hashnode, ident) == 0 ? 1 : -1];
+
/* For all nodes in the hashtable, callback CB with parameters PFILE,
the node, and V. */
void
cpp_forall_identifiers (cpp_reader *pfile, cpp_cb cb, void *v)
{
- /* We don't need a proxy since the hash table's identifier comes
- first in cpp_hashnode. */
ht_forall (pfile->hash_table, (ht_cb) cb, v);
}