summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/cpphash.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/cpphash.h')
-rw-r--r--contrib/gcc/cpphash.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/contrib/gcc/cpphash.h b/contrib/gcc/cpphash.h
new file mode 100644
index 0000000..914a12f
--- /dev/null
+++ b/contrib/gcc/cpphash.h
@@ -0,0 +1,38 @@
+/* different kinds of things that can appear in the value field
+ of a hash node. Actually, this may be useless now. */
+union hashval {
+ int ival;
+ char *cpval;
+ DEFINITION *defn;
+#if 0
+ KEYDEF *keydef;
+#endif
+};
+
+struct hashnode {
+ struct hashnode *next; /* double links for easy deletion */
+ struct hashnode *prev;
+ struct hashnode **bucket_hdr; /* also, a back pointer to this node's hash
+ chain is kept, in case the node is the head
+ of the chain and gets deleted. */
+ enum node_type type; /* type of special token */
+ int length; /* length of token, for quick comparison */
+ U_CHAR *name; /* the actual name */
+ union hashval value; /* pointer to expansion, or whatever */
+};
+
+typedef struct hashnode HASHNODE;
+
+/* Some definitions for the hash table. The hash function MUST be
+ computed as shown in hashf () below. That is because the rescan
+ loop computes the hash value `on the fly' for most tokens,
+ in order to avoid the overhead of a lot of procedure calls to
+ the hashf () function. Hashf () only exists for the sake of
+ politeness, for use when speed isn't so important. */
+
+#define HASHSIZE 1403
+static HASHNODE *hashtab[HASHSIZE];
+#define HASHSTEP(old, c) ((old << 2) + c)
+#define MAKE_POS(v) (v & 0x7fffffff) /* make number positive */
+
+extern HASHNODE* install PARAMS ((U_CHAR*,int,enum node_type, int,char*,int));
OpenPOWER on IntegriCloud