Trivial patch to remove dependency on host unsigned long type
[deliverable/binutils-gdb.git] / gdb / ada-valprint.c
index a8351ddd74daad991c498b9155e07b51167f1803..4a04d2821f70d856049505e6bf8eee74424c9599 100644 (file)
@@ -1,7 +1,6 @@
 /* Support for printing Ada values for GDB, the GNU debugger.
 
-   Copyright (C) 1986, 1988-1989, 1991-1994, 1997, 2001-2012 Free
-   Software Foundation, Inc.
+   Copyright (C) 1986-2013 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -109,7 +108,7 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
        return 0;
       break;
     case TYPE_CODE_ENUM:
-      if (low_bound == TYPE_FIELD_BITPOS (index_type, 0))
+      if (low_bound == TYPE_FIELD_ENUMVAL (index_type, 0))
        return 0;
       break;
     case TYPE_CODE_UNDEF:
@@ -172,7 +171,7 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
 
       if (i != 0)
        {
-         if (options->prettyprint_arrays)
+         if (options->prettyformat_arrays)
            {
              fprintf_filtered (stream, ",\n");
              print_spaces_filtered (2 + 2 * recurse, stream);
@@ -228,7 +227,7 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
            {
              if (j > i0)
                {
-                 if (options->prettyprint_arrays)
+                 if (options->prettyformat_arrays)
                    {
                      fprintf_filtered (stream, ",\n");
                      print_spaces_filtered (2 + 2 * recurse, stream);
@@ -321,7 +320,6 @@ ada_print_floating (const gdb_byte *valaddr, struct type *type,
 {
   char buffer[64];
   char *s, *result;
-  int len;
   struct ui_file *tmp_stream = mem_fileopen ();
   struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_stream);
 
@@ -330,7 +328,6 @@ ada_print_floating (const gdb_byte *valaddr, struct type *type,
   do_cleanups (cleanups);
 
   result = buffer;
-  len = strlen (result);
 
   /* Modify for Ada rules.  */
 
@@ -402,7 +399,7 @@ ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
       len = TYPE_NFIELDS (type);
       for (i = 0; i < len; i++)
        {
-         if (TYPE_FIELD_BITPOS (type, i) == val)
+         if (TYPE_FIELD_ENUMVAL (type, i) == val)
            {
              break;
            }
@@ -510,10 +507,7 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
        {
          if (in_quotes)
            {
-             if (options->inspect_it)
-               fputs_filtered ("\\\", ", stream);
-             else
-               fputs_filtered ("\", ", stream);
+             fputs_filtered ("\", ", stream);
              in_quotes = 0;
            }
          fputs_filtered ("'", stream);
@@ -529,10 +523,7 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
        {
          if (!in_quotes)
            {
-             if (options->inspect_it)
-               fputs_filtered ("\\\"", stream);
-             else
-               fputs_filtered ("\"", stream);
+             fputs_filtered ("\"", stream);
              in_quotes = 1;
            }
          ada_emit_char (char_at (string, i, type_len, byte_order),
@@ -543,12 +534,7 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
 
   /* Terminate the quotes if necessary.  */
   if (in_quotes)
-    {
-      if (options->inspect_it)
-       fputs_filtered ("\\\"", stream);
-      else
-       fputs_filtered ("\"", stream);
-    }
+    fputs_filtered ("\"", stream);
 
   if (force_ellipses || i < length)
     fputs_filtered ("...", stream);
@@ -614,7 +600,7 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr,
       eltlen = TYPE_LENGTH (elttype);
       len = TYPE_LENGTH (type) / eltlen;
 
-      if (options->prettyprint_arrays)
+      if (options->prettyformat_arrays)
         print_spaces_filtered (2 + 2 * recurse, stream);
 
       /* If requested, look for the first null char and only print
@@ -659,10 +645,8 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
                 const struct value *original_value,
                 const struct value_print_options *options)
 {
-  unsigned int len;
   int i;
   struct type *elttype;
-  LONGEST val;
   int offset_aligned;
 
   type = ada_check_typedef (type);
@@ -732,9 +716,8 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
       if (ada_is_fixed_point_type (type))
        {
          LONGEST v = unpack_long (type, valaddr + offset_aligned);
-         int len = TYPE_LENGTH (type);
 
-         fprintf_filtered (stream, len < 4 ? "%.11g" : "%.17g",
+         fprintf_filtered (stream, TYPE_LENGTH (type) < 4 ? "%.11g" : "%.17g",
                            (double) ada_fixed_to_float (type, v));
          return;
        }
@@ -811,36 +794,41 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
        }
 
     case TYPE_CODE_ENUM:
-      if (options->format)
-       {
-         val_print_scalar_formatted (type, valaddr, offset_aligned,
-                                     original_value, options, 0, stream);
-         break;
-       }
-      len = TYPE_NFIELDS (type);
-      val = unpack_long (type, valaddr + offset_aligned);
-      for (i = 0; i < len; i++)
-       {
-         QUIT;
-         if (val == TYPE_FIELD_BITPOS (type, i))
-           {
-             break;
-           }
-       }
-      if (i < len)
-       {
-         const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
+      {
+       unsigned int len;
+       LONGEST val;
 
-         if (name[0] == '\'')
-           fprintf_filtered (stream, "%ld %s", (long) val, name);
-         else
-           fputs_filtered (name, stream);
-       }
-      else
-       {
-         print_longest (stream, 'd', 0, val);
-       }
-      break;
+       if (options->format)
+         {
+           val_print_scalar_formatted (type, valaddr, offset_aligned,
+                                       original_value, options, 0, stream);
+           break;
+         }
+       len = TYPE_NFIELDS (type);
+       val = unpack_long (type, valaddr + offset_aligned);
+       for (i = 0; i < len; i++)
+         {
+           QUIT;
+           if (val == TYPE_FIELD_ENUMVAL (type, i))
+             {
+               break;
+             }
+         }
+       if (i < len)
+         {
+           const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
+
+           if (name[0] == '\'')
+             fprintf_filtered (stream, "%ld %s", (long) val, name);
+           else
+             fputs_filtered (name, stream);
+         }
+       else
+         {
+           print_longest (stream, 'd', 0, val);
+         }
+       break;
+      }
 
     case TYPE_CODE_FLT:
       if (options->format)
@@ -889,6 +877,9 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
          deref_val = coerce_ref_if_computed (original_value);
          if (deref_val)
            {
+             if (ada_is_tagged_type (value_type (deref_val), 1))
+               deref_val = ada_tag_value_at_base_address (deref_val);
+
              common_val_print (deref_val, stream, recurse + 1, options,
                                current_language);
              break;
@@ -897,11 +888,14 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
           deref_val_int = unpack_pointer (type, valaddr + offset_aligned);
           if (deref_val_int != 0)
             {
-              struct value *deref_val =
+              deref_val =
                 ada_value_ind (value_from_pointer
                                (lookup_pointer_type (elttype),
                                 deref_val_int));
 
+             if (ada_is_tagged_type (value_type (deref_val), 1))
+               deref_val = ada_tag_value_at_base_address (deref_val);
+
               val_print (value_type (deref_val),
                          value_contents_for_printing (deref_val),
                          value_embedded_offset (deref_val),
@@ -1007,7 +1001,7 @@ print_record (struct type *type, const gdb_byte *valaddr,
 
   if (print_field_values (type, valaddr, offset,
                          stream, recurse, val, options,
-                         0, type, offset) != 0 && options->pretty)
+                         0, type, offset) != 0 && options->prettyformat)
     {
       fprintf_filtered (stream, "\n");
       print_spaces_filtered (2 * recurse, stream);
@@ -1073,7 +1067,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr,
        fprintf_filtered (stream, ", ");
       comma_needed = 1;
 
-      if (options->pretty)
+      if (options->prettyformat)
        {
          fprintf_filtered (stream, "\n");
          print_spaces_filtered (2 + 2 * recurse, stream);
@@ -1082,29 +1076,14 @@ print_field_values (struct type *type, const gdb_byte *valaddr,
        {
          wrap_here (n_spaces (2 + 2 * recurse));
        }
-      if (options->inspect_it)
-       {
-         if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
-           fputs_filtered ("\"( ptr \"", stream);
-         else
-           fputs_filtered ("\"( nodef \"", stream);
-         fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
-                                  language_cplus, DMGL_NO_OPTS);
-         fputs_filtered ("\" \"", stream);
-         fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
-                                  language_cplus, DMGL_NO_OPTS);
-         fputs_filtered ("\") \"", stream);
-       }
-      else
-       {
-         annotate_field_begin (TYPE_FIELD_TYPE (type, i));
-         fprintf_filtered (stream, "%.*s",
-                           ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
-                           TYPE_FIELD_NAME (type, i));
-         annotate_field_name_end ();
-         fputs_filtered (" => ", stream);
-         annotate_field_value ();
-       }
+
+      annotate_field_begin (TYPE_FIELD_TYPE (type, i));
+      fprintf_filtered (stream, "%.*s",
+                       ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
+                       TYPE_FIELD_NAME (type, i));
+      annotate_field_name_end ();
+      fputs_filtered (" => ", stream);
+      annotate_field_value ();
 
       if (TYPE_FIELD_PACKED (type, i))
        {
This page took 0.027575 seconds and 4 git commands to generate.