include/elf/ChangeLog:
[deliverable/binutils-gdb.git] / gdb / p-valprint.c
index b18e7cf0daf6e09ecfa3fc59bd337b2f6729e845..72be1f508c411f252778bc97dba0255c7ecc9d24 100644 (file)
@@ -1,6 +1,6 @@
 /* Support for printing Pascal values for GDB, the GNU debugger.
 /* Support for printing Pascal values for GDB, the GNU debugger.
-   Copyright 2000
-   Free Software Foundation, Inc.
+
+   Copyright (C) 2000, 2001, 2003, 2005 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 
    This file is part of GDB.
 
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 /* This file is derived from c-valprint.c */
 
 #include "defs.h"
 
 /* This file is derived from c-valprint.c */
 
 #include "defs.h"
-#include "obstack.h"
+#include "gdb_obstack.h"
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "expression.h"
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "expression.h"
 #include "gdbcore.h"
 #include "demangle.h"
 #include "valprint.h"
 #include "gdbcore.h"
 #include "demangle.h"
 #include "valprint.h"
+#include "typeprint.h"
 #include "language.h"
 #include "target.h"
 #include "annotate.h"
 #include "p-lang.h"
 #include "language.h"
 #include "target.h"
 #include "annotate.h"
 #include "p-lang.h"
+#include "cp-abi.h"
+#include "cp-support.h"
 \f
 
 
 \f
 
 
 
 
 int
 
 
 int
-pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref_ref, recurse,
-                 pretty)
-     struct type *type;
-     char *valaddr;
-     int embedded_offset;
-     CORE_ADDR address;
-     struct ui_file *stream;
-     int format;
-     int deref_ref;
-     int recurse;
-     enum val_prettyprint pretty;
+pascal_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)
 {
 {
-  register unsigned int i = 0; /* Number of characters printed */
+  unsigned int i = 0;  /* Number of characters printed */
   unsigned len;
   struct type *elttype;
   unsigned eltlen;
   unsigned len;
   struct type *elttype;
   unsigned eltlen;
+  int length_pos, length_size, string_pos;
+  int char_size;
   LONGEST val;
   CORE_ADDR addr;
 
   LONGEST val;
   CORE_ADDR addr;
 
@@ -145,7 +144,8 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
          /* Print the unmangled name if desired.  */
          /* Print vtable entry - we only get here if we ARE using
             -fvtable_thunks.  (Otherwise, look under TYPE_CODE_STRUCT.) */
          /* Print the unmangled name if desired.  */
          /* Print vtable entry - we only get here if we ARE using
             -fvtable_thunks.  (Otherwise, look under TYPE_CODE_STRUCT.) */
-         print_address_demangle (extract_address (valaddr + embedded_offset, TYPE_LENGTH (type)),
+         /* Extract the address, assume that it is unsigned.  */
+         print_address_demangle (extract_unsigned_integer (valaddr + embedded_offset, TYPE_LENGTH (type)),
                                  stream, demangle);
          break;
        }
                                  stream, demangle);
          break;
        }
@@ -176,7 +176,7 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
 
          if (addressprint && format != 's')
            {
 
          if (addressprint && format != 's')
            {
-             print_address_numeric (addr, 1, stream);
+             deprecated_print_address_numeric (addr, 1, stream);
            }
 
          /* For a pointer to char or unsigned char, also print the string
            }
 
          /* For a pointer to char or unsigned char, also print the string
@@ -194,16 +194,17 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
             as GDB does not recognize stabs pascal strings
             Pascal strings are mapped to records
             with lowercase names PM  */
             as GDB does not recognize stabs pascal strings
             Pascal strings are mapped to records
             with lowercase names PM  */
-         /* I don't know what GPC does :( PM */
-         if (TYPE_CODE (elttype) == TYPE_CODE_STRUCT &&
-             TYPE_NFIELDS (elttype) == 2 &&
-             strcmp (TYPE_FIELDS (elttype)[0].name, "length") == 0 &&
-             strcmp (TYPE_FIELDS (elttype)[1].name, "st") == 0 &&
-             addr != 0)
+          if (is_pascal_string_type (elttype, &length_pos, &length_size,
+                                     &string_pos, &char_size, NULL)
+             && addr != 0)
            {
            {
-             char bytelength;
-             read_memory (addr, &bytelength, 1);
-             i = val_print_string (addr + 1, bytelength, 1, stream);
+             ULONGEST string_length;
+              void *buffer;
+              buffer = xmalloc (length_size);
+              read_memory (addr + length_pos, buffer, length_size);
+             string_length = extract_unsigned_integer (buffer, length_size);
+              xfree (buffer);
+              i = val_print_string (addr + string_pos, string_length, char_size, stream);
            }
          else if (pascal_object_is_vtbl_member (type))
            {
            }
          else if (pascal_object_is_vtbl_member (type))
            {
@@ -212,25 +213,24 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
 
              struct minimal_symbol *msymbol =
              lookup_minimal_symbol_by_pc (vt_address);
 
              struct minimal_symbol *msymbol =
              lookup_minimal_symbol_by_pc (vt_address);
-             if ((msymbol != NULL) &&
-                 (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
+             if ((msymbol != NULL)
+                 && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
                {
                  fputs_filtered (" <", stream);
                {
                  fputs_filtered (" <", stream);
-                 fputs_filtered (SYMBOL_SOURCE_NAME (msymbol), stream);
+                 fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
                  fputs_filtered (">", stream);
                }
              if (vt_address && vtblprint)
                {
                  fputs_filtered (">", stream);
                }
              if (vt_address && vtblprint)
                {
-                 value_ptr vt_val;
+                 struct value *vt_val;
                  struct symbol *wsym = (struct symbol *) NULL;
                  struct type *wtype;
                  struct symbol *wsym = (struct symbol *) NULL;
                  struct type *wtype;
-                 struct symtab *s;
                  struct block *block = (struct block *) NULL;
                  int is_this_fld;
 
                  if (msymbol != NULL)
                  struct block *block = (struct block *) NULL;
                  int is_this_fld;
 
                  if (msymbol != NULL)
-                   wsym = lookup_symbol (SYMBOL_NAME (msymbol), block,
-                                         VAR_NAMESPACE, &is_this_fld, &s);
+                   wsym = lookup_symbol (DEPRECATED_SYMBOL_NAME (msymbol), block,
+                                         VAR_DOMAIN, &is_this_fld, NULL);
 
                  if (wsym)
                    {
 
                  if (wsym)
                    {
@@ -240,10 +240,9 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
                    {
                      wtype = TYPE_TARGET_TYPE (type);
                    }
                    {
                      wtype = TYPE_TARGET_TYPE (type);
                    }
-                 vt_val = value_at (wtype, vt_address, NULL);
-                 val_print (VALUE_TYPE (vt_val), VALUE_CONTENTS (vt_val), 0,
-                            VALUE_ADDRESS (vt_val), stream, format,
-                            deref_ref, recurse + 1, pretty);
+                 vt_val = value_at (wtype, vt_address);
+                 common_val_print (vt_val, stream, format, deref_ref,
+                                   recurse + 1, pretty);
                  if (pretty)
                    {
                      fprintf_filtered (stream, "\n");
                  if (pretty)
                    {
                      fprintf_filtered (stream, "\n");
@@ -260,7 +259,7 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
       break;
 
     case TYPE_CODE_MEMBER:
       break;
 
     case TYPE_CODE_MEMBER:
-      error ("not implemented: member type in pascal_val_print");
+      error (_("not implemented: member type in pascal_val_print"));
       break;
 
     case TYPE_CODE_REF:
       break;
 
     case TYPE_CODE_REF:
@@ -275,9 +274,11 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
       if (addressprint)
        {
          fprintf_filtered (stream, "@");
       if (addressprint)
        {
          fprintf_filtered (stream, "@");
-         print_address_numeric
-           (extract_address (valaddr + embedded_offset,
-                             TARGET_PTR_BIT / HOST_CHAR_BIT), 1, stream);
+         /* Extract the address, assume that it is unsigned.  */
+         deprecated_print_address_numeric
+           (extract_unsigned_integer (valaddr + embedded_offset,
+                                      TARGET_PTR_BIT / HOST_CHAR_BIT),
+            1, stream);
          if (deref_ref)
            fputs_filtered (": ", stream);
        }
          if (deref_ref)
            fputs_filtered (": ", stream);
        }
@@ -286,16 +287,13 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
        {
          if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
            {
        {
          if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
            {
-             value_ptr deref_val =
+             struct value *deref_val =
              value_at
              (TYPE_TARGET_TYPE (type),
               unpack_pointer (lookup_pointer_type (builtin_type_void),
              value_at
              (TYPE_TARGET_TYPE (type),
               unpack_pointer (lookup_pointer_type (builtin_type_void),
-                              valaddr + embedded_offset),
-              NULL);
-             val_print (VALUE_TYPE (deref_val),
-                        VALUE_CONTENTS (deref_val), 0,
-                        VALUE_ADDRESS (deref_val), stream, format,
-                        deref_ref, recurse + 1, pretty);
+                              valaddr + embedded_offset));
+             common_val_print (deref_val, stream, format, deref_ref,
+                               recurse + 1, pretty);
            }
          else
            fputs_filtered ("???", stream);
            }
          else
            fputs_filtered ("???", stream);
@@ -315,19 +313,19 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
          /* Print the unmangled name if desired.  */
          /* Print vtable entry - we only get here if NOT using
             -fvtable_thunks.  (Otherwise, look under TYPE_CODE_PTR.) */
          /* Print the unmangled name if desired.  */
          /* Print vtable entry - we only get here if NOT using
             -fvtable_thunks.  (Otherwise, look under TYPE_CODE_PTR.) */
-         print_address_demangle (extract_address (
-                                                   valaddr + embedded_offset + TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8,
-                 TYPE_LENGTH (TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET))),
-                                 stream, demangle);
+         /* Extract the address, assume that it is unsigned.  */
+         print_address_demangle
+           (extract_unsigned_integer (valaddr + embedded_offset + TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8,
+                                      TYPE_LENGTH (TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET))),
+            stream, demangle);
        }
       else
        {
        }
       else
        {
-         if ((TYPE_NFIELDS (type) == 2) &&
-             (strcmp (TYPE_FIELDS (type)[0].name, "length") == 0) &&
-             (strcmp (TYPE_FIELDS (type)[1].name, "st") == 0))
+          if (is_pascal_string_type (type, &length_pos, &length_size,
+                                     &string_pos, &char_size, NULL))
            {
            {
-             len = (*(valaddr + embedded_offset)) & 0xff;
-             LA_PRINT_STRING (stream, valaddr + embedded_offset + 1, len, /* width ?? */ 0, 0);
+             len = extract_unsigned_integer (valaddr + embedded_offset + length_pos, length_size);
+             LA_PRINT_STRING (stream, valaddr + embedded_offset + string_pos, len, char_size, 0);
            }
          else
            pascal_object_print_value_fields (type, valaddr + embedded_offset, address, stream, format,
            }
          else
            pascal_object_print_value_fields (type, valaddr + embedded_offset, address, stream, format,
@@ -450,7 +448,7 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
     case TYPE_CODE_SET:
       elttype = TYPE_INDEX_TYPE (type);
       CHECK_TYPEDEF (elttype);
     case TYPE_CODE_SET:
       elttype = TYPE_INDEX_TYPE (type);
       CHECK_TYPEDEF (elttype);
-      if (TYPE_FLAGS (elttype) & TYPE_FLAG_STUB)
+      if (TYPE_STUB (elttype))
        {
          fprintf_filtered (stream, "<incomplete type>");
          gdb_flush (stream);
        {
          fprintf_filtered (stream, "<incomplete type>");
          gdb_flush (stream);
@@ -529,20 +527,17 @@ pascal_val_print (type, valaddr, embedded_offset, address, stream, format, deref
       break;
 
     default:
       break;
 
     default:
-      error ("Invalid pascal type code %d in symbol table.", TYPE_CODE (type));
+      error (_("Invalid pascal type code %d in symbol table."), TYPE_CODE (type));
     }
   gdb_flush (stream);
   return (0);
 }
 \f
 int
     }
   gdb_flush (stream);
   return (0);
 }
 \f
 int
-pascal_value_print (val, stream, format, pretty)
-     value_ptr val;
-     struct ui_file *stream;
-     int format;
-     enum val_prettyprint pretty;
+pascal_value_print (struct value *val, struct ui_file *stream, int format,
+                   enum val_prettyprint pretty)
 {
 {
-  struct type *type = VALUE_TYPE (val);
+  struct type *type = value_type (val);
 
   /* If it is a pointer, indicate what it points to.
 
 
   /* If it is a pointer, indicate what it points to.
 
@@ -557,8 +552,8 @@ pascal_value_print (val, stream, format, pretty)
          type is indicated by the quoted string anyway. */
       if (TYPE_CODE (type) == TYPE_CODE_PTR &&
          TYPE_NAME (type) == NULL &&
          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 &&
-         STREQ (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char"))
+         TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL
+         && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
        {
          /* Print nothing */
        }
        {
          /* Print nothing */
        }
@@ -569,9 +564,7 @@ pascal_value_print (val, stream, format, pretty)
          fprintf_filtered (stream, ") ");
        }
     }
          fprintf_filtered (stream, ") ");
        }
     }
-  return val_print (type, VALUE_CONTENTS (val), VALUE_EMBEDDED_OFFSET (val),
-                   VALUE_ADDRESS (val) + VALUE_OFFSET (val),
-                   stream, format, 1, 0, pretty);
+  return common_val_print (val, stream, format, 1, 0, pretty);
 }
 
 
 }
 
 
@@ -583,23 +576,29 @@ extern int vtblprint;             /* Controls printing of vtbl's */
 extern int objectprint;                /* Controls looking up an object's derived type
                                   using what we find in its vtables.  */
 static int pascal_static_field_print;  /* Controls printing of static fields. */
 extern int objectprint;                /* Controls looking up an object's derived type
                                   using what we find in its vtables.  */
 static int pascal_static_field_print;  /* Controls printing of static fields. */
+static void
+show_pascal_static_field_print (struct ui_file *file, int from_tty,
+                               struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("Printing of pascal static members is %s.\n"),
+                   value);
+}
 
 static struct obstack dont_print_vb_obstack;
 static struct obstack dont_print_statmem_obstack;
 
 
 static struct obstack dont_print_vb_obstack;
 static struct obstack dont_print_statmem_obstack;
 
-static void
-  pascal_object_print_static_field (struct type *, value_ptr, struct ui_file *, int, int,
-                                   enum val_prettyprint);
+static void pascal_object_print_static_field (struct value *,
+                                             struct ui_file *, int, int,
+                                             enum val_prettyprint);
 
 
-static void
-  pascal_object_print_value (struct type *, char *, CORE_ADDR, struct ui_file *,
-                            int, int, enum val_prettyprint, struct type **);
+static void pascal_object_print_value (struct type *, const gdb_byte *,
+                                      CORE_ADDR, struct ui_file *,
+                                      int, int, enum val_prettyprint,
+                                      struct type **);
 
 void
 
 void
-pascal_object_print_class_method (valaddr, type, stream)
-     char *valaddr;
-     struct type *type;
-     struct ui_file *stream;
+pascal_object_print_class_method (const gdb_byte *valaddr, struct type *type,
+                                 struct ui_file *stream)
 {
   struct type *domain;
   struct fn_field *f = NULL;
 {
   struct type *domain;
   struct fn_field *f = NULL;
@@ -629,13 +628,11 @@ pascal_object_print_class_method (valaddr, type, stream)
          f = TYPE_FN_FIELDLIST1 (domain, i);
          len2 = TYPE_FN_FIELDLIST_LENGTH (domain, i);
 
          f = TYPE_FN_FIELDLIST1 (domain, i);
          len2 = TYPE_FN_FIELDLIST_LENGTH (domain, i);
 
+         check_stub_method_group (domain, i);
          for (j = 0; j < len2; j++)
            {
          for (j = 0; j < len2; j++)
            {
-             QUIT;
              if (TYPE_FN_FIELD_VOFFSET (f, j) == offset)
                {
              if (TYPE_FN_FIELD_VOFFSET (f, j) == offset)
                {
-                 if (TYPE_FN_FIELD_STUB (f, j))
-                   check_stub_method (domain, i, j);
                  kind = "virtual ";
                  goto common;
                }
                  kind = "virtual ";
                  goto common;
                }
@@ -647,7 +644,7 @@ pascal_object_print_class_method (valaddr, type, stream)
       sym = find_pc_function (addr);
       if (sym == 0)
        {
       sym = find_pc_function (addr);
       if (sym == 0)
        {
-         error ("invalid pointer to member function");
+         error (_("invalid pointer to member function"));
        }
       len = TYPE_NFN_FIELDS (domain);
       for (i = 0; i < len; i++)
        }
       len = TYPE_NFN_FIELDS (domain);
       for (i = 0; i < len; i++)
@@ -655,15 +652,11 @@ pascal_object_print_class_method (valaddr, type, stream)
          f = TYPE_FN_FIELDLIST1 (domain, i);
          len2 = TYPE_FN_FIELDLIST_LENGTH (domain, i);
 
          f = TYPE_FN_FIELDLIST1 (domain, i);
          len2 = TYPE_FN_FIELDLIST_LENGTH (domain, i);
 
+         check_stub_method_group (domain, i);
          for (j = 0; j < len2; j++)
            {
          for (j = 0; j < len2; j++)
            {
-             QUIT;
-             if (TYPE_FN_FIELD_STUB (f, j))
-               check_stub_method (domain, i, j);
-             if (STREQ (SYMBOL_NAME (sym), TYPE_FN_FIELD_PHYSNAME (f, j)))
-               {
-                 goto common;
-               }
+             if (DEPRECATED_STREQ (DEPRECATED_SYMBOL_NAME (sym), TYPE_FN_FIELD_PHYSNAME (f, j)))
+               goto common;
            }
        }
     }
            }
        }
     }
@@ -673,7 +666,7 @@ common:
       char *demangled_name;
 
       fprintf_filtered (stream, "&");
       char *demangled_name;
 
       fprintf_filtered (stream, "&");
-      fprintf_filtered (stream, kind);
+      fputs_filtered (kind, stream);
       demangled_name = cplus_demangle (TYPE_FN_FIELD_PHYSNAME (f, j),
                                       DMGL_ANSI | DMGL_PARAMS);
       if (demangled_name == NULL)
       demangled_name = cplus_demangle (TYPE_FN_FIELD_PHYSNAME (f, j),
                                       DMGL_ANSI | DMGL_PARAMS);
       if (demangled_name == NULL)
@@ -682,7 +675,7 @@ common:
       else
        {
          fputs_filtered (demangled_name, stream);
       else
        {
          fputs_filtered (demangled_name, stream);
-         free (demangled_name);
+         xfree (demangled_name);
        }
     }
   else
        }
     }
   else
@@ -701,21 +694,19 @@ const char pascal_vtbl_ptr_name[] =
    "pointer to virtual function".  */
 
 int
    "pointer to virtual function".  */
 
 int
-pascal_object_is_vtbl_ptr_type (type)
-     struct type *type;
+pascal_object_is_vtbl_ptr_type (struct type *type)
 {
   char *typename = type_name_no_tag (type);
 
   return (typename != NULL
 {
   char *typename = type_name_no_tag (type);
 
   return (typename != NULL
-         && (STREQ (typename, pascal_vtbl_ptr_name)));
+         && strcmp (typename, pascal_vtbl_ptr_name) == 0);
 }
 
 /* Return truth value for the assertion that TYPE is of the type
    "pointer to virtual function table".  */
 
 int
 }
 
 /* Return truth value for the assertion that TYPE is of the type
    "pointer to virtual function table".  */
 
 int
-pascal_object_is_vtbl_member (type)
-     struct type *type;
+pascal_object_is_vtbl_member (struct type *type)
 {
   if (TYPE_CODE (type) == TYPE_CODE_PTR)
     {
 {
   if (TYPE_CODE (type) == TYPE_CODE_PTR)
     {
@@ -735,8 +726,9 @@ pascal_object_is_vtbl_member (type)
   return 0;
 }
 
   return 0;
 }
 
-/* Mutually recursive subroutines of pascal_object_print_value and c_val_print to
-   print out a structure's fields: pascal_object_print_value_fields and pascal_object_print_value.
+/* Mutually recursive subroutines of pascal_object_print_value and
+   c_val_print to print out a structure's fields:
+   pascal_object_print_value_fields and pascal_object_print_value.
 
    TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and PRETTY have the
    same meanings as in pascal_object_print_value and c_val_print.
 
    TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and PRETTY have the
    same meanings as in pascal_object_print_value and c_val_print.
@@ -745,17 +737,12 @@ pascal_object_is_vtbl_member (type)
    should not print, or zero if called from top level.  */
 
 void
    should not print, or zero if called from top level.  */
 
 void
-pascal_object_print_value_fields (type, valaddr, address, stream, format, recurse, pretty,
-                                 dont_print_vb, dont_print_statmem)
-     struct type *type;
-     char *valaddr;
-     CORE_ADDR address;
-     struct ui_file *stream;
-     int format;
-     int recurse;
-     enum val_prettyprint pretty;
-     struct type **dont_print_vb;
-     int dont_print_statmem;
+pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
+                                 CORE_ADDR address, struct ui_file *stream,
+                                 int format, int recurse,
+                                 enum val_prettyprint pretty,
+                                 struct type **dont_print_vb,
+                                 int dont_print_statmem)
 {
   int i, len, n_baseclasses;
   struct obstack tmp_obstack;
 {
   int i, len, n_baseclasses;
   struct obstack tmp_obstack;
@@ -777,7 +764,6 @@ pascal_object_print_value_fields (type, valaddr, address, stream, format, recurs
     fprintf_filtered (stream, "<No data fields>");
   else
     {
     fprintf_filtered (stream, "<No data fields>");
   else
     {
-      extern int inspect_it;
       int fields_seen = 0;
 
       if (dont_print_statmem == 0)
       int fields_seen = 0;
 
       if (dont_print_statmem == 0)
@@ -851,7 +837,7 @@ pascal_object_print_value_fields (type, valaddr, address, stream, format, recurs
 
          if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
            {
 
          if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
            {
-             value_ptr v;
+             struct value *v;
 
              /* Bitfields require special handling, especially due to byte
                 order problems.  */
 
              /* Bitfields require special handling, especially due to byte
                 order problems.  */
@@ -864,8 +850,7 @@ pascal_object_print_value_fields (type, valaddr, address, stream, format, recurs
                  v = value_from_longest (TYPE_FIELD_TYPE (type, i),
                                   unpack_field_as_long (type, valaddr, i));
 
                  v = value_from_longest (TYPE_FIELD_TYPE (type, i),
                                   unpack_field_as_long (type, valaddr, i));
 
-                 val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), 0, 0,
-                            stream, format, 0, recurse + 1, pretty);
+                 common_val_print (v, stream, format, 0, recurse + 1, pretty);
                }
            }
          else
                }
            }
          else
@@ -876,17 +861,16 @@ pascal_object_print_value_fields (type, valaddr, address, stream, format, recurs
                }
              else if (TYPE_FIELD_STATIC (type, i))
                {
                }
              else if (TYPE_FIELD_STATIC (type, i))
                {
-                 /* value_ptr v = value_static_field (type, i); v4.17 specific */
-                 value_ptr v;
+                 /* struct value *v = value_static_field (type, i); v4.17 specific */
+                 struct value *v;
                  v = value_from_longest (TYPE_FIELD_TYPE (type, i),
                                   unpack_field_as_long (type, valaddr, i));
 
                  if (v == NULL)
                    fputs_filtered ("<optimized out>", stream);
                  else
                  v = value_from_longest (TYPE_FIELD_TYPE (type, i),
                                   unpack_field_as_long (type, valaddr, i));
 
                  if (v == NULL)
                    fputs_filtered ("<optimized out>", stream);
                  else
-                   pascal_object_print_static_field (TYPE_FIELD_TYPE (type, i), v,
-                                               stream, format, recurse + 1,
-                                                     pretty);
+                   pascal_object_print_static_field (v, stream, format,
+                                                     recurse + 1, pretty);
                }
              else
                {
                }
              else
                {
@@ -924,16 +908,11 @@ pascal_object_print_value_fields (type, valaddr, address, stream, format, recurs
    baseclasses.  */
 
 void
    baseclasses.  */
 
 void
-pascal_object_print_value (type, valaddr, address, stream, format, recurse, pretty,
-                          dont_print_vb)
-     struct type *type;
-     char *valaddr;
-     CORE_ADDR address;
-     struct ui_file *stream;
-     int format;
-     int recurse;
-     enum val_prettyprint pretty;
-     struct type **dont_print_vb;
+pascal_object_print_value (struct type *type, const gdb_byte *valaddr,
+                          CORE_ADDR address, struct ui_file *stream,
+                          int format, int recurse,
+                          enum val_prettyprint pretty,
+                          struct type **dont_print_vb)
 {
   struct obstack tmp_obstack;
   struct type **last_dont_print
 {
   struct obstack tmp_obstack;
   struct type **last_dont_print
@@ -955,7 +934,7 @@ pascal_object_print_value (type, valaddr, address, stream, format, recurse, pret
       int boffset;
       struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
       char *basename = TYPE_NAME (baseclass);
       int boffset;
       struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
       char *basename = TYPE_NAME (baseclass);
-      char *base_valaddr;
+      const gdb_byte *base_valaddr;
 
       if (BASETYPE_VIA_VIRTUAL (type, i))
        {
 
       if (BASETYPE_VIA_VIRTUAL (type, i))
        {
@@ -992,8 +971,10 @@ pascal_object_print_value (type, valaddr, address, stream, format, recurse, pret
 
       if (boffset != -1 && (boffset < 0 || boffset >= TYPE_LENGTH (type)))
        {
 
       if (boffset != -1 && (boffset < 0 || boffset >= TYPE_LENGTH (type)))
        {
-         base_valaddr = (char *) alloca (TYPE_LENGTH (baseclass));
-         if (target_read_memory (address + boffset, base_valaddr,
+         /* FIXME (alloc): not safe is baseclass is really really big. */
+         gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
+         base_valaddr = buf;
+         if (target_read_memory (address + boffset, buf,
                                  TYPE_LENGTH (baseclass)) != 0)
            boffset = -1;
        }
                                  TYPE_LENGTH (baseclass)) != 0)
            boffset = -1;
        }
@@ -1030,18 +1011,16 @@ pascal_object_print_value (type, valaddr, address, stream, format, recurse, pret
    static member classes in an obstack and refuse to print them more
    than once.
 
    static member classes in an obstack and refuse to print them more
    than once.
 
-   VAL contains the value to print, TYPE, STREAM, RECURSE, and PRETTY
+   VAL contains the value to print, STREAM, RECURSE, and PRETTY
    have the same meanings as in c_val_print.  */
 
 static void
    have the same meanings as in c_val_print.  */
 
 static void
-pascal_object_print_static_field (type, val, stream, format, recurse, pretty)
-     struct type *type;
-     value_ptr val;
-     struct ui_file *stream;
-     int format;
-     int recurse;
-     enum val_prettyprint pretty;
+pascal_object_print_static_field (struct value *val,
+                                 struct ui_file *stream, int format,
+                                 int recurse, enum val_prettyprint pretty)
 {
 {
+  struct type *type = value_type (val);
+
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
     {
       CORE_ADDR *first_dont_print;
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
     {
       CORE_ADDR *first_dont_print;
@@ -1066,20 +1045,16 @@ pascal_object_print_static_field (type, val, stream, format, recurse, pretty)
                    sizeof (CORE_ADDR));
 
       CHECK_TYPEDEF (type);
                    sizeof (CORE_ADDR));
 
       CHECK_TYPEDEF (type);
-      pascal_object_print_value_fields (type, VALUE_CONTENTS (val), VALUE_ADDRESS (val),
+      pascal_object_print_value_fields (type, value_contents (val), VALUE_ADDRESS (val),
                                  stream, format, recurse, pretty, NULL, 1);
       return;
     }
                                  stream, format, recurse, pretty, NULL, 1);
       return;
     }
-  val_print (type, VALUE_CONTENTS (val), 0, VALUE_ADDRESS (val),
-            stream, format, 0, recurse, pretty);
+  common_val_print (val, stream, format, 0, recurse, pretty);
 }
 
 void
 }
 
 void
-pascal_object_print_class_member (valaddr, domain, stream, prefix)
-     char *valaddr;
-     struct type *domain;
-     struct ui_file *stream;
-     char *prefix;
+pascal_object_print_class_member (const gdb_byte *valaddr, struct type *domain,
+                                 struct ui_file *stream, char *prefix)
 {
 
   /* VAL is a byte offset into the structure type DOMAIN.
 {
 
   /* VAL is a byte offset into the structure type DOMAIN.
@@ -1087,7 +1062,7 @@ pascal_object_print_class_member (valaddr, domain, stream, prefix)
      print it.  */
   int extra = 0;
   int bits = 0;
      print it.  */
   int extra = 0;
   int bits = 0;
-  register unsigned int i;
+  unsigned int i;
   unsigned len = TYPE_NFIELDS (domain);
   /* @@ Make VAL into bit offset */
   LONGEST val = unpack_long (builtin_type_int, valaddr) << 3;
   unsigned len = TYPE_NFIELDS (domain);
   /* @@ Make VAL into bit offset */
   LONGEST val = unpack_long (builtin_type_int, valaddr) << 3;
@@ -1112,7 +1087,7 @@ pascal_object_print_class_member (valaddr, domain, stream, prefix)
   if (i < len)
     {
       char *name;
   if (i < len)
     {
       char *name;
-      fprintf_filtered (stream, prefix);
+      fputs_filtered (prefix, stream);
       name = type_name_no_tag (domain);
       if (name)
        fputs_filtered (name, stream);
       name = type_name_no_tag (domain);
       if (name)
        fputs_filtered (name, stream);
@@ -1129,16 +1104,18 @@ pascal_object_print_class_member (valaddr, domain, stream, prefix)
     fprintf_filtered (stream, "%ld", (long int) (val >> 3));
 }
 
     fprintf_filtered (stream, "%ld", (long int) (val >> 3));
 }
 
+extern initialize_file_ftype _initialize_pascal_valprint; /* -Wmissing-prototypes */
 
 void
 
 void
-_initialize_pascal_valprint ()
+_initialize_pascal_valprint (void)
 {
 {
-  add_show_from_set
-    (add_set_cmd ("pascal_static-members", class_support, var_boolean,
-                 (char *) &pascal_static_field_print,
-                 "Set printing of pascal static members.",
-                 &setprintlist),
-     &showprintlist);
+  add_setshow_boolean_cmd ("pascal_static-members", class_support,
+                          &pascal_static_field_print, _("\
+Set printing of pascal static members."), _("\
+Show printing of pascal static members."), NULL,
+                          NULL,
+                          show_pascal_static_field_print,
+                          &setprintlist, &showprintlist);
   /* Turn on printing of static fields.  */
   pascal_static_field_print = 1;
 
   /* Turn on printing of static fields.  */
   pascal_static_field_print = 1;
 
This page took 0.032135 seconds and 4 git commands to generate.