type_print(type,"",stream,0);
break;
#endif
-/* start-sanitize-chill */
#ifdef _LANG_chill
case language_chill:
error ("Missing Chill support in function c_typedef_print."); /*FIXME*/
#endif
-/* end-sanitize-chill */
default:
error("Language not supported.");
}
{
int i;
- fputs_demangled (prefix, stream, DMGL_ANSI, language_cplus);
- fputs_demangled (varstring, stream, DMGL_ANSI, language_cplus);
+ fprintf_symbol_filtered (stream, prefix, language_cplus, DMGL_ANSI);
+ fprintf_symbol_filtered (stream, varstring, language_cplus, DMGL_ANSI);
fputs_filtered (" (", stream);
if (args && args[!staticp] && args[!staticp]->code != TYPE_CODE_VOID)
{
case TYPE_CODE_SET:
case TYPE_CODE_RANGE:
case TYPE_CODE_STRING:
+ case TYPE_CODE_BITSTRING:
/* These types need no prefix. They are listed here so that
gcc -Wall will reveal any types that haven't been handled. */
break;
case TYPE_CODE_SET:
case TYPE_CODE_RANGE:
case TYPE_CODE_STRING:
+ case TYPE_CODE_BITSTRING:
/* These types do not need a suffix. They are listed so that
gcc -Wall will report types that may not have been considered. */
break;
function value or array element), or the description of a
structure or union.
- SHOW nonzero means don't print this type as just its name;
- show its real definition even if it has a name.
- SHOW zero means print just typename or struct tag if there is one
- SHOW negative means abbreviate structure elements.
- SHOW is decremented for printing of structure elements.
+ SHOW positive means print details about the type (e.g. enum values),
+ and print structure elements passing SHOW - 1 for show.
+ SHOW zero means just print the type name or struct tag if there is one.
+ If there is no name, print something sensible but concise like
+ "struct {...}".
+ SHOW negative means the same things as SHOW zero. The difference is that
+ zero is used for printing structure elements and -1 is used for the
+ "whatis" command. But I don't see any need to distinguish.
- LEVEL is the depth to indent by.
+ LEVEL is the number of spaces to indent by.
We increase it for some recursive calls. */
void
int show;
int level;
{
- char *name;
register int i;
register int len;
register int lastval;
}
/* When SHOW is zero or less, and there is a valid type name, then always
- just print the type name directly from the type. */
+ just print the type name directly from the type. */
+ /* If we have "typedef struct foo {. . .} bar;" do we want to print it
+ as "struct foo" or as "bar"? Pick the latter, because C++ folk tend
+ to expect things like "class5 *foo" rather than "struct class5 *foo". */
- if ((show <= 0) && (TYPE_NAME (type) != NULL))
+ if (show <= 0
+ && TYPE_NAME (type) != NULL)
{
fputs_filtered (TYPE_NAME (type), stream);
return;
break;
case TYPE_CODE_STRUCT:
- fprintf_filtered (stream,
- HAVE_CPLUS_STRUCT (type) ? "class " : "struct ");
+ if (HAVE_CPLUS_STRUCT (type))
+ {
+ fprintf_filtered (stream, "class ");
+ }
+ else
+ {
+ fprintf_filtered (stream, "struct ");
+ }
goto struct_union;
case TYPE_CODE_UNION:
fprintf_filtered (stream, "union ");
+
struct_union:
- if ((name = type_name_no_tag (type)) != NULL)
+ if (TYPE_TAG_NAME (type) != NULL)
{
- fputs_filtered (name, stream);
- fputs_filtered (" ", stream);
- wrap_here (" ");
+ fputs_filtered (TYPE_TAG_NAME (type), stream);
+ if (show > 0)
+ fputs_filtered (" ", stream);
}
- if (show < 0)
- fprintf_filtered (stream, "{...}");
- else
+ wrap_here (" ");
+ if (show <= 0)
+ {
+ /* If we just printed a tag name, no need to print anything else. */
+ if (TYPE_TAG_NAME (type) == NULL)
+ fprintf_filtered (stream, "{...}");
+ }
+ else if (show > 0)
{
check_stub_type (type);
struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
+ char *name = type_name_no_tag (type);
int is_constructor = name && STREQ(method_name, name);
for (j = 0; j < len2; j++)
{
/* Build something we can demangle. */
mangled_name = gdb_mangle_name (type, i, j);
demangled_name =
- cplus_demangle (mangled_name,
- DMGL_ANSI | DMGL_PARAMS);
+ cplus_demangle (mangled_name,
+ DMGL_ANSI | DMGL_PARAMS);
if (demangled_name == NULL)
fprintf_filtered (stream, "<badly mangled name %s>",
- mangled_name);
- else
+ mangled_name);
+ else
{
- fprintf_filtered (stream, "%s",
- strchr (demangled_name, ':') + 2);
+ char *demangled_no_class =
+ strchr (demangled_name, ':');
+
+ if (demangled_no_class == NULL)
+ demangled_no_class = demangled_name;
+ else
+ {
+ if (*++demangled_no_class == ':')
+ ++demangled_no_class;
+ }
+ fputs_filtered (demangled_no_class, stream);
free (demangled_name);
}
free (mangled_name);
case TYPE_CODE_ENUM:
fprintf_filtered (stream, "enum ");
- if ((name = type_name_no_tag (type)) != NULL)
+ if (TYPE_TAG_NAME (type) != NULL)
{
- fputs_filtered (name, stream);
- fputs_filtered (" ", stream);
+ fputs_filtered (TYPE_TAG_NAME (type), stream);
+ if (show > 0)
+ fputs_filtered (" ", stream);
}
+
wrap_here (" ");
- if (show < 0)
- fprintf_filtered (stream, "{...}");
- else
+ if (show <= 0)
+ {
+ /* If we just printed a tag name, no need to print anything else. */
+ if (TYPE_TAG_NAME (type) == NULL)
+ fprintf_filtered (stream, "{...}");
+ }
+ else if (show > 0)
{
fprintf_filtered (stream, "{");
len = TYPE_NFIELDS (type);
}
else
{
- error ("Invalid type code (%d) in symbol table.", TYPE_CODE (type));
+ /* At least for dump_symtab, it is important that this not be
+ an error (). */
+ fprintf_filtered (stream, "<invalid type code %d>",
+ TYPE_CODE (type));
}
break;
}