/* Support for printing Java types for GDB, the GNU debugger.
- Copyright (C) 1997, 1998, 1999, 2000, 2007, 2008, 2009
+ Copyright (C) 1997, 1998, 1999, 2000, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of GDB.
#include "typeprint.h"
#include "c-lang.h"
#include "cp-abi.h"
+#include "gdb_assert.h"
/* Local functions */
for (j = 0; j < n_overloads; j++)
{
- char *physname;
+ char *real_physname, *physname, *p;
int is_full_physname_constructor;
- physname = TYPE_FN_FIELD_PHYSNAME (f, j);
+ real_physname = TYPE_FN_FIELD_PHYSNAME (f, j);
+
+ /* The physname will contain the return type
+ after the final closing parenthesis. Strip it off. */
+ p = strrchr (real_physname, ')');
+ gdb_assert (p != NULL);
+ ++p; /* Keep the trailing ')'. */
+ physname = alloca (p - real_physname + 1);
+ memcpy (physname, real_physname, p - real_physname);
+ physname[p - real_physname] = '\0';
is_full_physname_constructor
= (is_constructor_name (physname)
/* Build something we can demangle. */
mangled_name = gdb_mangle_name (type, i, j);
else
- mangled_name = TYPE_FN_FIELD_PHYSNAME (f, j);
+ mangled_name = physname;
demangled_name =
cplus_demangle (mangled_name,