diff options
author | Tom Tromey <tromey@redhat.com> | 2012-05-16 20:31:10 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2012-05-16 20:31:10 +0000 |
commit | abc9d0dc6edeeabbd65fedb43cf840875156da91 (patch) | |
tree | 6af9437622479beefdff726b65ee0880edb7d549 /gdb/macrotab.h | |
parent | 7537bd464b5c7aaa08b67e53f38403551ef5605d (diff) | |
download | gdb-abc9d0dc6edeeabbd65fedb43cf840875156da91.zip gdb-abc9d0dc6edeeabbd65fedb43cf840875156da91.tar.gz gdb-abc9d0dc6edeeabbd65fedb43cf840875156da91.tar.bz2 |
PR macros/13205:
* macrotab.h: (macro_define_special): Declare.
(enum macro_special_kind): New.
(struct macro_definition) <argc, replacement>: Update comments.
* macrotab.c (new_macro_definition): Unconditionally set 'argc'.
(macro_define_object_internal): New function.
(macro_define_object): Use it.
(macro_define_special): New function.
(fixup_definition): New function.
(macro_lookup_definition, foreach_macro_in_scope)
(foreach_macro): Use fixup_definition.
* macroexp.h (macro_stringify): Declare.
* macroexp.c (free_buffer_return_text): New function.
(stringify): Constify "arg".
(macro_stringify): New function.
* dwarf2read.c (macro_start_file): Call macro_define_special.
testsuite
* gdb.base/macscp1.c (macscp_expr): Add comment.
* gdb.base/macscp.exp: Test __FILE__ and __LINE__.
Diffstat (limited to 'gdb/macrotab.h')
-rw-r--r-- | gdb/macrotab.h | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/gdb/macrotab.h b/gdb/macrotab.h index 8316cc3..92f1656 100644 --- a/gdb/macrotab.h +++ b/gdb/macrotab.h @@ -212,6 +212,10 @@ struct macro_source_file *macro_include (struct macro_source_file *source, int line, const char *included); +/* Define any special macros, like __FILE__ or __LINE__. This should + be called once, on the main source file. */ + +void macro_define_special (struct macro_table *table); /* Find any source file structure for a file named NAME, either included into SOURCE, or SOURCE itself. Return zero if we have @@ -261,6 +265,17 @@ enum macro_kind macro_function_like }; +/* Different kinds of special macros. */ + +enum macro_special_kind +{ + /* Ordinary. */ + macro_ordinary, + /* The special macro __FILE__. */ + macro_FILE, + /* The special macro __LINE__. */ + macro_LINE +}; /* A preprocessor symbol definition. */ struct macro_definition @@ -273,12 +288,17 @@ struct macro_definition /* 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 : 31; + them, are in the table's bcache, if it has one. If `kind' is + `macro_object_like', then this is actually a `macro_special_kind' + describing the macro. */ + int argc : 30; const char * const *argv; - /* The replacement string (body) of the macro. This is in the - table's bcache, if it has one. */ + /* The replacement string (body) of the macro. For ordinary macros, + this is in the table's bcache, if it has one. For special macros + like __FILE__, this value is only valid until the next use of any + special macro definition; that is, it is reset each time any + special macro is looked up or iterated over. */ const char *replacement; }; |