summaryrefslogtreecommitdiff
path: root/gdb/c-exp.y
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2013-03-21 15:01:55 +0000
committerTom Tromey <tromey@redhat.com>2013-03-21 15:01:55 +0000
commitf7e02539f004cecc1e1b9c16b4b443baa484109b (patch)
treefc71008a1462105be5582e9f3b278570f02206fd /gdb/c-exp.y
parente2e9b60ef5f95a4f8b7bdab4f1922b9e3617575d (diff)
downloadgdb-f7e02539f004cecc1e1b9c16b4b443baa484109b.tar.gz
* c-exp.y (YYPRINT): Define.
(c_print_token): New function.
Diffstat (limited to 'gdb/c-exp.y')
-rw-r--r--gdb/c-exp.y56
1 files changed, 56 insertions, 0 deletions
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index 0cd468395d2..313a63f10d5 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -167,6 +167,9 @@ void yyerror (char *);
static int parse_number (char *, int, int, YYSTYPE *);
static struct stoken operator_stoken (const char *);
static void check_parameter_typelist (VEC (type_ptr) *);
+
+static void c_print_token (FILE *file, int type, YYSTYPE value);
+#define YYPRINT(FILE, TYPE, VALUE) c_print_token (FILE, TYPE, VALUE)
%}
%type <voidval> exp exp1 type_exp start variable qualified_name lcurly
@@ -3063,6 +3066,59 @@ c_parse (void)
return result;
}
+/* This is called via the YYPRINT macro when parser debugging is
+ enabled. It prints a token's value. */
+
+static void
+c_print_token (FILE *file, int type, YYSTYPE value)
+{
+ switch (type)
+ {
+ case INT:
+ fprintf (file, "typed_val_int<%s, %s>",
+ TYPE_SAFE_NAME (value.typed_val_int.type),
+ pulongest (value.typed_val_int.val));
+ break;
+
+ case CHAR:
+ case STRING:
+ {
+ char *copy = alloca (value.tsval.length + 1);
+
+ memcpy (copy, value.tsval.ptr, value.tsval.length);
+ copy[value.tsval.length] = '\0';
+
+ fprintf (file, "tsval<type=%d, %s>", value.tsval.type, copy);
+ }
+ break;
+
+ case NSSTRING:
+ case VARIABLE:
+ fprintf (file, "sval<%s>", copy_name (value.sval));
+ break;
+
+ case TYPENAME:
+ fprintf (file, "tsym<type=%s, name=%s>",
+ TYPE_SAFE_NAME (value.tsym.type),
+ copy_name (value.tsym.stoken));
+ break;
+
+ case NAME:
+ case UNKNOWN_CPP_NAME:
+ case NAME_OR_INT:
+ case BLOCKNAME:
+ fprintf (file, "ssym<name=%s, sym=%s, field_of_this=%d>",
+ copy_name (value.ssym.stoken),
+ (value.ssym.sym == NULL
+ ? "(null)" : SYMBOL_PRINT_NAME (value.ssym.sym)),
+ value.ssym.is_a_field_of_this);
+ break;
+
+ case FILENAME:
+ fprintf (file, "bval<%s>", host_address_to_string (value.bval));
+ break;
+ }
+}
void
yyerror (char *msg)