X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gas%2Fmacro.h;h=893b0c6660b606877c5db7e5b9d3c67381df1786;hb=8180707f9042b70a14b55cb147724c323e6042b6;hp=cbd32c9717089bae50777428ae91b1a1b6fcf9ab;hpb=6f2750feaf2827ef8a1a0a5b2f90c1e9a6cabbd1;p=binutils-gdb.git diff --git a/gas/macro.h b/gas/macro.h index cbd32c97170..893b0c6660b 100644 --- a/gas/macro.h +++ b/gas/macro.h @@ -1,5 +1,5 @@ /* macro.h - header file for macro support for gas - Copyright (C) 1994-2016 Free Software Foundation, Inc. + Copyright (C) 1994-2022 Free Software Foundation, Inc. Written by Steve and Judy Chamberlain of Cygnus Support, sac@cygnus.com @@ -63,9 +63,9 @@ 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. */ - char *file; /* File the macro was defined in. */ + const char *file; /* File the macro was defined in. */ unsigned int line; /* Line number of definition. */ } macro_entry; @@ -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 *)); @@ -88,7 +178,7 @@ extern void macro_init (int, int, int, extern void macro_set_alternate (int); extern void macro_mri_mode (int); extern const char *define_macro (size_t, sb *, sb *, size_t (*) (sb *), - char *, unsigned int, const char **); + const char *, unsigned int, const char **); extern int check_macro (const char *, sb *, const char **, macro_entry **); extern void delete_macro (const char *); extern const char *expand_irp (int, size_t, sb *, sb *, size_t (*) (sb *));