42 |
/* --- CONTEXT MANAGEMENT --- */ |
/* --- CONTEXT MANAGEMENT --- */ |
43 |
|
|
44 |
struct m4 { |
struct m4 { |
45 |
m4_symtab * symtab; |
m4_symbol_table *symtab; |
46 |
|
m4_syntax_table *syntax; |
47 |
|
|
48 |
/* Option flags (set in src/main.c). */ |
/* Option flags (set in src/main.c). */ |
49 |
int warning_status; /* -E */ |
int warning_status; /* -E */ |
61 |
#define M4_OPT_SYNC_OUTPUT_BIT (1 << 4) /* -s */ |
#define M4_OPT_SYNC_OUTPUT_BIT (1 << 4) /* -s */ |
62 |
|
|
63 |
#ifdef NDEBUG |
#ifdef NDEBUG |
64 |
# define m4_get_symtab(C) ((C)->symtab) |
# define m4_get_symbol_table(C) ((C)->symtab) |
65 |
|
# define m4_get_syntax_table(C) ((C)->syntax) |
66 |
# define m4_get_warning_status_opt(C) ((C)->warning_status) |
# define m4_get_warning_status_opt(C) ((C)->warning_status) |
67 |
# define m4_get_no_gnu_extensions_opt(C) ((C)->no_gnu_extensions) |
# define m4_get_no_gnu_extensions_opt(C) ((C)->no_gnu_extensions) |
68 |
# define m4_get_nesting_limit_opt(C) ((C)->nesting_limit) |
# define m4_get_nesting_limit_opt(C) ((C)->nesting_limit) |
176 |
#define SYMBOL_ARG_REST_BIT (1 << 0) |
#define SYMBOL_ARG_REST_BIT (1 << 0) |
177 |
#define SYMBOL_ARG_KEY_BIT (1 << 1) |
#define SYMBOL_ARG_KEY_BIT (1 << 1) |
178 |
|
|
179 |
extern void m4__symtab_remove_module_references (m4_symtab*, lt_dlhandle); |
extern void m4__symtab_remove_module_references (m4_symbol_table*, lt_dlhandle); |
180 |
|
|
181 |
|
|
182 |
|
|
183 |
|
|
184 |
/* TRUE iff strlen(rquote) == strlen(lquote) == 1 */ |
/* --- SYNTAX TABLE MANAGEMENT --- */ |
|
extern boolean m4__single_quotes; |
|
185 |
|
|
186 |
/* TRUE iff strlen(bcomm) == strlen(ecomm) == 1 */ |
#define DEF_LQUOTE "`" |
187 |
extern boolean m4__single_comments; |
#define DEF_RQUOTE "\'" |
188 |
|
#define DEF_BCOMM "#" |
189 |
|
#define DEF_ECOMM "\n" |
190 |
|
|
191 |
/* TRUE iff some character has M4_SYNTAX_ESCAPE */ |
struct m4_syntax_table { |
192 |
extern boolean m4__use_macro_escape; |
/* Please read the comment at the top of input.c for details */ |
193 |
|
unsigned short table[256]; |
194 |
|
|
195 |
|
m4_string lquote, rquote; |
196 |
|
m4_string bcomm, ecomm; |
197 |
|
|
198 |
|
/* TRUE iff strlen(rquote) == strlen(lquote) == 1 */ |
199 |
|
boolean is_single_quotes; |
200 |
|
|
201 |
|
/* TRUE iff strlen(bcomm) == strlen(ecomm) == 1 */ |
202 |
|
boolean is_single_comments; |
203 |
|
|
204 |
|
/* TRUE iff some character has M4_SYNTAX_ESCAPE */ |
205 |
|
boolean is_macro_escaped; |
206 |
|
}; |
207 |
|
|
208 |
|
#ifdef NDEBUG |
209 |
|
# define m4_get_syntax_lquote(S) ((S)->lquote.string) |
210 |
|
# define m4_get_syntax_rquote(S) ((S)->rquote.string) |
211 |
|
# define m4_get_syntax_bcomm(S) ((S)->bcomm.string) |
212 |
|
# define m4_get_syntax_ecomm(S) ((S)->ecomm.string) |
213 |
|
|
214 |
|
# define m4_is_syntax_single_quotes(S) ((S)->is_single_quotes) |
215 |
|
# define m4_is_syntax_single_comments(S) ((S)->is_single_comments) |
216 |
|
# define m4_is_syntax_macro_escaped(S) ((S)->is_macro_escaped) |
217 |
|
#endif |
218 |
|
|
219 |
|
|
220 |
/* Various different token types. */ |
/* Various different token types. */ |
221 |
typedef enum { |
typedef enum { |
222 |
M4_TOKEN_EOF, /* end of file */ |
M4_TOKEN_EOF, /* end of file */ |