* c-exp.y (YYPRINT): Define.
authorTom Tromey <tromey@redhat.com>
Thu, 21 Mar 2013 15:01:55 +0000 (15:01 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 21 Mar 2013 15:01:55 +0000 (15:01 +0000)
(c_print_token): New function.

gdb/ChangeLog
gdb/c-exp.y

index da787937f4008e9d127c0945d29198bf069987a5..10e8cd6ce5bc7deaddf31a133819d49d6e70d573 100644 (file)
@@ -1,3 +1,8 @@
+2013-03-21  Tom Tromey  <tromey@redhat.com>
+
+       * c-exp.y (YYPRINT): Define.
+       (c_print_token): New function.
+
 2013-03-21  Tom Tromey  <tromey@redhat.com>
 
        * c-exp.y (%union) <sym, ivar, ivec>: Remove.
index 0cd468395d2aae976e4adb0a68bf367d79f7a0d2..313a63f10d511c0fe2dc34dec635c606cdec6ffb 100644 (file)
@@ -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)