*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / c-valprint.c
index 89a68e3d63c7c4b7036a20c1ad946bc26533993d..15b2c2eac6c83946fdceb6fe6261fb4ec408938b 100644 (file)
@@ -70,7 +70,7 @@ print_function_pointer_address (CORE_ADDR address, struct ui_file *stream)
    The PRETTY parameter controls prettyprinting.  */
 
 int
-c_val_print (struct type *type, const bfd_byte *valaddr, int embedded_offset,
+c_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
             CORE_ADDR address, struct ui_file *stream, int format,
             int deref_ref, int recurse, enum val_prettyprint pretty)
 {
@@ -233,9 +233,8 @@ c_val_print (struct type *type, const bfd_byte *valaddr, int embedded_offset,
                      wtype = TYPE_TARGET_TYPE (type);
                    }
                  vt_val = value_at (wtype, vt_address);
-                 val_print (value_type (vt_val), value_contents (vt_val), 0,
-                            VALUE_ADDRESS (vt_val), stream, format,
-                            deref_ref, recurse + 1, pretty);
+                 common_val_print (vt_val, stream, format,
+                                   deref_ref, recurse + 1, pretty);
                  if (pretty)
                    {
                      fprintf_filtered (stream, "\n");
@@ -283,15 +282,8 @@ c_val_print (struct type *type, const bfd_byte *valaddr, int embedded_offset,
              (TYPE_TARGET_TYPE (type),
               unpack_pointer (lookup_pointer_type (builtin_type_void),
                               valaddr + embedded_offset));
-             val_print (value_type (deref_val),
-                        value_contents (deref_val),
-                        0,
-                        VALUE_ADDRESS (deref_val),
-                        stream,
-                        format,
-                        deref_ref,
-                        recurse,
-                        pretty);
+             common_val_print (deref_val, stream, format, deref_ref,
+                               recurse, pretty);
            }
          else
            fputs_filtered ("???", stream);
@@ -499,8 +491,7 @@ int
 c_value_print (struct value *val, struct ui_file *stream, int format,
               enum val_prettyprint pretty)
 {
-  struct type *type = value_type (val);
-  struct type *real_type;
+  struct type *type, *real_type;
   int full, top, using_enc;
 
   /* If it is a pointer, indicate what it points to.
@@ -509,15 +500,18 @@ c_value_print (struct value *val, struct ui_file *stream, int format,
 
      C++: if it is a member pointer, we will take care
      of that when we print it.  */
-  if (TYPE_CODE (type) == TYPE_CODE_PTR ||
-      TYPE_CODE (type) == TYPE_CODE_REF)
+
+  type = check_typedef (value_type (val));
+
+  if (TYPE_CODE (type) == TYPE_CODE_PTR
+      || TYPE_CODE (type) == TYPE_CODE_REF)
     {
       /* Hack:  remove (char *) for char strings.  Their
          type is indicated by the quoted string anyway. */
-      if (TYPE_CODE (type) == TYPE_CODE_PTR &&
-         TYPE_NAME (type) == NULL &&
-         TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL &&
-         strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
+      if (TYPE_CODE (type) == TYPE_CODE_PTR
+         && TYPE_NAME (type) == NULL
+         && TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL
+         && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
        {
          /* Print nothing */
        }
@@ -564,11 +558,12 @@ c_value_print (struct value *val, struct ui_file *stream, int format,
        {
          /* normal case */
          fprintf_filtered (stream, "(");
-         type_print (type, "", stream, -1);
+         type_print (value_type (val), "", stream, -1);
          fprintf_filtered (stream, ") ");
        }
     }
-  if (objectprint && (TYPE_CODE (value_type (val)) == TYPE_CODE_CLASS))
+
+  if (objectprint && (TYPE_CODE (type) == TYPE_CODE_CLASS))
     {
       /* Attempt to determine real type of object */
       real_type = value_rtti_type (val, &full, &top, &using_enc);
@@ -586,7 +581,7 @@ c_value_print (struct value *val, struct ui_file *stream, int format,
           /* Note: When we look up RTTI entries, we don't get any information on
              const or volatile attributes */
        }
-      else if (type != value_enclosing_type (val))
+      else if (type != check_typedef (value_enclosing_type (val)))
        {
          /* No RTTI information, so let's do our best */
          fprintf_filtered (stream, "(%s ?) ",
This page took 0.024949 seconds and 4 git commands to generate.