Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5222 | serge | 1 | /* macro.h - header file for macro support for gas |
2 | Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2005, 2006, |
||
3 | 2007, 2012 Free Software Foundation, Inc. |
||
4 | |||
5 | Written by Steve and Judy Chamberlain of Cygnus Support, |
||
6 | sac@cygnus.com |
||
7 | |||
8 | This file is part of GAS, the GNU Assembler. |
||
9 | |||
10 | GAS is free software; you can redistribute it and/or modify |
||
11 | it under the terms of the GNU General Public License as published by |
||
12 | the Free Software Foundation; either version 3, or (at your option) |
||
13 | any later version. |
||
14 | |||
15 | GAS is distributed in the hope that it will be useful, |
||
16 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
18 | GNU General Public License for more details. |
||
19 | |||
20 | You should have received a copy of the GNU General Public License |
||
21 | along with GAS; see the file COPYING. If not, write to the Free |
||
22 | Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA |
||
23 | 02110-1301, USA. */ |
||
24 | |||
25 | #ifndef MACRO_H |
||
26 | |||
27 | #define MACRO_H |
||
28 | |||
29 | /* Structures used to store macros. |
||
30 | |||
31 | Each macro knows its name and included text. It gets built with a |
||
32 | list of formal arguments, and also keeps a hash table which points |
||
33 | into the list to speed up formal search. Each formal knows its |
||
34 | name and its default value. Each time the macro is expanded, the |
||
35 | formals get the actual values attached to them. */ |
||
36 | |||
37 | enum formal_type |
||
38 | { |
||
39 | FORMAL_OPTIONAL, |
||
40 | FORMAL_REQUIRED, |
||
41 | FORMAL_VARARG |
||
42 | }; |
||
43 | |||
44 | /* Describe the formal arguments to a macro. */ |
||
45 | |||
46 | typedef struct formal_struct { |
||
47 | struct formal_struct *next; /* Next formal in list. */ |
||
48 | sb name; /* Name of the formal. */ |
||
49 | sb def; /* The default value. */ |
||
50 | sb actual; /* The actual argument (changed on each expansion). */ |
||
51 | int index; /* The index of the formal 0..formal_count - 1. */ |
||
52 | enum formal_type type; /* The kind of the formal. */ |
||
53 | } formal_entry; |
||
54 | |||
55 | /* Other values found in the index field of a formal_entry. */ |
||
56 | #define QUAL_INDEX (-1) |
||
57 | #define NARG_INDEX (-2) |
||
58 | #define LOCAL_INDEX (-3) |
||
59 | |||
60 | /* Describe the macro. */ |
||
61 | |||
62 | typedef struct macro_struct |
||
63 | { |
||
64 | sb sub; /* Substitution text. */ |
||
65 | int formal_count; /* Number of formal args. */ |
||
66 | formal_entry *formals; /* Pointer to list of formal_structs. */ |
||
67 | struct hash_control *formal_hash; /* Hash table of formals. */ |
||
68 | const char *name; /* Macro name. */ |
||
69 | char *file; /* File the macro was defined in. */ |
||
70 | unsigned int line; /* Line number of definition. */ |
||
71 | } macro_entry; |
||
72 | |||
73 | /* Whether any macros have been defined. */ |
||
74 | |||
75 | extern int macro_defined; |
||
76 | |||
77 | /* The macro nesting level. */ |
||
78 | |||
79 | extern int macro_nest; |
||
80 | |||
81 | /* The macro hash table. */ |
||
82 | |||
83 | extern struct hash_control *macro_hash; |
||
84 | |||
85 | extern int buffer_and_nest (const char *, const char *, sb *, |
||
86 | size_t (*) (sb *)); |
||
87 | extern void macro_init (int, int, int, |
||
88 | size_t (*) (const char *, size_t, sb *, offsetT *)); |
||
89 | extern void macro_set_alternate (int); |
||
90 | extern void macro_mri_mode (int); |
||
91 | extern const char *define_macro (size_t, sb *, sb *, size_t (*) (sb *), |
||
92 | char *, unsigned int, const char **); |
||
93 | extern int check_macro (const char *, sb *, const char **, macro_entry **); |
||
94 | extern void delete_macro (const char *); |
||
95 | extern const char *expand_irp (int, size_t, sb *, sb *, size_t (*) (sb *)); |
||
96 | |||
97 | #endif |