X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gas%2Fmacro.h;h=77102150737cf3ac9e9d30b53ca70c391bf8990c;hb=0822d0753e797b3e9e69bec809adc0500192bb40;hp=7a4c4ebbf3d53d7d1b31739a878c343508081d63;hpb=fa803dc60f0bf01297674c41d001798e18ade4dc;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/macro.h b/gas/macro.h index 7a4c4ebbf3..7710215073 100644 --- a/gas/macro.h +++ b/gas/macro.h @@ -1,5 +1,6 @@ -/* macro.h - header file for macro support for gas and gasp - Copyright (C) 1994, 1995 Free Software Foundation, Inc. +/* macro.h - header file for macro support for gas + Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2002 + Free Software Foundation, Inc. Written by Steve and Judy Chamberlain of Cygnus Support, sac@cygnus.com @@ -19,7 +20,7 @@ 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. */ + 02111-1307, USA. */ #ifndef MACRO_H @@ -28,19 +29,60 @@ #include "ansidecl.h" #include "sb.h" +/* 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. */ + +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. */ +} 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. */ + +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; + /* Whether any macros have been defined. */ extern int macro_defined; +/* The macro nesting level. */ + +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 (*) PARAMS ((const char *, int, sb *, int *)))); + PARAMS ((int, int, int, 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 *)))); -extern int check_macro PARAMS ((const char *, sb *, int, const char **)); + PARAMS ((int, sb *, sb *, int (*) PARAMS ((sb *)), const char **)); +extern int check_macro + PARAMS ((const char *, sb *, 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)); + PARAMS ((int, int, sb *, sb *, int (*) PARAMS ((sb *)))); #endif