diff options
author | Martin Liska <mliska@suse.cz> | 2020-08-15 19:47:01 +0200 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-08-20 10:53:40 +0930 |
commit | 2b272f449e8664977d0aafba82c416b27b5f2d6f (patch) | |
tree | 7ea3e404d7c0b07aeac6fb4f3ae2e142d23fd534 /gas/macro.h | |
parent | abebb03c3af215d7542f5e6b71d78823b15220d5 (diff) | |
download | gdb-2b272f449e8664977d0aafba82c416b27b5f2d6f.zip gdb-2b272f449e8664977d0aafba82c416b27b5f2d6f.tar.gz gdb-2b272f449e8664977d0aafba82c416b27b5f2d6f.tar.bz2 |
Use libiberty hash in gas/macro.c.
* config/tc-iq2000.c (iq2000_add_macro): Use htab hash table.
* macro.c (struct hash_control): Use htab.
(macro_init): Likewise.
(do_formals): Likewise.
(free_macro): Likewise.
(define_macro): Likewise.
(sub_actual): Likewise.
(macro_expand_body): Likewise.
(macro_expand): Likewise.
(check_macro): Likewise.
(delete_macro): Likewise.
(expand_irp): Likewise.
* macro.h (struct macro_hash_entry): New struct.
(hash_macro_entry): New.
(eq_macro_entry): Likewise.
(macro_entry_alloc): Likewise.
(macro_entry_find): Likewise.
(struct formal_hash_entry): Likewise.
(hash_formal_entry): Likewise.
(eq_formal_entry): Likewise.
(formal_entry_alloc): Likewise.
(formal_entry_find): Likewise.
Diffstat (limited to 'gas/macro.h')
-rw-r--r-- | gas/macro.h | 94 |
1 files changed, 92 insertions, 2 deletions
diff --git a/gas/macro.h b/gas/macro.h index e9bd9e1..532642e 100644 --- a/gas/macro.h +++ b/gas/macro.h @@ -63,7 +63,7 @@ typedef struct macro_struct sb sub; /* Substitution text. */ int formal_count; /* Number of formal args. */ formal_entry *formals; /* Pointer to list of formal_structs. */ - struct hash_control *formal_hash; /* Hash table of formals. */ + struct htab *formal_hash; /* Hash table of formals. */ const char *name; /* Macro name. */ const char *file; /* File the macro was defined in. */ unsigned int line; /* Line number of definition. */ @@ -79,7 +79,97 @@ extern int macro_nest; /* The macro hash table. */ -extern struct hash_control *macro_hash; +extern struct htab *macro_hash; + +struct macro_hash_entry +{ + const char *name; + macro_entry *macro; +}; + +typedef struct macro_hash_entry macro_hash_entry_t; + +/* Hash function for a macro_hash_entry. */ + +static inline hashval_t +hash_macro_entry (const void *e) +{ + const macro_hash_entry_t *entry = (const macro_hash_entry_t *) e; + return htab_hash_string (entry->name); +} + +/* Equality function for a macro_hash_entry. */ + +static inline int +eq_macro_entry (const void *a, const void *b) +{ + const macro_hash_entry_t *ea = (const macro_hash_entry_t *) a; + const macro_hash_entry_t *eb = (const macro_hash_entry_t *) b; + + return strcmp (ea->name, eb->name) == 0; +} + +static inline macro_hash_entry_t * +macro_entry_alloc (const char *name, macro_entry *macro) +{ + macro_hash_entry_t *entry = XNEW (macro_hash_entry_t); + entry->name = name; + entry->macro = macro; + return entry; +} + +static inline macro_entry * +macro_entry_find (htab_t table, const char *name) +{ + macro_hash_entry_t needle = { name, NULL }; + macro_hash_entry_t *entry = htab_find (table, &needle); + return entry != NULL ? entry->macro : NULL; +} + +struct formal_hash_entry +{ + const char *name; + formal_entry *formal; +}; + +typedef struct formal_hash_entry formal_hash_entry_t; + +/* Hash function for a macro_hash_entry. */ + +static inline hashval_t +hash_formal_entry (const void *e) +{ + const formal_hash_entry_t *entry = (const formal_hash_entry_t *) e; + return htab_hash_string (entry->name); +} + +/* Equality function for a formal_hash_entry. */ + +static inline int +eq_formal_entry (const void *a, const void *b) +{ + const formal_hash_entry_t *ea = (const formal_hash_entry_t *) a; + const formal_hash_entry_t *eb = (const formal_hash_entry_t *) b; + + return strcmp (ea->name, eb->name) == 0; +} + +static inline formal_hash_entry_t * +formal_entry_alloc (const char *name, formal_entry *formal) +{ + formal_hash_entry_t *entry = XNEW (formal_hash_entry_t); + entry->name = name; + entry->formal = formal; + return entry; +} + +static inline formal_entry * +formal_entry_find (htab_t table, const char *name) +{ + formal_hash_entry_t needle = { name, NULL }; + formal_hash_entry_t *entry = htab_find (table, &needle); + return entry != NULL ? entry->formal : NULL; +} extern int buffer_and_nest (const char *, const char *, sb *, size_t (*) (sb *)); |