/* Support for printing C values for GDB, the GNU debugger.
- Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ Copyright 1986, 1988, 1989, 1991-1997, 2000
Free Software Foundation, Inc.
This file is part of GDB.
char *valaddr;
int embedded_offset;
CORE_ADDR address;
- GDB_FILE *stream;
+ struct ui_file *stream;
int format;
int deref_ref;
int recurse;
elements up to it. */
if (stop_print_at_null)
{
- int temp_len;
+ unsigned int temp_len;
/* Look for a NULL char. */
for (temp_len = 0;
int
c_value_print (val, stream, format, pretty)
value_ptr val;
- GDB_FILE *stream;
+ struct ui_file *stream;
int format;
enum val_prettyprint pretty;
{
{
/* Pointer to class, check real type of object */
fprintf_filtered (stream, "(");
- type = value_rtti_target_type (val, &full, &top, &using_enc);
- if (type)
+ real_type = value_rtti_target_type (val, &full, &top, &using_enc);
+ if (real_type)
{
/* RTTI entry found */
- type = lookup_pointer_type (type);
- type_print (type, "", stream, -1);
- }
- else
- {
- /* No RTTI fields, do whatever we can */
- type = VALUE_ENCLOSING_TYPE (val);
- type_print (type, "", stream, -1);
- fprintf_filtered (stream, " ?");
- }
+ if (TYPE_CODE (type) == TYPE_CODE_PTR)
+ {
+ /* create a pointer type pointing to the real type */
+ type = lookup_pointer_type (real_type);
+ }
+ else
+ {
+ /* create a reference type referencing the real type */
+ type = lookup_reference_type (real_type);
+ }
+ /* Note: When we look up RTTI entries, we don't get any
+ information on const or volatile attributes */
+ }
+ type_print (type, "", stream, -1);
fprintf_filtered (stream, ") ");
}
else
/* Print out object: enclosing type is same as real_type if full */
return val_print (VALUE_ENCLOSING_TYPE (val), VALUE_CONTENTS_ALL (val), 0,
VALUE_ADDRESS (val), stream, format, 1, 0, pretty);
+ /* 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))
{