cpphash.c (install): Rename to cpp_install, add cpp_reader* first argument.
1999-02-25 17:14 -0500 Zack Weinberg <zack@rabi.columbia.edu> * cpphash.c (install): Rename to cpp_install, add cpp_reader* first argument. All callers changed. (hashtab): Removed. (cpp_lookup, cpp_install): Change all refs to hashtab to pfile->hashtab. (cpp_hash_cleanup): Removed. * cpphash.h: Adjust prototypes. * cpplib.h (struct cpp_reader): Add hashtab pointer. * cppinit.c (cpp_reader_init): Also allocate space for the hashtab. (cpp_cleanup): Delete all macros and free the hashtab. From-SVN: r25441
This commit is contained in:
parent
9ab70a9bd7
commit
122ae89b14
@ -1,3 +1,17 @@
|
||||
1999-02-25 17:14 -0500 Zack Weinberg <zack@rabi.columbia.edu>
|
||||
|
||||
* cpphash.c (install): Rename to cpp_install, add cpp_reader*
|
||||
first argument. All callers changed.
|
||||
(hashtab): Removed.
|
||||
(cpp_lookup, cpp_install): Change all refs to hashtab to
|
||||
pfile->hashtab.
|
||||
(cpp_hash_cleanup): Removed.
|
||||
* cpphash.h: Adjust prototypes.
|
||||
* cpplib.h (struct cpp_reader): Add hashtab pointer.
|
||||
* cppinit.c (cpp_reader_init): Also allocate space for the
|
||||
hashtab.
|
||||
(cpp_cleanup): Delete all macros and free the hashtab.
|
||||
|
||||
Thu Feb 25 21:52:54 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
|
||||
|
||||
* sh.h (PASS_IN_REG_P): For TARGET_HITACHI, don't pass structures
|
||||
|
@ -27,8 +27,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#include "cpplib.h"
|
||||
#include "cpphash.h"
|
||||
|
||||
static HASHNODE *hashtab[HASHSIZE];
|
||||
|
||||
static int comp_def_part PARAMS ((int, U_CHAR *, int, U_CHAR *,
|
||||
int, int));
|
||||
static int change_newlines PARAMS ((U_CHAR *, int));
|
||||
@ -104,7 +102,7 @@ hashf (name, len, hashsize)
|
||||
}
|
||||
|
||||
/* Find the most recent hash node for name "name" (ending with first
|
||||
non-identifier char) installed by install
|
||||
non-identifier char) installed by cpp_install
|
||||
|
||||
If LEN is >= 0, it is the length of the name.
|
||||
Otherwise, compute the length by scanning the entire name.
|
||||
@ -131,7 +129,7 @@ cpp_lookup (pfile, name, len, hash)
|
||||
if (hash < 0)
|
||||
hash = hashf (name, len, HASHSIZE);
|
||||
|
||||
bucket = hashtab[hash];
|
||||
bucket = pfile->hashtab[hash];
|
||||
while (bucket)
|
||||
{
|
||||
if (bucket->length == len && strncmp (bucket->name, name, len) == 0)
|
||||
@ -191,7 +189,7 @@ delete_macro (hp)
|
||||
/* Install a name in the main hash table, even if it is already there.
|
||||
Name stops with first non alphanumeric, except leading '#'.
|
||||
Caller must check against redefinition if that is desired.
|
||||
delete_macro () removes things installed by install () in fifo order.
|
||||
delete_macro () removes things installed by cpp_install () in fifo order.
|
||||
this is important because of the `defined' special symbol used
|
||||
in #if, and also if pushdef/popdef directives are ever implemented.
|
||||
|
||||
@ -202,7 +200,8 @@ delete_macro (hp)
|
||||
Otherwise, compute the hash code. */
|
||||
|
||||
HASHNODE *
|
||||
install (name, len, type, value, hash)
|
||||
cpp_install (pfile, name, len, type, value, hash)
|
||||
cpp_reader *pfile;
|
||||
U_CHAR *name;
|
||||
int len;
|
||||
enum node_type type;
|
||||
@ -227,9 +226,9 @@ install (name, len, type, value, hash)
|
||||
i = sizeof (HASHNODE) + len + 1;
|
||||
hp = (HASHNODE *) xmalloc (i);
|
||||
bucket = hash;
|
||||
hp->bucket_hdr = &hashtab[bucket];
|
||||
hp->next = hashtab[bucket];
|
||||
hashtab[bucket] = hp;
|
||||
hp->bucket_hdr = &pfile->hashtab[bucket];
|
||||
hp->next = pfile->hashtab[bucket];
|
||||
pfile->hashtab[bucket] = hp;
|
||||
hp->prev = NULL;
|
||||
if (hp->next != NULL)
|
||||
hp->next->prev = hp;
|
||||
@ -242,18 +241,6 @@ install (name, len, type, value, hash)
|
||||
return hp;
|
||||
}
|
||||
|
||||
void
|
||||
cpp_hash_cleanup (pfile)
|
||||
cpp_reader *pfile ATTRIBUTE_UNUSED;
|
||||
{
|
||||
register int i;
|
||||
for (i = HASHSIZE; --i >= 0;)
|
||||
{
|
||||
while (hashtab[i])
|
||||
delete_macro (hashtab[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
macro_cleanup (pbuf, pfile)
|
||||
cpp_buffer *pbuf;
|
||||
|
@ -45,18 +45,16 @@ typedef struct hashnode HASHNODE;
|
||||
the hashf () function. Hashf () only exists for the sake of
|
||||
politeness, for use when speed isn't so important. */
|
||||
|
||||
#define HASHSIZE 1403
|
||||
#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,
|
||||
const char *, int));
|
||||
extern int hashf PARAMS ((const U_CHAR *, int, int));
|
||||
extern void delete_macro PARAMS ((HASHNODE *));
|
||||
extern HASHNODE *cpp_install PARAMS ((cpp_reader *, U_CHAR *, int,
|
||||
enum node_type, const char *, int));
|
||||
extern int hashf PARAMS ((const U_CHAR *, int, int));
|
||||
extern void delete_macro PARAMS ((HASHNODE *));
|
||||
|
||||
extern MACRODEF create_definition PARAMS ((U_CHAR *, U_CHAR *,
|
||||
cpp_reader *, int));
|
||||
extern int compare_defs PARAMS ((cpp_reader *, DEFINITION *,
|
||||
DEFINITION *));
|
||||
extern void macroexpand PARAMS ((cpp_reader *, HASHNODE *));
|
||||
extern void cpp_hash_cleanup PARAMS ((cpp_reader *));
|
||||
|
@ -452,6 +452,8 @@ cpp_reader_init (pfile)
|
||||
pfile->token_buffer_size = 200;
|
||||
pfile->token_buffer = (U_CHAR *) xmalloc (pfile->token_buffer_size);
|
||||
CPP_SET_WRITTEN (pfile, 0);
|
||||
|
||||
pfile->hashtab = (HASHNODE **) xcalloc (HASHSIZE, sizeof (HASHNODE *));
|
||||
}
|
||||
|
||||
/* Free resources used by PFILE.
|
||||
@ -500,7 +502,12 @@ cpp_cleanup (pfile)
|
||||
pfile->all_include_files[i] = 0;
|
||||
}
|
||||
|
||||
cpp_hash_cleanup (pfile);
|
||||
for (i = HASHSIZE; --i >= 0;)
|
||||
{
|
||||
while (pfile->hashtab[i])
|
||||
delete_macro (pfile->hashtab[i]);
|
||||
}
|
||||
free (pfile->hashtab);
|
||||
}
|
||||
|
||||
|
||||
@ -510,31 +517,31 @@ initialize_builtins (pfile)
|
||||
cpp_reader *pfile;
|
||||
{
|
||||
#define NAME(str) (U_CHAR *)str, sizeof str - 1
|
||||
install (NAME("__TIME__"), T_TIME, 0, -1);
|
||||
install (NAME("__DATE__"), T_DATE, 0, -1);
|
||||
install (NAME("__FILE__"), T_FILE, 0, -1);
|
||||
install (NAME("__BASE_FILE__"), T_BASE_FILE, 0, -1);
|
||||
install (NAME("__LINE__"), T_SPECLINE, 0, -1);
|
||||
install (NAME("__INCLUDE_LEVEL__"), T_INCLUDE_LEVEL, 0, -1);
|
||||
install (NAME("__VERSION__"), T_VERSION, 0, -1);
|
||||
cpp_install (pfile, NAME("__TIME__"), T_TIME, 0, -1);
|
||||
cpp_install (pfile, NAME("__DATE__"), T_DATE, 0, -1);
|
||||
cpp_install (pfile, NAME("__FILE__"), T_FILE, 0, -1);
|
||||
cpp_install (pfile, NAME("__BASE_FILE__"), T_BASE_FILE, 0, -1);
|
||||
cpp_install (pfile, NAME("__LINE__"), T_SPECLINE, 0, -1);
|
||||
cpp_install (pfile, NAME("__INCLUDE_LEVEL__"), T_INCLUDE_LEVEL, 0, -1);
|
||||
cpp_install (pfile, NAME("__VERSION__"), T_VERSION, 0, -1);
|
||||
#ifndef NO_BUILTIN_SIZE_TYPE
|
||||
install (NAME("__SIZE_TYPE__"), T_CONST, SIZE_TYPE, -1);
|
||||
cpp_install (pfile, NAME("__SIZE_TYPE__"), T_CONST, SIZE_TYPE, -1);
|
||||
#endif
|
||||
#ifndef NO_BUILTIN_PTRDIFF_TYPE
|
||||
install (NAME("__PTRDIFF_TYPE__ "), T_CONST, PTRDIFF_TYPE, -1);
|
||||
cpp_install (pfile, NAME("__PTRDIFF_TYPE__ "), T_CONST, PTRDIFF_TYPE, -1);
|
||||
#endif
|
||||
install (NAME("__WCHAR_TYPE__"), T_CONST, WCHAR_TYPE, -1);
|
||||
install (NAME("__USER_LABEL_PREFIX__"), T_CONST, user_label_prefix, -1);
|
||||
install (NAME("__REGISTER_PREFIX__"), T_CONST, REGISTER_PREFIX, -1);
|
||||
cpp_install (pfile, NAME("__WCHAR_TYPE__"), T_CONST, WCHAR_TYPE, -1);
|
||||
cpp_install (pfile, NAME("__USER_LABEL_PREFIX__"), T_CONST, user_label_prefix, -1);
|
||||
cpp_install (pfile, NAME("__REGISTER_PREFIX__"), T_CONST, REGISTER_PREFIX, -1);
|
||||
if (!CPP_TRADITIONAL (pfile))
|
||||
{
|
||||
install (NAME("__STDC__"), T_STDC, 0, -1);
|
||||
cpp_install (pfile, NAME("__STDC__"), T_STDC, 0, -1);
|
||||
#if 0
|
||||
if (CPP_OPTIONS (pfile)->c9x)
|
||||
install (NAME("__STDC_VERSION__"),T_CONST, "199909L", -1);
|
||||
cpp_install (pfile, NAME("__STDC_VERSION__"),T_CONST, "199909L", -1);
|
||||
else
|
||||
#endif
|
||||
install (NAME("__STDC_VERSION__"),T_CONST, "199409L", -1);
|
||||
cpp_install (pfile, NAME("__STDC_VERSION__"),T_CONST, "199409L", -1);
|
||||
}
|
||||
#undef NAME
|
||||
|
||||
|
10
gcc/cpplib.c
10
gcc/cpplib.c
@ -657,8 +657,8 @@ do_define (pfile, keyword)
|
||||
that for this new definition now. */
|
||||
if (CPP_OPTIONS (pfile)->debug_output && keyword)
|
||||
pass_thru_directive (macro, end, pfile, keyword);
|
||||
install (mdef.symnam, mdef.symlen, T_MACRO,
|
||||
(char *) mdef.defn, hashcode);
|
||||
cpp_install (pfile, mdef.symnam, mdef.symlen, T_MACRO,
|
||||
(char *) mdef.defn, hashcode);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -2845,7 +2845,7 @@ do_assert (pfile, keyword)
|
||||
|
||||
base = cpp_lookup (pfile, sym, baselen, -1);
|
||||
if (! base)
|
||||
base = install (sym, baselen, T_ASSERT, 0, -1);
|
||||
base = cpp_install (pfile, sym, baselen, T_ASSERT, 0, -1);
|
||||
else if (base->type != T_ASSERT)
|
||||
{
|
||||
/* Token clash - but with what?! */
|
||||
@ -2854,8 +2854,8 @@ do_assert (pfile, keyword)
|
||||
goto error;
|
||||
}
|
||||
|
||||
this = install (sym, thislen, T_ASSERT,
|
||||
(char *)base->value.aschain, -1);
|
||||
this = cpp_install (pfile, sym, thislen, T_ASSERT,
|
||||
(char *)base->value.aschain, -1);
|
||||
base->value.aschain = this;
|
||||
|
||||
pfile->limit = sym; /* Pop */
|
||||
|
@ -181,6 +181,10 @@ struct cpp_reader
|
||||
/* Current depth of buffer stack. */
|
||||
int buffer_stack_depth;
|
||||
|
||||
/* Hash table of macros and assertions. See cpphash.c */
|
||||
#define HASHSIZE 1403
|
||||
struct hashnode **hashtab;
|
||||
|
||||
/* Hash table of other included files. See cppfiles.c */
|
||||
#define ALL_INCLUDE_HASHSIZE 71
|
||||
struct include_hash *all_include_files[ALL_INCLUDE_HASHSIZE];
|
||||
@ -245,10 +249,6 @@ struct cpp_reader
|
||||
|
||||
/* Number of bytes since the last newline. */
|
||||
int deps_column;
|
||||
|
||||
#ifdef __cplusplus
|
||||
~cpp_reader () { cpp_cleanup (this); }
|
||||
#endif
|
||||
};
|
||||
|
||||
#define CPP_FATAL_LIMIT 1000
|
||||
|
Loading…
Reference in New Issue
Block a user