33 |
}; |
}; |
34 |
|
|
35 |
|
|
36 |
struct m4_symbol { |
struct m4_token_data { |
37 |
m4_symbol * next; |
m4_token_data * next; |
38 |
m4_token_data_t type; |
m4_token_data_t type; |
39 |
boolean traced; |
boolean traced; |
40 |
boolean macro_args; |
boolean macro_args; |
46 |
} u; |
} u; |
47 |
}; |
}; |
48 |
|
|
49 |
#define M4_SYMBOL_NEXT(Symbol) ((Symbol)->next) |
#define M4_TOKEN_DATA_NEXT(Td) ((Td)->next) |
50 |
#define M4_SYMBOL_TYPE(Symbol) ((Symbol)->type) |
#define M4_TOKEN_DATA_TYPE(Td) ((Td)->type) |
51 |
#define M4_SYMBOL_TRACED(Symbol) ((Symbol)->traced) |
#define M4_TOKEN_TRACED(Td) ((Td)->traced) |
52 |
#define M4_SYMBOL_MACRO_ARGS(Symbol) ((Symbol)->macro_args) |
#define M4_TOKEN_MACRO_ARGS(Td) ((Td)->macro_args) |
53 |
#define M4_SYMBOL_BLIND_NO_ARGS(Symbol) ((Symbol)->blind_no_args) |
#define M4_TOKEN_BLIND_NO_ARGS(Td) ((Td)->blind_no_args) |
54 |
#define M4_SYMBOL_HANDLE(Symbol) ((Symbol)->handle) |
#define M4_TOKEN_DATA_HANDLE(Td) ((Td)->handle) |
55 |
#define M4_SYMBOL_TEXT(Symbol) ((Symbol)->u.text) |
#define M4_TOKEN_DATA_TEXT(Td) ((Td)->u.text) |
56 |
#define M4_SYMBOL_FUNC(Symbol) ((Symbol)->u.func) |
#define M4_TOKEN_DATA_FUNC(Td) ((Td)->u.func) |
57 |
|
|
58 |
/* Redefine the exported function to this faster |
/* Redefine the exported function to this faster |
59 |
macro based version for internal use by the m4 code. */ |
macro based version for internal use by the m4 code. */ |
60 |
#undef M4ARG |
#undef M4ARG |
61 |
#define M4ARG(i) (argc > (i) ? M4_SYMBOL_TEXT (argv[i]) : "") |
#define M4ARG(i) (argc > (i) ? M4_TOKEN_DATA_TEXT (argv[i]) : "") |
62 |
|
|
63 |
|
struct m4_symbol |
64 |
|
{ |
65 |
|
m4_token_data *data; |
66 |
|
}; |
67 |
|
|
68 |
|
#define M4_SYMBOL_DATA(S) ((S)->data) |
69 |
|
#define M4_SYMBOL_DATA_NEXT(S) (M4_TOKEN_DATA_NEXT (M4_SYMBOL_DATA(S))) |
70 |
|
#define M4_SYMBOL_TYPE(S) (M4_TOKEN_DATA_TYPE (M4_SYMBOL_DATA(S))) |
71 |
|
#define M4_SYMBOL_TRACED(S) (M4_TOKEN_TRACED (M4_SYMBOL_DATA(S))) |
72 |
|
#define M4_SYMBOL_MACRO_ARGS(S) (M4_TOKEN_MACRO_ARGS (M4_SYMBOL_DATA(S))) |
73 |
|
#define M4_SYMBOL_BLIND_NO_ARGS(S) (M4_TOKEN_BLIND_NO_ARGS (M4_SYMBOL_DATA(S))) |
74 |
|
#define M4_SYMBOL_TEXT(S) (M4_TOKEN_DATA_TEXT (M4_SYMBOL_DATA(S))) |
75 |
|
#define M4_SYMBOL_FUNC(S) (M4_TOKEN_DATA_FUNC (M4_SYMBOL_DATA(S))) |
76 |
|
#define M4_SYMBOL_HANDLE(S) (M4_TOKEN_DATA_HANDLE (M4_SYMBOL_DATA(S))) |
77 |
|
|
78 |
|
|
79 |
/* Debugging the memory allocator. */ |
/* Debugging the memory allocator. */ |
80 |
|
|
81 |
#if WITH_DMALLOC |
#if WITH_DMALLOC |
82 |
# define DMALLOC_FUNC_CHECK |
# define DMALLOC_FUNC_CHECK |
83 |
# include <dmalloc.h> |
# include <dmalloc.h> |
84 |
|
#endif |
|
/* Dmalloc expects us to use a void returning xfree. */ |
|
|
# undef XFREE |
|
|
# define XFREE(p) if (p) xfree (p) |
|
|
|
|
|
#endif /* WITH_DMALLOC */ |
|
85 |
|
|
86 |
/* Other debug stuff. */ |
/* Other debug stuff. */ |
87 |
|
|