aboutsummaryrefslogtreecommitdiff
path: root/gdb/macrotab.h
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2012-05-16 20:31:10 +0000
committerTom Tromey <tromey@redhat.com>2012-05-16 20:31:10 +0000
commitabc9d0dc6edeeabbd65fedb43cf840875156da91 (patch)
tree6af9437622479beefdff726b65ee0880edb7d549 /gdb/macrotab.h
parent7537bd464b5c7aaa08b67e53f38403551ef5605d (diff)
downloadgdb-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.h28
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;
};