2010-12-31 Michael Snyder <msnyder@vmware.com>

* charset.c: Comment cleanup and long line wrapping.
	* charset.h: Ditto.
	* c-lang.c: Ditto.
	* c-lang.h: Ditto.
	* coff-pe-read.c: Ditto.
	* coff-pe-read.h: Ditto.
	* coffread.c: Ditto.
	* command.h: Ditto.
	* complaints.c: Ditto.
	* complaints.h: Ditto.
	* completer.c: Ditto.
	* completer.h: Ditto.
	* corefile.c: Ditto.
	* corelow.c: Ditto.
	* core-regset.c: Ditto.
	* cp-abi.c: Ditto.
	* cp-abi.h: Ditto.
	* cp-namespace.c: Ditto.
	* cp-support.c: Ditto.
	* cp-support.h: Ditto.
	* cp-valprint.c: Ditto.
	* cp-typeprint.c: Ditto.
	* c-valprint.c: Ditto.
This commit is contained in:
Michael Snyder
2010-12-31 22:59:52 +00:00
parent db09a73fa4
commit aff410f180
24 changed files with 1489 additions and 1076 deletions

View File

@ -20,7 +20,7 @@
#include "defs.h"
#include "gdb_obstack.h"
#include "bfd.h" /* Binary File Description */
#include "bfd.h" /* Binary File Description. */
#include "symtab.h"
#include "gdbtypes.h"
#include "expression.h"
@ -36,17 +36,21 @@
#include "gdb_string.h"
#include <errno.h>
static void c_type_print_varspec_prefix (struct type *, struct ui_file *, int,
int, int);
static void c_type_print_varspec_prefix (struct type *,
struct ui_file *,
int, int, int);
/* Print "const", "volatile", or address space modifiers. */
static void c_type_print_modifier (struct type *, struct ui_file *,
/* Print "const", "volatile", or address space modifiers. */
static void c_type_print_modifier (struct type *,
struct ui_file *,
int, int);
/* LEVEL is the depth to indent lines by. */
void
c_print_type (struct type *type, const char *varstring, struct ui_file *stream,
c_print_type (struct type *type,
const char *varstring,
struct ui_file *stream,
int show, int level)
{
enum type_code code;
@ -76,11 +80,12 @@ c_print_type (struct type *type, const char *varstring, struct ui_file *stream,
{
fputs_filtered (varstring, stream);
/* For demangled function names, we have the arglist as part of the name,
so don't print an additional pair of ()'s */
/* For demangled function names, we have the arglist as part of
the name, so don't print an additional pair of ()'s */
demangled_args = strchr (varstring, '(') != NULL;
c_type_print_varspec_suffix (type, stream, show, 0, demangled_args);
c_type_print_varspec_suffix (type, stream, show,
0, demangled_args);
}
}
@ -89,7 +94,8 @@ c_print_type (struct type *type, const char *varstring, struct ui_file *stream,
which to print. */
void
c_print_typedef (struct type *type, struct symbol *new_symbol,
c_print_typedef (struct type *type,
struct symbol *new_symbol,
struct ui_file *stream)
{
CHECK_TYPEDEF (type);
@ -104,8 +110,8 @@ c_print_typedef (struct type *type, struct symbol *new_symbol,
}
/* 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:
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; };
@ -117,21 +123,25 @@ c_print_typedef (struct type *type, struct symbol *new_symbol,
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:
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.
Note that in case of protected derivation gcc will not say 'protected'
but 'private'. The HP's aCC compiler emits specific information for
derivation via protected inheritance, so gdb can print it out */
In general, gdb should try to print the types as closely as
possible to the form that they appear in the source code.
Note that in case of protected derivation gcc will not say
'protected' but 'private'. The HP's aCC compiler emits specific
information for derivation via protected inheritance, so gdb can
print it out */
static void
cp_type_print_derivation_info (struct ui_file *stream, struct type *type)
cp_type_print_derivation_info (struct ui_file *stream,
struct type *type)
{
char *name;
int i;
@ -140,8 +150,9 @@ cp_type_print_derivation_info (struct ui_file *stream, struct type *type)
{
fputs_filtered (i == 0 ? ": " : ", ", stream);
fprintf_filtered (stream, "%s%s ",
BASETYPE_VIA_PUBLIC (type, i) ? "public"
: (TYPE_FIELD_PROTECTED (type, i) ? "protected" : "private"),
BASETYPE_VIA_PUBLIC (type, i)
? "public" : (TYPE_FIELD_PROTECTED (type, i)
? "protected" : "private"),
BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
name = type_name_no_tag (TYPE_BASECLASS (type, i));
fprintf_filtered (stream, "%s", name ? name : "(null)");
@ -155,16 +166,19 @@ cp_type_print_derivation_info (struct ui_file *stream, struct type *type)
/* Print the C++ method arguments ARGS to the file STREAM. */
static void
cp_type_print_method_args (struct type *mtype, char *prefix, char *varstring,
int staticp, struct ui_file *stream)
cp_type_print_method_args (struct type *mtype, char *prefix,
char *varstring, int staticp,
struct ui_file *stream)
{
struct field *args = TYPE_FIELDS (mtype);
int nargs = TYPE_NFIELDS (mtype);
int varargs = TYPE_VARARGS (mtype);
int i;
fprintf_symbol_filtered (stream, prefix, language_cplus, DMGL_ANSI);
fprintf_symbol_filtered (stream, varstring, language_cplus, DMGL_ANSI);
fprintf_symbol_filtered (stream, prefix,
language_cplus, DMGL_ANSI);
fprintf_symbol_filtered (stream, varstring,
language_cplus, DMGL_ANSI);
fputs_filtered ("(", stream);
/* Skip the class variable. */
@ -220,8 +234,10 @@ cp_type_print_method_args (struct type *mtype, char *prefix, char *varstring,
name. */
static void
c_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
int show, int passed_a_ptr, int need_post_space)
c_type_print_varspec_prefix (struct type *type,
struct ui_file *stream,
int show, int passed_a_ptr,
int need_post_space)
{
char *name;
@ -236,53 +252,62 @@ c_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
switch (TYPE_CODE (type))
{
case TYPE_CODE_PTR:
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 1, 1);
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 1, 1);
fprintf_filtered (stream, "*");
c_type_print_modifier (type, stream, 1, need_post_space);
break;
case TYPE_CODE_MEMBERPTR:
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 0, 0);
name = type_name_no_tag (TYPE_DOMAIN_TYPE (type));
if (name)
fputs_filtered (name, stream);
else
c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
c_type_print_base (TYPE_DOMAIN_TYPE (type),
stream, 0, passed_a_ptr);
fprintf_filtered (stream, "::*");
break;
case TYPE_CODE_METHODPTR:
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 0, 0);
fprintf_filtered (stream, "(");
name = type_name_no_tag (TYPE_DOMAIN_TYPE (type));
if (name)
fputs_filtered (name, stream);
else
c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
c_type_print_base (TYPE_DOMAIN_TYPE (type),
stream, 0, passed_a_ptr);
fprintf_filtered (stream, "::*");
break;
case TYPE_CODE_REF:
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 1, 0);
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 1, 0);
fprintf_filtered (stream, "&");
c_type_print_modifier (type, stream, 1, need_post_space);
break;
case TYPE_CODE_METHOD:
case TYPE_CODE_FUNC:
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 0, 0);
if (passed_a_ptr)
fprintf_filtered (stream, "(");
break;
case TYPE_CODE_ARRAY:
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 0, 0);
if (passed_a_ptr)
fprintf_filtered (stream, "(");
break;
case TYPE_CODE_TYPEDEF:
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
stream, show, 0, 0);
break;
case TYPE_CODE_UNDEF:
@ -363,9 +388,9 @@ c_type_print_modifier (struct type *type, struct ui_file *stream,
/* Print out the arguments of TYPE, which should have TYPE_CODE_METHOD
or TYPE_CODE_FUNC, to STREAM. Artificial arguments, such as "this"
in non-static methods, are displayed if SHOW_ARTIFICIAL is
non-zero. LANGUAGE is the language in which TYPE was defined. This is
a necessary evil since this code is used by the C, C++, and Java
backends. */
non-zero. LANGUAGE is the language in which TYPE was defined.
This is a necessary evil since this code is used by the C, C++, and
Java backends. */
void
c_type_print_args (struct type *type, struct ui_file *stream,
@ -391,9 +416,11 @@ c_type_print_args (struct type *type, struct ui_file *stream,
}
if (language == language_java)
java_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
java_print_type (TYPE_FIELD_TYPE (type, i),
"", stream, -1, 0);
else
c_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
c_print_type (TYPE_FIELD_TYPE (type, i),
"", stream, -1, 0);
printed_any = 1;
}
@ -466,7 +493,8 @@ is_type_conversion_operator (struct type *type, int i, int j)
return 1;
/* That was indeed the end of the name, so it was `operator new' or
`operator delete', neither of which are type conversion operators. */
`operator delete', neither of which are type conversion
operators. */
return 0;
}
@ -481,14 +509,14 @@ is_type_conversion_operator (struct type *type, int i, int j)
static char *
remove_qualifiers (char *qid)
{
int quoted = 0; /* zero if we're not in quotes;
'"' if we're in a double-quoted string;
'\'' if we're in a single-quoted string. */
int depth = 0; /* number of unclosed parens we've seen */
int quoted = 0; /* zero if we're not in quotes;
'"' if we're in a double-quoted string;
'\'' if we're in a single-quoted string. */
int depth = 0; /* number of unclosed parens we've seen */
char *parenstack = (char *) alloca (strlen (qid));
char *scan;
char *last = 0; /* The character after the rightmost
`::' token we've seen so far. */
char *last = 0; /* The character after the rightmost
`::' token we've seen so far. */
for (scan = qid; *scan; scan++)
{
@ -504,8 +532,8 @@ remove_qualifiers (char *qid)
/* If we're inside parenthesis (i.e., an argument list) or
angle brackets (i.e., a list of template arguments), then
we don't record the position of this :: token, since it's
not relevant to the top-level structure we're trying
to operate on. */
not relevant to the top-level structure we're trying to
operate on. */
if (depth == 0)
{
last = scan + 2;
@ -529,10 +557,10 @@ remove_qualifiers (char *qid)
depth--;
else
{
/* We're going to do a little error recovery here. If we
don't find a match for *scan on the paren stack, but
there is something lower on the stack that does match, we
pop the stack to that point. */
/* We're going to do a little error recovery here. If
we don't find a match for *scan on the paren stack,
but there is something lower on the stack that does
match, we pop the stack to that point. */
int i;
for (i = depth - 1; i >= 0; i--)
@ -558,8 +586,10 @@ remove_qualifiers (char *qid)
Args work like c_type_print_varspec_prefix. */
void
c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
int show, int passed_a_ptr, int demangled_args)
c_type_print_varspec_suffix (struct type *type,
struct ui_file *stream,
int show, int passed_a_ptr,
int demangled_args)
{
if (type == 0)
return;
@ -580,29 +610,30 @@ c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
fprintf_filtered (stream, "[");
if (get_array_bounds (type, &low_bound, &high_bound))
fprintf_filtered (stream, "%d", (int) (high_bound - low_bound + 1));
fprintf_filtered (stream, "%d",
(int) (high_bound - low_bound + 1));
fprintf_filtered (stream, "]");
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
0, 0);
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
show, 0, 0);
}
break;
case TYPE_CODE_MEMBERPTR:
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
0, 0);
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
show, 0, 0);
break;
case TYPE_CODE_METHODPTR:
fprintf_filtered (stream, ")");
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
0, 0);
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
show, 0, 0);
break;
case TYPE_CODE_PTR:
case TYPE_CODE_REF:
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
1, 0);
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
show, 1, 0);
break;
case TYPE_CODE_METHOD:
@ -610,14 +641,15 @@ c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
if (passed_a_ptr)
fprintf_filtered (stream, ")");
if (!demangled_args)
c_type_print_args (type, stream, 1, current_language->la_language);
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
passed_a_ptr, 0);
c_type_print_args (type, stream, 1,
current_language->la_language);
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
show, passed_a_ptr, 0);
break;
case TYPE_CODE_TYPEDEF:
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
passed_a_ptr, 0);
c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream,
show, passed_a_ptr, 0);
break;
case TYPE_CODE_UNDEF:
@ -638,7 +670,8 @@ c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
case TYPE_CODE_NAMESPACE:
case TYPE_CODE_DECFLOAT:
/* These types do not need a suffix. They are listed so that
gcc -Wall will report types that may not have been considered. */
gcc -Wall will report types that may not have been
considered. */
break;
default:
error (_("type not handled in c_type_print_varspec_suffix()"));
@ -647,24 +680,26 @@ c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
}
/* Print the name of the type (or the ultimate pointer target,
function value or array element), or the description of a
structure or union.
function value or array element), or the description of a structure
or union.
SHOW positive means print details about the type (e.g. enum values),
and print structure elements passing SHOW - 1 for show.
SHOW negative 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 zero means just print the type name or struct tag if there is one.
If there is no name, print something sensible but not as concise like
"struct {int x; int y;}".
SHOW positive means print details about the type (e.g. enum
values), and print structure elements passing SHOW - 1 for show.
SHOW negative 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 zero means just print the type name or struct tag if there is
one. If there is no name, print something sensible but not as
concise like "struct {int x; int y;}".
LEVEL is the number of spaces to indent by.
We increase it for some recursive calls. */
void
c_type_print_base (struct type *type, struct ui_file *stream, int show,
int level)
c_type_print_base (struct type *type, struct ui_file *stream,
int show, int level)
{
int i;
int len, real_len;
@ -689,11 +724,12 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
return;
}
/* When SHOW is zero or less, and there is a valid type name, then always
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". */
/* When SHOW is zero or less, and there is a valid type name, then
always 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)
@ -708,8 +744,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
switch (TYPE_CODE (type))
{
case TYPE_CODE_TYPEDEF:
/* If we get here, the typedef doesn't have a name, and we couldn't
resolve TYPE_TARGET_TYPE. Not much we can do. */
/* If we get here, the typedef doesn't have a name, and we
couldn't resolve TYPE_TARGET_TYPE. Not much we can do. */
gdb_assert (TYPE_NAME (type) == NULL);
gdb_assert (TYPE_TARGET_TYPE (type) == NULL);
fprintf_filtered (stream, _("<unnamed typedef>"));
@ -722,7 +758,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
case TYPE_CODE_FUNC:
case TYPE_CODE_METHOD:
case TYPE_CODE_METHODPTR:
c_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
c_type_print_base (TYPE_TARGET_TYPE (type),
stream, show, level);
break;
case TYPE_CODE_STRUCT:
@ -739,12 +776,10 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
struct_union:
/* Print the tag if it exists.
* The HP aCC compiler emits
* a spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
* tag for unnamed struct/union/enum's, which we don't
* want to print.
*/
/* Print the tag if it exists. The HP aCC compiler emits a
spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed
enum}" tag for unnamed struct/union/enum's, which we don't
want to print. */
if (TYPE_TAG_NAME (type) != NULL
&& strncmp (TYPE_TAG_NAME (type), "{unnamed", 8))
{
@ -755,7 +790,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
wrap_here (" ");
if (show < 0)
{
/* If we just printed a tag name, no need to print anything else. */
/* If we just printed a tag name, no need to print anything
else. */
if (TYPE_TAG_NAME (type) == NULL)
fprintf_filtered (stream, "{...}");
}
@ -771,21 +807,23 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
&& TYPE_TYPEDEF_FIELD_COUNT (type) == 0)
{
if (TYPE_STUB (type))
fprintfi_filtered (level + 4, stream, _("<incomplete type>\n"));
fprintfi_filtered (level + 4, stream,
_("<incomplete type>\n"));
else
fprintfi_filtered (level + 4, 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. */
thereafter until we find another type. */
section_type = s_none;
/* For a class, if all members are private, there's no need
for a "private:" label; similarly, for a struct or union
masquerading as a class, if all members are public, there's
no need for a "public:" label. */
no need for a "public:" label. */
if (TYPE_DECLARED_CLASS (type))
{
@ -820,7 +858,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
QUIT;
len = TYPE_NFIELDS (type);
for (i = TYPE_N_BASECLASSES (type); i < len; i++)
if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i))
if (TYPE_FIELD_PRIVATE (type, i)
|| TYPE_FIELD_PROTECTED (type, i))
{
need_access_label = 1;
break;
@ -878,7 +917,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
if (section_type != s_private)
{
section_type = s_private;
fprintfi_filtered (level + 2, stream, "private:\n");
fprintfi_filtered (level + 2, stream,
"private:\n");
}
}
else
@ -886,7 +926,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
if (section_type != s_public)
{
section_type = s_public;
fprintfi_filtered (level + 2, stream, "public:\n");
fprintfi_filtered (level + 2, stream,
"public:\n");
}
}
}
@ -912,8 +953,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
}
/* If there are both fields and methods, put a blank line
between them. Make sure to count only method that we will
display; artificial methods will be hidden. */
between them. Make sure to count only method that we
will display; artificial methods will be hidden. */
len = TYPE_NFN_FIELDS (type);
real_len = 0;
for (i = 0; i < len; i++)
@ -936,7 +977,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
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 && strcmp (method_name, name) == 0;
int is_constructor = name && strcmp (method_name,
name) == 0;
for (j = 0; j < len2; j++)
{
@ -965,7 +1007,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
if (section_type != s_private)
{
section_type = s_private;
fprintfi_filtered (level + 2, stream, "private:\n");
fprintfi_filtered (level + 2, stream,
"private:\n");
}
}
else
@ -973,7 +1016,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
if (section_type != s_public)
{
section_type = s_public;
fprintfi_filtered (level + 2, stream, "public:\n");
fprintfi_filtered (level + 2, stream,
"public:\n");
}
}
@ -985,12 +1029,15 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
{
/* Keep GDB from crashing here. */
fprintf_filtered (stream, _("<undefined type> %s;\n"),
fprintf_filtered (stream,
_("<undefined type> %s;\n"),
TYPE_FN_FIELD_PHYSNAME (f, j));
break;
}
else if (!is_constructor /* constructors don't have declared types */
&& !is_full_physname_constructor /* " " */
else if (!is_constructor /* Constructors don't
have declared
types. */
&& !is_full_physname_constructor /* " " */
&& !is_type_conversion_operator (type, i, j))
{
type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
@ -1008,11 +1055,11 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
DMGL_ANSI | DMGL_PARAMS);
if (demangled_name == NULL)
{
/* in some cases (for instance with the HP demangling),
if a function has more than 10 arguments,
the demangling will fail.
Let's try to reconstruct the function signature from
the symbol information */
/* In some cases (for instance with the HP
demangling), if a function has more than 10
arguments, the demangling will fail.
Let's try to reconstruct the function
signature from the symbol information. */
if (!TYPE_FN_FIELD_STUB (f, j))
{
int staticp = TYPE_FN_FIELD_STATIC_P (f, j);
@ -1025,7 +1072,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
stream);
}
else
fprintf_filtered (stream, _("<badly mangled name '%s'>"),
fprintf_filtered (stream,
_("<badly mangled name '%s'>"),
mangled_name);
}
else
@ -1034,14 +1082,17 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
char *demangled_no_class
= remove_qualifiers (demangled_name);
/* get rid of the `static' appended by the demangler */
/* Get rid of the `static' appended by the
demangler. */
p = strstr (demangled_no_class, " static");
if (p != NULL)
{
int length = p - demangled_no_class;
demangled_no_static = (char *) xmalloc (length + 1);
strncpy (demangled_no_static, demangled_no_class, length);
demangled_no_static
= (char *) xmalloc (length + 1);
strncpy (demangled_no_static,
demangled_no_class, length);
*(demangled_no_static + length) = '\0';
fputs_filtered (demangled_no_static, stream);
xfree (demangled_no_static);
@ -1084,7 +1135,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
fprintfi_filtered (level, stream, "}");
if (TYPE_LOCALTYPE_PTR (type) && show >= 0)
fprintfi_filtered (level, stream, _(" (Local at %s:%d)\n"),
fprintfi_filtered (level,
stream, _(" (Local at %s:%d)\n"),
TYPE_LOCALTYPE_FILE (type),
TYPE_LOCALTYPE_LINE (type));
}
@ -1097,7 +1149,7 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
The aCC compiler emits a spurious
"{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
tag for unnamed struct/union/enum's, which we don't
want to print. */
want to print. */
if (TYPE_TAG_NAME (type) != NULL
&& strncmp (TYPE_TAG_NAME (type), "{unnamed", 8))
{
@ -1109,7 +1161,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
wrap_here (" ");
if (show < 0)
{
/* If we just printed a tag name, no need to print anything else. */
/* If we just printed a tag name, no need to print anything
else. */
if (TYPE_TAG_NAME (type) == NULL)
fprintf_filtered (stream, "{...}");
}
@ -1127,7 +1180,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
if (lastval != TYPE_FIELD_BITPOS (type, i))
{
fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
fprintf_filtered (stream, " = %d",
TYPE_FIELD_BITPOS (type, i));
lastval = TYPE_FIELD_BITPOS (type, i);
}
lastval++;
@ -1159,10 +1213,10 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
break;
default:
/* Handle types not explicitly handled by the other cases,
such as fundamental types. For these, just print whatever
the type name is, as recorded in the type itself. If there
is no type name, then complain. */
/* Handle types not explicitly handled by the other cases, such
as fundamental types. For these, just print whatever the
type name is, as recorded in the type itself. If there is no
type name, then complain. */
if (TYPE_NAME (type) != NULL)
{
c_type_print_modifier (type, stream, 0, 1);
@ -1170,8 +1224,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
}
else
{
/* At least for dump_symtab, it is important that this not be
an error (). */
/* At least for dump_symtab, it is important that this not
be an error (). */
fprintf_filtered (stream, _("<invalid type code %d>"),
TYPE_CODE (type));
}