[gdb/build] Add CXX_DIALECT to CXX
[deliverable/binutils-gdb.git] / gas / macro.h
index 9c61acd89a97bc4ca306228ce5e536dbaa1cc081..63ef9d505e75de7e75c27a1d34d26e37c0532737 100644 (file)
@@ -1,5 +1,5 @@
-/* macro.h - header file for macro support for gas and gasp
-   Copyright (C) 1994, 95, 96, 97, 1998 Free Software Foundation, Inc.
+/* macro.h - header file for macro support for gas
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    Written by Steve and Judy Chamberlain of Cygnus Support,
       sac@cygnus.com
@@ -8,7 +8,7 @@
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA. */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 #ifndef MACRO_H
 
 #define MACRO_H
 
-#include "ansidecl.h"
-#include "sb.h"
-
-/* Structures used to store macros. 
+/* Structures used to store macros.
 
    Each macro knows its name and included text.  It gets built with a
    list of formal arguments, and also keeps a hash table which points
    into the list to speed up formal search.  Each formal knows its
    name and its default value.  Each time the macro is expanded, the
-   formals get the actual values attatched to them. */
-
-/* describe the formal arguments to a macro */
+   formals get the actual values attached to them.  */
 
-typedef struct formal_struct
+enum formal_type
   {
-    struct formal_struct *next;        /* next formal in list */
-    sb name;                   /* name of the formal */
-    sb def;                    /* the default value */
-    sb actual;                 /* the actual argument (changed on each expansion) */
-    int index;                 /* the index of the formal 0..formal_count-1 */
-  }
-formal_entry;
+    FORMAL_OPTIONAL,
+    FORMAL_REQUIRED,
+    FORMAL_VARARG
+  };
+
+/* Describe the formal arguments to a macro.  */
+
+typedef struct formal_struct {
+  struct formal_struct *next;  /* Next formal in list.  */
+  sb name;                     /* Name of the formal.  */
+  sb def;                      /* The default value.  */
+  sb actual;                   /* The actual argument (changed on each expansion).  */
+  int index;                   /* The index of the formal 0..formal_count - 1.  */
+  enum formal_type type;       /* The kind of the formal.  */
+} formal_entry;
 
 /* Other values found in the index field of a formal_entry.  */
 #define QUAL_INDEX (-1)
 #define NARG_INDEX (-2)
 #define LOCAL_INDEX (-3)
 
-/* describe the macro. */
+/* Describe the macro.  */
 
 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. */
-  }
-macro_entry;
+{
+  sb sub;                              /* Substitution text.  */
+  int formal_count;                    /* Number of formal args.  */
+  formal_entry *formals;               /* Pointer to list of formal_structs.  */
+  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.  */
+} macro_entry;
 
 /* Whether any macros have been defined.  */
 
@@ -72,19 +77,110 @@ extern int macro_defined;
 
 extern int macro_nest;
 
-extern int buffer_and_nest
-  PARAMS ((const char *, const char *, sb *, int (*) PARAMS ((sb *))));
-extern void macro_init
-  PARAMS ((int alternate, int mri, int strip_at,
-          int (*) PARAMS ((const char *, int, sb *, int *))));
-extern void macro_mri_mode PARAMS ((int));
-extern const char *define_macro
-  PARAMS ((int idx, sb *in, sb *label, int (*get_line) PARAMS ((sb *)),
-          const char **namep));
-extern int check_macro PARAMS ((const char *, sb *, int, const char **, 
-                                macro_entry **));
-extern void delete_macro PARAMS ((const char *));
-extern const char *expand_irp
-  PARAMS ((int, int, sb *, sb *, int (*) PARAMS ((sb *)), int));
+/* The macro hash table.  */
+
+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 *));
+extern void macro_init (int, int, int,
+                       size_t (*) (const char *, size_t, sb *, offsetT *));
+extern void macro_set_alternate (int);
+extern void macro_mri_mode (int);
+extern const char *define_macro (size_t, sb *, sb *, size_t (*) (sb *),
+                                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 *));
 
 #endif
This page took 0.0279 seconds and 4 git commands to generate.