* dwarfread.c (alloc_utype, decode_subscr_data): Call alloc_type
to create new blank types, instead of handcrafting them. * defs.h (printfi_filtered): Add prototype. * utils.c (printfi_filtered): New function. * gdbtypes.c (recursive_dump_type): Use printfi_filtered to to simplify the code. Other cleanups. * gdbtypes.c (check_stub_method): Demangle using DMGL_ANSI. * gdbtypes.h (struct cplus_struct_type): Add comments describing use of various fields. * gdbtypes.c (print_bit_vector, print_cplus_stuff): New functions. * c-exp.y (%token): Add CLASS as a token for C++, add grammar production that currently treats it exactly the same as STRUCT. * c-exp.y (yylex): Recognize "class" as token CLASS. * symtab.c (gdb_mangle_name): Rewrite to match current g++ stabs. * symtab.c (decode_line_1): Fix to pass quoted args on down to general symbol handling code. Call cplus_mangle_opname with DMGL_ANSI. * symtab.c (decode_line_2): Print demangled function names in breakpoint menus, instead of just file and line number. * symtab.c (name_match): Call cplus_demangle with DMGL_ANSI. * valprint.c (type_print_base): Print "class" for C++ classes, rather than "struct". Print section labels for public, protected and private members of C++ classes. * values.c: Include demangle.h. * values.c (value_headof): Call cplus_demangle with DMGL_ANSI.
This commit is contained in:
parent
e17e8e0e03
commit
8050a57b2c
9 changed files with 332 additions and 144 deletions
|
@ -1700,7 +1700,7 @@ type_print_base (type, stream, show, level)
|
|||
register int lastval;
|
||||
char *mangled_name;
|
||||
char *demangled_name;
|
||||
|
||||
enum {s_none, s_public, s_private, s_protected} section_type;
|
||||
QUIT;
|
||||
|
||||
wrap_here (" ");
|
||||
|
@ -1731,7 +1731,8 @@ type_print_base (type, stream, show, level)
|
|||
break;
|
||||
|
||||
case TYPE_CODE_STRUCT:
|
||||
fprintf_filtered (stream, "struct ");
|
||||
fprintf_filtered (stream,
|
||||
HAVE_CPLUS_STRUCT (type) ? "class " : "struct ");
|
||||
goto struct_union;
|
||||
|
||||
case TYPE_CODE_UNION:
|
||||
|
@ -1765,6 +1766,8 @@ type_print_base (type, stream, show, level)
|
|||
|
||||
/* If there is a base class for this type,
|
||||
do not print the field that it occupies. */
|
||||
|
||||
section_type = s_none;
|
||||
for (i = TYPE_N_BASECLASSES (type); i < len; i++)
|
||||
{
|
||||
QUIT;
|
||||
|
@ -1773,6 +1776,40 @@ type_print_base (type, stream, show, level)
|
|||
!strncmp (TYPE_FIELD_NAME (type, i), "_vptr", 5))
|
||||
continue;
|
||||
|
||||
/* If this is a C++ class we can print the various C++ section
|
||||
labels. */
|
||||
|
||||
if (HAVE_CPLUS_STRUCT (type))
|
||||
{
|
||||
if (TYPE_FIELD_PROTECTED (type, i))
|
||||
{
|
||||
if (section_type != s_protected)
|
||||
{
|
||||
section_type = s_protected;
|
||||
print_spaces_filtered (level + 4, stream);
|
||||
fprintf_filtered (stream, "protected:\n");
|
||||
}
|
||||
}
|
||||
else if (TYPE_FIELD_PRIVATE (type, i))
|
||||
{
|
||||
if (section_type != s_private)
|
||||
{
|
||||
section_type = s_private;
|
||||
print_spaces_filtered (level + 4, stream);
|
||||
fprintf_filtered (stream, "private:\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (section_type != s_public)
|
||||
{
|
||||
section_type = s_public;
|
||||
print_spaces_filtered (level + 4, stream);
|
||||
fprintf_filtered (stream, "public:\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print_spaces_filtered (level + 4, stream);
|
||||
if (TYPE_FIELD_STATIC (type, i))
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue