[gdb/build] Add CXX_DIALECT to CXX
[deliverable/binutils-gdb.git] / gas / macro.h
index a8bffaa0efc73f27e39f8be5af8a7f93b3595fa2..63ef9d505e75de7e75c27a1d34d26e37c0532737 100644 (file)
@@ -1,6 +1,5 @@
 /* macro.h - header file for macro support for gas
-   Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2002
-   Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    Written by Steve and Judy Chamberlain of Cygnus Support,
       sac@cygnus.com
@@ -9,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.
 
    Each macro knows its name and included text.  It gets built with a
    name and its default value.  Each time the macro is expanded, the
    formals get the actual values attached to them.  */
 
+enum formal_type
+  {
+    FORMAL_OPTIONAL,
+    FORMAL_REQUIRED,
+    FORMAL_VARARG
+  };
+
 /* Describe the formal arguments to a macro.  */
 
 typedef struct formal_struct {
@@ -45,6 +48,7 @@ typedef struct formal_struct {
   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.  */
@@ -59,7 +63,10 @@ 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.  */
 } macro_entry;
 
 /* Whether any macros have been defined.  */
@@ -70,14 +77,110 @@ extern int macro_defined;
 
 extern int macro_nest;
 
-extern int buffer_and_nest (const char *, const char *, sb *, int (*) (sb *));
-extern void macro_init
-  (int, int, int, int (*) (const char *, int, 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
-  (int, sb *, sb *, int (*) (sb *), const char **);
+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, int, sb *, sb *, int (*) (sb *));
+extern const char *expand_irp (int, size_t, sb *, sb *, size_t (*) (sb *));
 
 #endif
This page took 0.027135 seconds and 4 git commands to generate.