From aaf491c2b55c44fc41aeb42295de90caaed47571 Mon Sep 17 00:00:00 2001 From: bothner Date: Fri, 5 Dec 2003 22:50:53 +0000 Subject: [PATCH] * cppfiles.c (file_hash_hash): New static function. (hash_string_eq): Renamed static function to file_hash_eq. (_cpp_init_files): Create file_hash table with above callbacks. (cpp_included): Must use htab_find_with_hash insead of htab_find. (_cpp_find_find, make_cpp_dir): Must use htab_find_slot_with_hash. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74350 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/cppfiles.c | 33 +++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1cd3f93..67e9678 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2003-12-05 Per Bothner + * cppfiles.c (file_hash_hash): New static function. + (hash_string_eq): Renamed static function to file_hash_eq. + (_cpp_init_files): Create file_hash table with above callbacks. + (cpp_included): Must use htab_find_with_hash insead of htab_find. + (_cpp_find_find, make_cpp_dir): Must use htab_find_slot_with_hash. + +2003-12-05 Per Bothner + * line-map.h (source_location): New typedef. (fileline): Redefined as source_location. (struct line_map, linemap_add, linemap_lookup): Replace filefile diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c index 63e9921..c2d91f5 100644 --- a/gcc/cppfiles.c +++ b/gcc/cppfiles.c @@ -172,7 +172,8 @@ static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp); static void allocate_file_hash_entries (cpp_reader *pfile); static struct file_hash_entry *new_file_hash_entry (cpp_reader *pfile); static int report_missing_guard (void **slot, void *b); -static int hash_string_eq (const void *p, const void *q); +static hashval_t file_hash_hash (const void *p); +static int file_hash_eq (const void *p, const void *q); static char *read_filename_string (int ch, FILE *f); static void read_name_map (cpp_dir *dir); static char *remap_filename (cpp_reader *pfile, _cpp_file *file); @@ -367,7 +368,9 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f cpp_error (pfile, CPP_DL_ICE, "NULL directory in find_file"); hash_slot = (struct file_hash_entry **) - htab_find_slot (pfile->file_hash, fname, INSERT); + htab_find_slot_with_hash (pfile->file_hash, fname, + htab_hash_string (fname), + INSERT); /* First check the cache before we resort to memory allocation. */ entry = search_cache (*hash_slot, start_dir); @@ -797,7 +800,9 @@ make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp) cpp_dir *dir; hash_slot = (struct file_hash_entry **) - htab_find_slot (pfile->file_hash, dir_name, INSERT); + htab_find_slot_with_hash (pfile->file_hash, dir_name, + htab_hash_string (dir_name), + INSERT); /* Have we already hashed this directory? */ for (entry = *hash_slot; entry; entry = entry->next) @@ -848,7 +853,8 @@ cpp_included (cpp_reader *pfile, const char *fname) { struct file_hash_entry *entry; - entry = htab_find (pfile->file_hash, fname); + entry = htab_find_with_hash (pfile->file_hash, fname, + htab_hash_string (fname)); while (entry && (entry->start_dir == NULL || entry->u.file->err_no)) entry = entry->next; @@ -856,9 +862,24 @@ cpp_included (cpp_reader *pfile, const char *fname) return entry != NULL; } +/* Calculate the hash value of a file hash entry P. */ + +static hashval_t +file_hash_hash (const void *p) +{ + struct file_hash_entry *entry = (struct file_hash_entry *) p; + const char *hname; + if (entry->start_dir) + hname = entry->u.file->name; + else + hname = entry->u.dir->name; + + return htab_hash_string (hname); +} + /* Compare a string Q against a file hash entry P. */ static int -hash_string_eq (const void *p, const void *q) +file_hash_eq (const void *p, const void *q) { struct file_hash_entry *entry = (struct file_hash_entry *) p; const char *fname = (const char *) q; @@ -876,7 +897,7 @@ hash_string_eq (const void *p, const void *q) void _cpp_init_files (cpp_reader *pfile) { - pfile->file_hash = htab_create_alloc (127, htab_hash_string, hash_string_eq, + pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq, NULL, xcalloc, free); allocate_file_hash_entries (pfile); } -- 2.7.4