* configure.in: Recognize i486 host cpu.
* valprint.c (type_print_derivation_info): Print derivation info in same form as class declarations in source. * valprint.c (type_print_varspec_suffix): Split arg printing code out to type_print_args function.
This commit is contained in:
parent
6030489a3a
commit
9e4667f601
@ -1,3 +1,11 @@
|
||||
Mon Aug 3 00:25:56 1992 Fred Fish (fnf@cygnus.com)
|
||||
|
||||
* configure.in: Recognize i486 host cpu.
|
||||
* valprint.c (type_print_derivation_info): Print derivation info
|
||||
in same form as class declarations in source.
|
||||
* valprint.c (type_print_varspec_suffix): Split arg printing
|
||||
code out to type_print_args function.
|
||||
|
||||
Sat Aug 1 13:32:58 1992 Fred Fish (fnf@cygnus.com)
|
||||
|
||||
* dwarfread.c (struct dieinfo): Remove obsolete at_visibility,
|
||||
|
@ -94,7 +94,7 @@ i860)
|
||||
gdb_host=stratus
|
||||
;;
|
||||
|
||||
i386)
|
||||
i386 | i486)
|
||||
case "${host_vendor}" in
|
||||
sun) gdb_host=sun386 ;;
|
||||
sco) gdb_host=i386sco ;;
|
||||
@ -304,7 +304,7 @@ h8300)
|
||||
i860) gdb_target=stratus
|
||||
;;
|
||||
|
||||
i386)
|
||||
i386 | i486)
|
||||
case "${target_vendor}" in
|
||||
sco) gdb_target=i386sco ;;
|
||||
sun) gdb_target=sun386 ;;
|
||||
|
182
gdb/valprint.c
182
gdb/valprint.c
@ -51,6 +51,9 @@ set_output_radix PARAMS ((char *, int, struct cmd_list_element *));
|
||||
static void
|
||||
type_print_base PARAMS ((struct type *, FILE *, int, int));
|
||||
|
||||
static void
|
||||
type_print_args PARAMS ((struct type *, FILE *));
|
||||
|
||||
static void
|
||||
type_print_varspec_suffix PARAMS ((struct type *, FILE *, int, int, int));
|
||||
|
||||
@ -1431,46 +1434,46 @@ type_print_method_args (args, prefix, varstring, staticp, stream)
|
||||
fprintf_filtered (stream, ")");
|
||||
}
|
||||
|
||||
/* If TYPE is a derived type, then print out derivation
|
||||
information. Print out all layers of the type heirarchy
|
||||
until we encounter one with multiple inheritance.
|
||||
At that point, print out that ply, and return. */
|
||||
/* If TYPE is a derived type, then print out derivation information.
|
||||
Print only the actual base classes of this type, not the base classes
|
||||
of the base classes. I.E. for the derivation hierarchy:
|
||||
|
||||
class A { int a; };
|
||||
class B : public A {int b; };
|
||||
class C : public B {int c; };
|
||||
|
||||
Print the type of class C as:
|
||||
|
||||
class C : public B {
|
||||
int c;
|
||||
}
|
||||
|
||||
Not as the following (like gdb used to), which is not legal C++ syntax for
|
||||
derived types and may be confused with the multiple inheritance form:
|
||||
|
||||
class C : public B : public A {
|
||||
int c;
|
||||
}
|
||||
|
||||
In general, gdb should try to print the types as closely as possible to
|
||||
the form that they appear in the source code. */
|
||||
|
||||
static void
|
||||
type_print_derivation_info (stream, type)
|
||||
FILE *stream;
|
||||
struct type *type;
|
||||
{
|
||||
char *name;
|
||||
int i, n_baseclasses = TYPE_N_BASECLASSES (type);
|
||||
struct type *basetype = 0;
|
||||
int i;
|
||||
|
||||
while (type && n_baseclasses > 0)
|
||||
for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
|
||||
{
|
||||
/* Not actually sure about this one -- Bryan. */
|
||||
check_stub_type (type);
|
||||
|
||||
fprintf_filtered (stream, ": ");
|
||||
for (i = 0; ;)
|
||||
{
|
||||
basetype = TYPE_BASECLASS (type, i);
|
||||
if (name = type_name_no_tag (basetype))
|
||||
{
|
||||
fprintf_filtered (stream, "%s%s ",
|
||||
BASETYPE_VIA_PUBLIC(type, i) ? "public" : "private",
|
||||
BASETYPE_VIA_VIRTUAL(type, i) ? " virtual" : "");
|
||||
fputs_filtered (name, stream);
|
||||
}
|
||||
i++;
|
||||
if (i >= n_baseclasses)
|
||||
break;
|
||||
fprintf_filtered (stream, ", ");
|
||||
}
|
||||
|
||||
fprintf_filtered (stream, " ");
|
||||
if (n_baseclasses != 1)
|
||||
break;
|
||||
n_baseclasses = TYPE_N_BASECLASSES (basetype);
|
||||
type = basetype;
|
||||
fputs_filtered (i == 0 ? ": " : ", ", stream);
|
||||
fprintf_filtered (stream, "%s%s ",
|
||||
BASETYPE_VIA_PUBLIC (type, i) ? "public" : "private",
|
||||
BASETYPE_VIA_VIRTUAL(type, i) ? " virtual" : "");
|
||||
name = type_name_no_tag (TYPE_BASECLASS (type, i));
|
||||
fprintf_filtered (stream, "%s ", name ? name : "(null)");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1571,6 +1574,44 @@ type_print_varspec_prefix (type, stream, show, passed_a_ptr)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
type_print_args (type, stream)
|
||||
struct type *type;
|
||||
FILE *stream;
|
||||
{
|
||||
int i;
|
||||
struct type **args;
|
||||
|
||||
fprintf_filtered (stream, "(");
|
||||
args = TYPE_ARG_TYPES (type);
|
||||
if (args != NULL)
|
||||
{
|
||||
if (args[1] == NULL)
|
||||
{
|
||||
fprintf_filtered (stream, "...");
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 1;
|
||||
args[i] != NULL && args[i]->code != TYPE_CODE_VOID;
|
||||
i++)
|
||||
{
|
||||
type_print_1 (args[i], "", stream, -1, 0);
|
||||
if (args[i+1] == NULL)
|
||||
{
|
||||
fprintf_filtered (stream, "...");
|
||||
}
|
||||
else if (args[i+1]->code != TYPE_CODE_VOID)
|
||||
{
|
||||
fprintf_filtered (stream, ",");
|
||||
wrap_here (" ");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fprintf_filtered (stream, ")");
|
||||
}
|
||||
|
||||
/* Print any array sizes, function arguments or close parentheses
|
||||
needed after the variable name (to describe its type).
|
||||
Args work like type_print_varspec_prefix. */
|
||||
@ -1621,23 +1662,7 @@ type_print_varspec_suffix (type, stream, show, passed_a_ptr, demangled_args)
|
||||
type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
|
||||
if (passed_a_ptr)
|
||||
{
|
||||
int i;
|
||||
struct type **args = TYPE_ARG_TYPES (type);
|
||||
|
||||
fprintf_filtered (stream, "(");
|
||||
if (args[1] == 0)
|
||||
fprintf_filtered (stream, "...");
|
||||
else for (i = 1; args[i] != 0 && args[i]->code != TYPE_CODE_VOID; i++)
|
||||
{
|
||||
type_print_1 (args[i], "", stream, -1, 0);
|
||||
if (args[i+1] == 0)
|
||||
fprintf_filtered (stream, "...");
|
||||
else if (args[i+1]->code != TYPE_CODE_VOID) {
|
||||
fprintf_filtered (stream, ",");
|
||||
wrap_here (" ");
|
||||
}
|
||||
}
|
||||
fprintf_filtered (stream, ")");
|
||||
type_print_args (type, stream);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1752,22 +1777,25 @@ type_print_base (type, stream, show, level)
|
||||
|
||||
type_print_derivation_info (stream, type);
|
||||
|
||||
fprintf_filtered (stream, "{");
|
||||
len = TYPE_NFIELDS (type);
|
||||
if (len)
|
||||
fprintf_filtered (stream, "\n");
|
||||
else
|
||||
fprintf_filtered (stream, "{\n");
|
||||
if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
|
||||
{
|
||||
if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
|
||||
fprintf_filtered (stream, "<incomplete type>\n");
|
||||
fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
|
||||
else
|
||||
fprintf_filtered (stream, "<no data fields>\n");
|
||||
fprintfi_filtered (level + 4, stream, "<no data fields>\n");
|
||||
}
|
||||
|
||||
/* Start off with no specific section type, so we can print
|
||||
one for the first field we find, and use that section type
|
||||
thereafter until we find another type. */
|
||||
|
||||
section_type = s_none;
|
||||
|
||||
/* If there is a base class for this type,
|
||||
do not print the field that it occupies. */
|
||||
|
||||
section_type = s_none;
|
||||
len = TYPE_NFIELDS (type);
|
||||
for (i = TYPE_N_BASECLASSES (type); i < len; i++)
|
||||
{
|
||||
QUIT;
|
||||
@ -1786,8 +1814,8 @@ type_print_base (type, stream, show, level)
|
||||
if (section_type != s_protected)
|
||||
{
|
||||
section_type = s_protected;
|
||||
print_spaces_filtered (level + 4, stream);
|
||||
fprintf_filtered (stream, "protected:\n");
|
||||
fprintfi_filtered (level + 2, stream,
|
||||
"protected:\n");
|
||||
}
|
||||
}
|
||||
else if (TYPE_FIELD_PRIVATE (type, i))
|
||||
@ -1795,8 +1823,7 @@ type_print_base (type, stream, show, level)
|
||||
if (section_type != s_private)
|
||||
{
|
||||
section_type = s_private;
|
||||
print_spaces_filtered (level + 4, stream);
|
||||
fprintf_filtered (stream, "private:\n");
|
||||
fprintfi_filtered (level + 2, stream, "private:\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1804,8 +1831,7 @@ type_print_base (type, stream, show, level)
|
||||
if (section_type != s_public)
|
||||
{
|
||||
section_type = s_public;
|
||||
print_spaces_filtered (level + 4, stream);
|
||||
fprintf_filtered (stream, "public:\n");
|
||||
fprintfi_filtered (level + 2, stream, "public:\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1834,7 +1860,6 @@ type_print_base (type, stream, show, level)
|
||||
|
||||
/* C++: print out the methods */
|
||||
len = TYPE_NFN_FIELDS (type);
|
||||
if (len) fprintf_filtered (stream, "\n");
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
|
||||
@ -1844,6 +1869,32 @@ type_print_base (type, stream, show, level)
|
||||
for (j = 0; j < len2; j++)
|
||||
{
|
||||
QUIT;
|
||||
if (TYPE_FN_FIELD_PROTECTED (f, j))
|
||||
{
|
||||
if (section_type != s_protected)
|
||||
{
|
||||
section_type = s_protected;
|
||||
fprintfi_filtered (level + 2, stream,
|
||||
"protected:\n");
|
||||
}
|
||||
}
|
||||
else if (TYPE_FN_FIELD_PRIVATE (f, j))
|
||||
{
|
||||
if (section_type != s_private)
|
||||
{
|
||||
section_type = s_private;
|
||||
fprintfi_filtered (level + 2, stream, "private:\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (section_type != s_public)
|
||||
{
|
||||
section_type = s_public;
|
||||
fprintfi_filtered (level + 2, stream, "public:\n");
|
||||
}
|
||||
}
|
||||
|
||||
print_spaces_filtered (level + 4, stream);
|
||||
if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
|
||||
fprintf_filtered (stream, "virtual ");
|
||||
@ -1895,8 +1946,7 @@ type_print_base (type, stream, show, level)
|
||||
}
|
||||
}
|
||||
|
||||
print_spaces_filtered (level, stream);
|
||||
fprintf_filtered (stream, "}");
|
||||
fprintfi_filtered (level, stream, "}");
|
||||
}
|
||||
break;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user