/* Support for printing Java types for GDB, the GNU debugger.
- Copyright (C) 1997, 1998, 1999, 2000, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+ Copyright (C) 1997-2016 Free Software Foundation, Inc.
This file is part of GDB.
#include "demangle.h"
#include "gdb-demangle.h"
#include "jv-lang.h"
-#include "gdb_string.h"
#include "typeprint.h"
#include "c-lang.h"
#include "cp-abi.h"
-#include "gdb_assert.h"
+#include "cp-support.h"
/* Local functions */
static void java_type_print_base (struct type * type,
struct ui_file *stream, int show,
- int level);
+ int level,
+ const struct type_print_options *flags);
static void
java_type_print_derivation_info (struct ui_file *stream, struct type *type)
{
- char *name;
+ const char *name;
int i;
int n_bases;
int prev;
static void
java_type_print_base (struct type *type, struct ui_file *stream, int show,
- int level)
+ int level, const struct type_print_options *flags)
{
int i;
int len;
return;
}
- CHECK_TYPEDEF (type);
+ type = check_typedef (type);
switch (TYPE_CODE (type))
{
case TYPE_CODE_PTR:
- java_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
+ java_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level,
+ flags);
break;
case TYPE_CODE_STRUCT:
{
QUIT;
/* Don't print out virtual function table. */
- if (strncmp (TYPE_FIELD_NAME (type, i), "_vptr", 5) == 0
+ if (startswith (TYPE_FIELD_NAME (type, i), "_vptr")
&& is_cplus_marker ((TYPE_FIELD_NAME (type, i))[5]))
continue;
/* Don't print the dummy field "class". */
- if (strncmp (TYPE_FIELD_NAME (type, i), "class", 5) == 0)
+ if (startswith (TYPE_FIELD_NAME (type, i), "class"))
continue;
print_spaces_filtered (level + 4, stream);
java_print_type (TYPE_FIELD_TYPE (type, i),
TYPE_FIELD_NAME (type, i),
- stream, show - 1, level + 4);
+ stream, show - 1, level + 4, flags);
fprintf_filtered (stream, ";\n");
}
{
struct fn_field *f;
int j;
- char *method_name;
- char *name;
+ const char *method_name;
+ const char *name;
int is_constructor;
int n_overloads;
for (j = 0; j < n_overloads; j++)
{
const char *real_physname;
- char *physname, *p;
+ const char *p;
+ char *physname;
int is_full_physname_constructor;
real_physname = TYPE_FN_FIELD_PHYSNAME (f, j);
p = strrchr (real_physname, ')');
gdb_assert (p != NULL);
++p; /* Keep the trailing ')'. */
- physname = alloca (p - real_physname + 1);
+ physname = (char *) 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)
+ = (TYPE_FN_FIELD_CONSTRUCTOR (f, j)
+ || is_constructor_name (physname)
|| is_destructor_name (physname));
QUIT;
mangled_name = physname;
demangled_name =
- cplus_demangle (mangled_name,
- DMGL_ANSI | DMGL_PARAMS | DMGL_JAVA);
+ gdb_demangle (mangled_name,
+ DMGL_ANSI | DMGL_PARAMS | DMGL_JAVA);
if (demangled_name == NULL)
demangled_name = xstrdup (mangled_name);
break;
default:
- c_type_print_base (type, stream, show, level);
+ c_type_print_base (type, stream, show, level, flags);
}
}
/* LEVEL is the depth to indent lines by. */
-extern void c_type_print_varspec_suffix (struct type *, struct ui_file *,
- int, int, int);
-
void
java_print_type (struct type *type, const char *varstring,
- struct ui_file *stream, int show, int level)
+ struct ui_file *stream, int show, int level,
+ const struct type_print_options *flags)
{
int demangled_args;
- java_type_print_base (type, stream, show, level);
+ java_type_print_base (type, stream, show, level, flags);
if (varstring != NULL && *varstring != '\0')
{
so don't print an additional pair of ()'s. */
demangled_args = varstring != NULL && 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, flags);
}