diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-05-24 15:44:12 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-05-24 15:44:12 +0000 |
commit | 8789d972a3124993fa585eac3474771e24e36edb (patch) | |
tree | 1e86d286a69f452a43a9199fd00626ff6edcfbeb | |
parent | c6d700126c422e9ac3f916a96ed5c462807b628f (diff) | |
download | gdb-8789d972a3124993fa585eac3474771e24e36edb.zip gdb-8789d972a3124993fa585eac3474771e24e36edb.tar.gz gdb-8789d972a3124993fa585eac3474771e24e36edb.tar.bz2 |
* c-typeprint.c (c_type_print_base): Don't print typedef'd names
as struct, union, or enum tags.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/c-typeprint.c | 73 |
2 files changed, 69 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e7f647d..5d68306 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +Mon May 24 10:01:10 1993 Jim Kingdon (kingdon@lioth.cygnus.com) + + * c-typeprint.c (c_type_print_base): Don't print typedef'd names + as struct, union, or enum tags. + Mon May 24 01:10:01 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * symmisc.c (dump_msymbols): Avoid gdb coredump with stripped diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c index 479d5d7..7591317 100644 --- a/gdb/c-typeprint.c +++ b/gdb/c-typeprint.c @@ -492,19 +492,66 @@ c_type_print_base (type, stream, show, level) break; case TYPE_CODE_STRUCT: - fprintf_filtered (stream, - HAVE_CPLUS_STRUCT (type) ? "class " : "struct "); + if (HAVE_CPLUS_STRUCT (type)) + { + /* Always print it as "class foo" even if foo is a typedef'd + name, not a tag. */ + fprintf_filtered (stream, "class "); + name = type_name_no_tag (type); + if (name != NULL) + { + fputs_filtered (name, stream); + fputs_filtered (" ", stream); + wrap_here (" "); + } + } + else + { + fprintf_filtered (stream, "struct "); + name = TYPE_NAME (type); + /* If the name does not start with "struct " it means that the + type was defined without a tag, so don't print a tag. It is + possible that we should have a better way of distinguising + tag names from typedef'd names. (e.g. a new tagname field in + the struct type). */ + if (strncmp (name, "struct ", 7) == 0) + { + fputs_filtered (name + 7, stream); + fputs_filtered (" ", stream); + } + } goto struct_union; case TYPE_CODE_UNION: fprintf_filtered (stream, "union "); - struct_union: - if ((name = type_name_no_tag (type)) != NULL) + if (HAVE_CPLUS_STRUCT (type)) { - fputs_filtered (name, stream); - fputs_filtered (" ", stream); - wrap_here (" "); + /* Always print it as "union foo" even if foo is a typedef'd + name, not a tag. */ + name = type_name_no_tag (type); + if (name != NULL) + { + fputs_filtered (name, stream); + fputs_filtered (" ", stream); + wrap_here (" "); + } } + else + { + name = TYPE_NAME (type); + /* If the name does not start with "union " it means that the + type was defined without a tag, so don't print a tag. It is + possible that we should have a better way of distinguising + tag names from typedef'd names. (e.g. a new tagname field in + the struct type). */ + if (strncmp (name, "union ", 6) == 0) + { + fputs_filtered (name + 6, stream); + fputs_filtered (" ", stream); + } + } + struct_union: + wrap_here (" "); if (show < 0) fprintf_filtered (stream, "{...}"); else @@ -692,11 +739,19 @@ c_type_print_base (type, stream, show, level) case TYPE_CODE_ENUM: fprintf_filtered (stream, "enum "); - if ((name = type_name_no_tag (type)) != NULL) + name = TYPE_NAME (type); + + /* If the name does not start with "enum " it means that the + type was defined without a tag, so don't print a tag. It is + possible that we should have a better way of distinguising + tag names from typedef'd names. (e.g. a new tagname field in + the struct type). */ + if (name != NULL && strncmp (name, "enum ", 5) == 0) { - fputs_filtered (name, stream); + fputs_filtered (name + 5, stream); fputs_filtered (" ", stream); } + wrap_here (" "); if (show < 0) fprintf_filtered (stream, "{...}"); |