/* Support for printing C++ values for GDB, the GNU debugger.
- Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
+ Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
1997, 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
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
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
#include "defs.h"
#include "gdb_obstack.h"
#include "target.h"
#include "cp-abi.h"
#include "valprint.h"
+#include "cp-support.h"
+#include "language.h"
+
+/* Controls printing of vtbl's */
+int vtblprint;
+static void
+show_vtblprint (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ fprintf_filtered (file, _("\
+Printing of C++ virtual function tables is %s.\n"),
+ value);
+}
+
+/* Controls looking up an object's derived type using what we find in
+ its vtables. */
+int objectprint;
+static void
+show_objectprint (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
+{
+ fprintf_filtered (file, _("\
+Printing of object's derived type based on vtable info is %s.\n"),
+ value);
+}
-int vtblprint; /* Controls printing of vtbl's */
-int objectprint; /* Controls looking up an object's derived type
- using what we find in its vtables. */
int static_field_print; /* Controls printing of static fields. */
+static void
+show_static_field_print (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c, const char *value)
+{
+ fprintf_filtered (file, _("Printing of C++ static members is %s.\n"),
+ value);
+}
+
static struct obstack dont_print_vb_obstack;
static struct obstack dont_print_statmem_obstack;
struct ui_file *, int, int,
enum val_prettyprint);
-static void cp_print_value (struct type *, struct type *, const bfd_byte *,
+static void cp_print_value (struct type *, struct type *, const gdb_byte *,
int, CORE_ADDR, struct ui_file *, int, int,
enum val_prettyprint, struct type **);
void
-cp_print_class_method (const bfd_byte *valaddr,
+cp_print_class_method (const gdb_byte *valaddr,
struct type *type,
struct ui_file *stream)
{
fputs_filtered ("?? <not supported with HP aCC>", stream);
return;
}
- error ("invalid pointer to member function");
+ error (_("invalid pointer to member function"));
}
len = TYPE_NFN_FIELDS (domain);
for (i = 0; i < len; i++)
void
cp_print_value_fields (struct type *type, struct type *real_type,
- const bfd_byte *valaddr, int offset, CORE_ADDR address,
+ const gdb_byte *valaddr, int offset, CORE_ADDR address,
struct ui_file *stream, int format, int recurse,
enum val_prettyprint pretty,
struct type **dont_print_vb,int dont_print_statmem)
if (TYPE_FIELD_STATIC (type, i))
fputs_filtered ("static ", stream);
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
- language_cplus,
+ current_language->la_language,
DMGL_PARAMS | DMGL_ANSI);
fputs_filtered ("\" \"", stream);
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
- language_cplus,
+ current_language->la_language,
DMGL_PARAMS | DMGL_ANSI);
fputs_filtered ("\") \"", stream);
}
if (TYPE_FIELD_STATIC (type, i))
fputs_filtered ("static ", stream);
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
- language_cplus,
+ current_language->la_language,
DMGL_PARAMS | DMGL_ANSI);
annotate_field_name_end ();
/* do not print leading '=' in case of anonymous unions */
(TYPE_FIELD_TYPE (type, i),
unpack_field_as_long (type, valaddr + offset, 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
v = value_from_pointer (lookup_pointer_type (builtin_type_unsigned_long),
*(unsigned long *) (valaddr + offset));
- val_print (value_type (v), value_contents (v), 0, 0,
- stream, format, 0, recurse + 1, pretty);
+ common_val_print (v, stream, format, 0, recurse + 1, pretty);
fields_seen = 1;
if (vtblprint)
static void
cp_print_value (struct type *type, struct type *real_type,
- const bfd_byte *valaddr, int offset, CORE_ADDR address,
+ const gdb_byte *valaddr, int offset, CORE_ADDR address,
struct ui_file *stream, int format, int recurse,
enum val_prettyprint pretty, struct type **dont_print_vb)
{
int skip;
struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
char *basename = TYPE_NAME (baseclass);
- const bfd_byte *base_valaddr;
+ const gdb_byte *base_valaddr;
if (BASETYPE_VIA_VIRTUAL (type, i))
{
find_rt_vbase_offset (type, TYPE_BASECLASS (type, i),
valaddr, offset, &boffset, &skip);
if (skip >= 0)
- error ("Virtual base class offset not found from vtable while"
- " printing");
+ error (_("Virtual base class offset not found from vtable while"
+ " printing"));
base_valaddr = valaddr;
}
else
|| (boffset + offset) >= TYPE_LENGTH (type)))
{
/* FIXME (alloca): unsafe if baseclass is really really large. */
- bfd_byte *buf = alloca (TYPE_LENGTH (baseclass));
+ gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
base_valaddr = buf;
if (target_read_memory (address + boffset, buf,
TYPE_LENGTH (baseclass)) != 0)
}
void
-cp_print_class_member (const bfd_byte *valaddr, struct type *domain,
+cp_print_class_member (const gdb_byte *valaddr, struct type *domain,
struct ui_file *stream, char *prefix)
{
if (value_lazy (vf))
(void) value_fetch_lazy (vf);
/* adjust by offset */
- vf->aligner.contents[0] += 4 * (HP_ACC_VFUNC_START + vx);
+ /* NOTE: cagney/2005-01-02: THIS IS BOGUS. */
+ value_contents_writeable (vf)[0] += 4 * (HP_ACC_VFUNC_START + vx);
vf = value_ind (vf); /* get the entry */
/* make it a pointer */
deprecated_set_value_type (vf, value_type (v));
/* print out the entry */
- val_print (value_type (vf), value_contents (vf), 0, 0,
- stream, format, 0, recurse + 1, pretty);
+ common_val_print (vf, stream, format, 0, recurse + 1, pretty);
field_physname
= TYPE_FN_FIELD_PHYSNAME (TYPE_FN_FIELDLIST1 (type, fn), oi);
/* pai: (temp) FIXME Maybe this should be DMGL_ANSI */
void
_initialize_cp_valprint (void)
{
- deprecated_add_show_from_set
- (add_set_cmd ("static-members", class_support, var_boolean,
- (char *) &static_field_print,
- "Set printing of C++ static members.",
- &setprintlist),
- &showprintlist);
+ add_setshow_boolean_cmd ("static-members", class_support,
+ &static_field_print, _("\
+Set printing of C++ static members."), _("\
+Show printing of C++ static members."), NULL,
+ NULL,
+ show_static_field_print,
+ &setprintlist, &showprintlist);
/* Turn on printing of static fields. */
static_field_print = 1;
- deprecated_add_show_from_set
- (add_set_cmd ("vtbl", class_support, var_boolean, (char *) &vtblprint,
- "Set printing of C++ virtual function tables.",
- &setprintlist),
- &showprintlist);
-
- deprecated_add_show_from_set
- (add_set_cmd ("object", class_support, var_boolean, (char *) &objectprint,
- "Set printing of object's derived type based on vtable info.",
- &setprintlist),
- &showprintlist);
+ add_setshow_boolean_cmd ("vtbl", class_support, &vtblprint, _("\
+Set printing of C++ virtual function tables."), _("\
+Show printing of C++ virtual function tables."), NULL,
+ NULL,
+ show_vtblprint,
+ &setprintlist, &showprintlist);
+
+ add_setshow_boolean_cmd ("object", class_support, &objectprint, _("\
+Set printing of object's derived type based on vtable info."), _("\
+Show printing of object's derived type based on vtable info."), NULL,
+ NULL,
+ show_objectprint,
+ &setprintlist, &showprintlist);
/* Give people the defaults which they are used to. */
objectprint = 0;