diff options
author | Per Bothner <bothner@gcc.gnu.org> | 1995-03-16 13:59:07 -0800 |
---|---|---|
committer | Per Bothner <bothner@gcc.gnu.org> | 1995-03-16 13:59:07 -0800 |
commit | 7f2935c734c36f84ab62b20a04de465e19061333 (patch) | |
tree | 0194faf594c2891f5c06b75959e9314b81c1b28c /gcc/cpphash.h | |
parent | b310a51d35b01c9ce4e617e357ade93d87cd1c90 (diff) | |
download | gcc-7f2935c734c36f84ab62b20a04de465e19061333.zip gcc-7f2935c734c36f84ab62b20a04de465e19061333.tar.gz gcc-7f2935c734c36f84ab62b20a04de465e19061333.tar.bz2 |
Initial revision
From-SVN: r9191
Diffstat (limited to 'gcc/cpphash.h')
-rw-r--r-- | gcc/cpphash.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gcc/cpphash.h b/gcc/cpphash.h new file mode 100644 index 0000000..b4d7207 --- /dev/null +++ b/gcc/cpphash.h @@ -0,0 +1,40 @@ +enum node_type; + +/* 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)); |