diff options
author | Tom Tromey <tromey@redhat.com> | 2013-03-21 15:01:55 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2013-03-21 15:01:55 +0000 |
commit | 9507860ea98fccee3a8567de42ed9c71d43bc343 (patch) | |
tree | f042ec595ea1e017a72c9e3490e09d550bfb2d15 /gdb/c-exp.y | |
parent | 71863e733e37f6480dd502dbd03c56e99a09b08f (diff) | |
download | gdb-9507860ea98fccee3a8567de42ed9c71d43bc343.zip gdb-9507860ea98fccee3a8567de42ed9c71d43bc343.tar.gz gdb-9507860ea98fccee3a8567de42ed9c71d43bc343.tar.bz2 |
* c-exp.y (YYPRINT): Define.
(c_print_token): New function.
Diffstat (limited to 'gdb/c-exp.y')
-rw-r--r-- | gdb/c-exp.y | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gdb/c-exp.y b/gdb/c-exp.y index 0cd4683..313a63f 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) |