/* A table of all the macro definitions for a given compilation unit. */
struct macro_table;
+/* The definition of a single macro. */
+struct macro_definition;
/* A source file that participated in a compilation unit --- either a
main file, or an #included file. If a file is #included more than
/* Return the main source file of the macro table TABLE. */
struct macro_source_file *macro_main (struct macro_table *table);
+/* Mark the macro table TABLE so that macros defined in this table can
+ be redefined without error. Note that it invalid to call this if
+ TABLE is allocated on an obstack. */
+void macro_allow_redefinitions (struct macro_table *table);
+
/* Record a #inclusion.
Record in SOURCE's macro table that, at line number LINE in SOURCE,
void macro_undef (struct macro_source_file *source, int line,
const char *name);
-
/* Different kinds of macro definitions. */
enum macro_kind
{
struct macro_table *table;
/* What kind of macro it is. */
- enum macro_kind kind;
+ ENUM_BITFIELD (macro_kind) kind : 1;
/* If `kind' is `macro_function_like', the number of arguments it
takes, and their names. The names, and the array of pointers to
them, are in the table's bcache, if it has one. */
- int argc;
+ int argc : 31;
const char * const *argv;
/* The replacement string (body) of the macro. This is in the
const char *name,
int *definition_line));
+/* Callback function when walking a macro table. NAME is the name of
+ the macro, and DEFINITION is the definition. USER_DATA is an
+ arbitrary pointer which is passed by the caller to macro_for_each
+ or macro_for_each_in_scope. */
+typedef void (*macro_callback_fn) (const char *name,
+ const struct macro_definition *definition,
+ void *user_data);
+
+/* Call the function FN for each macro in the macro table TABLE.
+ USER_DATA is passed, untranslated, to FN. */
+void macro_for_each (struct macro_table *table, macro_callback_fn fn,
+ void *user_data);
+
+/* Call the function FN for each macro that is visible in a given
+ scope. The scope is represented by FILE and LINE. USER_DATA is
+ passed, untranslated, to FN. */
+void macro_for_each_in_scope (struct macro_source_file *file, int line,
+ macro_callback_fn fn,
+ void *user_data);
+
#endif /* MACROTAB_H */