read.c: use string hash from hash.h for po_hash
po_hash code duplicates the str_hash code in hash.h for no good reason. * read.c (struct po_entry, po_entry_t): Delete. (hash_po_entry, eq_po_entry, po_entry_alloc, po_entry_find): Delete. (pop_insert): Use str_hash_insert. (pobegin): Use str_htab_create. (read_a_source_file, s_macro): Use str_hash_find.
This commit is contained in:
parent
9f6e589719
commit
d1cffdc364
1 changed files with 7 additions and 56 deletions
63
gas/read.c
63
gas/read.c
|
@ -295,53 +295,7 @@ address_bytes (void)
|
|||
|
||||
/* Set up pseudo-op tables. */
|
||||
|
||||
struct po_entry
|
||||
{
|
||||
const char *poc_name;
|
||||
|
||||
const pseudo_typeS *pop;
|
||||
};
|
||||
|
||||
typedef struct po_entry po_entry_t;
|
||||
|
||||
/* Hash function for a po_entry. */
|
||||
|
||||
static hashval_t
|
||||
hash_po_entry (const void *e)
|
||||
{
|
||||
const po_entry_t *entry = (const po_entry_t *) e;
|
||||
return htab_hash_string (entry->poc_name);
|
||||
}
|
||||
|
||||
/* Equality function for a po_entry. */
|
||||
|
||||
static int
|
||||
eq_po_entry (const void *a, const void *b)
|
||||
{
|
||||
const po_entry_t *ea = (const po_entry_t *) a;
|
||||
const po_entry_t *eb = (const po_entry_t *) b;
|
||||
|
||||
return strcmp (ea->poc_name, eb->poc_name) == 0;
|
||||
}
|
||||
|
||||
static po_entry_t *
|
||||
po_entry_alloc (const char *poc_name, const pseudo_typeS *pop)
|
||||
{
|
||||
po_entry_t *entry = XNEW (po_entry_t);
|
||||
entry->poc_name = poc_name;
|
||||
entry->pop = pop;
|
||||
return entry;
|
||||
}
|
||||
|
||||
static const pseudo_typeS *
|
||||
po_entry_find (htab_t table, const char *poc_name)
|
||||
{
|
||||
po_entry_t needle = { poc_name, NULL };
|
||||
po_entry_t *entry = htab_find (table, &needle);
|
||||
return entry != NULL ? entry->pop : NULL;
|
||||
}
|
||||
|
||||
static struct htab *po_hash;
|
||||
static htab_t po_hash;
|
||||
|
||||
static const pseudo_typeS potable[] = {
|
||||
{"abort", s_abort, 0},
|
||||
|
@ -563,10 +517,8 @@ pop_insert (const pseudo_typeS *table)
|
|||
const pseudo_typeS *pop;
|
||||
for (pop = table; pop->poc_name; pop++)
|
||||
{
|
||||
po_entry_t *elt = po_entry_alloc (pop->poc_name, pop);
|
||||
if (htab_insert (po_hash, elt, 0) != NULL)
|
||||
if (str_hash_insert (po_hash, pop->poc_name, pop, 0) != NULL)
|
||||
{
|
||||
free (elt);
|
||||
if (!pop_override_ok)
|
||||
as_fatal (_("error constructing %s pseudo-op table"),
|
||||
pop_table_name);
|
||||
|
@ -589,8 +541,7 @@ pop_insert (const pseudo_typeS *table)
|
|||
static void
|
||||
pobegin (void)
|
||||
{
|
||||
po_hash = htab_create_alloc (16, hash_po_entry, eq_po_entry, NULL,
|
||||
xcalloc, xfree);
|
||||
po_hash = str_htab_create ();
|
||||
|
||||
/* Do the target-specific pseudo ops. */
|
||||
pop_table_name = "md";
|
||||
|
@ -1099,7 +1050,7 @@ read_a_source_file (const char *name)
|
|||
{
|
||||
/* The MRI assembler uses pseudo-ops without
|
||||
a period. */
|
||||
pop = po_entry_find (po_hash, s);
|
||||
pop = str_hash_find (po_hash, s);
|
||||
if (pop != NULL && pop->poc_handler == NULL)
|
||||
pop = NULL;
|
||||
}
|
||||
|
@ -1114,7 +1065,7 @@ read_a_source_file (const char *name)
|
|||
already know that the pseudo-op begins with a '.'. */
|
||||
|
||||
if (pop == NULL)
|
||||
pop = po_entry_find (po_hash, s + 1);
|
||||
pop = str_hash_find (po_hash, s + 1);
|
||||
if (pop && !pop->poc_handler)
|
||||
pop = NULL;
|
||||
|
||||
|
@ -2717,10 +2668,10 @@ s_macro (int ignore ATTRIBUTE_UNUSED)
|
|||
}
|
||||
|
||||
if (((NO_PSEUDO_DOT || flag_m68k_mri)
|
||||
&& po_entry_find (po_hash, name) != NULL)
|
||||
&& str_hash_find (po_hash, name) != NULL)
|
||||
|| (!flag_m68k_mri
|
||||
&& *name == '.'
|
||||
&& po_entry_find (po_hash, name + 1) != NULL))
|
||||
&& str_hash_find (po_hash, name + 1) != NULL))
|
||||
as_warn_where (file,
|
||||
line,
|
||||
_("attempt to redefine pseudo-op `%s' ignored"),
|
||||
|
|
Loading…
Add table
Reference in a new issue