From abc9d0dc6edeeabbd65fedb43cf840875156da91 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 16 May 2012 20:31:10 +0000 Subject: PR macros/13205: * macrotab.h: (macro_define_special): Declare. (enum macro_special_kind): New. (struct macro_definition) : 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__. --- gdb/macroexp.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'gdb/macroexp.c') diff --git a/gdb/macroexp.c b/gdb/macroexp.c index d5e4e40..22b904e 100644 --- a/gdb/macroexp.c +++ b/gdb/macroexp.c @@ -113,6 +113,17 @@ free_buffer (struct macro_buffer *b) xfree (b->text); } +/* Like free_buffer, but return the text as an xstrdup()d string. + This only exists to try to make the API relatively clean. */ + +static char * +free_buffer_return_text (struct macro_buffer *b) +{ + gdb_assert (! b->shared); + gdb_assert (b->size); + /* Nothing to do. */ + return b->text; +} /* A cleanup function for macro buffers. */ static void @@ -639,7 +650,7 @@ append_tokens_without_splicing (struct macro_buffer *dest, stringify; it is LEN bytes long. */ static void -stringify (struct macro_buffer *dest, char *arg, int len) +stringify (struct macro_buffer *dest, const char *arg, int len) { /* Trim initial whitespace from ARG. */ while (len > 0 && macro_is_whitespace (*arg)) @@ -682,6 +693,21 @@ stringify (struct macro_buffer *dest, char *arg, int len) dest->last_token = dest->len; } +/* See macroexp.h. */ + +char * +macro_stringify (const char *str) +{ + struct macro_buffer buffer; + int len = strlen (str); + char *result; + + init_buffer (&buffer, len); + stringify (&buffer, str, len); + + return free_buffer_return_text (&buffer); +} + /* Expanding macros! */ -- cgit v1.1