summaryrefslogtreecommitdiffstats
path: root/contrib/gdb/gdb/jv-typeprint.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gdb/gdb/jv-typeprint.c')
-rw-r--r--contrib/gdb/gdb/jv-typeprint.c114
1 files changed, 59 insertions, 55 deletions
diff --git a/contrib/gdb/gdb/jv-typeprint.c b/contrib/gdb/gdb/jv-typeprint.c
index 59539a0..893082c 100644
--- a/contrib/gdb/gdb/jv-typeprint.c
+++ b/contrib/gdb/gdb/jv-typeprint.c
@@ -1,21 +1,22 @@
/* Support for printing Java types for GDB, the GNU debugger.
- Copyright 1997, 1998, 1999 Free Software Foundation, Inc.
+ Copyright 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
-This file is part of GDB.
+ This file is part of GDB.
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include "defs.h"
@@ -26,11 +27,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "jv-lang.h"
#include "gdb_string.h"
#include "typeprint.h"
+#include "c-lang.h"
+#include "cp-abi.h"
+
+/* Local functions */
+
+static void java_type_print_base (struct type * type,
+ struct ui_file *stream, int show,
+ int level);
static void
-java_type_print_derivation_info (stream, type)
- GDB_FILE *stream;
- struct type *type;
+java_type_print_derivation_info (struct ui_file *stream, struct type *type)
{
char *name;
int i;
@@ -43,7 +50,7 @@ java_type_print_derivation_info (stream, type)
{
int kind;
- kind = BASETYPE_VIA_VIRTUAL(type, i) ? 'I' : 'E';
+ kind = BASETYPE_VIA_VIRTUAL (type, i) ? 'I' : 'E';
fputs_filtered (kind == prev ? ", "
: kind == 'I' ? " implements "
@@ -75,12 +82,9 @@ java_type_print_derivation_info (stream, type)
LEVEL is the number of spaces to indent by.
We increase it for some recursive calls. */
-void
-java_type_print_base (type, stream, show, level)
- struct type *type;
- GDB_FILE *stream;
- int show;
- int level;
+static void
+java_type_print_base (struct type *type, struct ui_file *stream, int show,
+ int level)
{
register int i;
register int len;
@@ -119,7 +123,7 @@ java_type_print_base (type, stream, show, level)
{ /* array type */
char *name = java_demangle_type_signature (TYPE_TAG_NAME (type));
fputs_filtered (name, stream);
- free (name);
+ xfree (name);
break;
}
@@ -144,13 +148,15 @@ java_type_print_base (type, stream, show, level)
else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
{
java_type_print_derivation_info (stream, type);
-
+
fprintf_filtered (stream, "{\n");
if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
- if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
- fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
- else
- fprintfi_filtered (level + 4, stream, "<no data fields>\n");
+ {
+ if (TYPE_STUB (type))
+ fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
+ else
+ fprintfi_filtered (level + 4, stream, "<no data fields>\n");
+ }
/* If there is a base class for this type,
do not print the field that it occupies. */
@@ -171,12 +177,14 @@ java_type_print_base (type, stream, show, level)
print_spaces_filtered (level + 4, stream);
if (HAVE_CPLUS_STRUCT (type))
- if (TYPE_FIELD_PROTECTED (type, i))
- fprintf_filtered (stream, "protected ");
- else if (TYPE_FIELD_PRIVATE (type, i))
- fprintf_filtered (stream, "private ");
- else
- fprintf_filtered (stream, "public ");
+ {
+ if (TYPE_FIELD_PROTECTED (type, i))
+ fprintf_filtered (stream, "protected ");
+ else if (TYPE_FIELD_PRIVATE (type, i))
+ fprintf_filtered (stream, "private ");
+ else
+ fprintf_filtered (stream, "public ");
+ }
if (TYPE_FIELD_STATIC (type, i))
fprintf_filtered (stream, "static ");
@@ -191,7 +199,7 @@ java_type_print_base (type, stream, show, level)
/* If there are both fields and methods, put a space between. */
len = TYPE_NFN_FIELDS (type);
if (len)
- fprintf_filtered (stream, "\n");
+ fprintf_filtered (stream, "\n");
/* Print out the methods */
@@ -217,12 +225,9 @@ java_type_print_base (type, stream, show, level)
physname = TYPE_FN_FIELD_PHYSNAME (f, j);
- is_full_physname_constructor =
- ((physname[0] == '_' && physname[1] == '_'
- && strchr ("0123456789Qt", physname[2]))
- || STREQN (physname, "__ct__", 6)
- || DESTRUCTOR_PREFIX_P (physname)
- || STREQN (physname, "__dt__", 6));
+ is_full_physname_constructor
+ = (is_constructor_name (physname)
+ || is_destructor_name (physname));
QUIT;
@@ -250,7 +255,7 @@ java_type_print_base (type, stream, show, level)
{
/* Keep GDB from crashing here. */
fprintf_filtered (stream, "<undefined type> %s;\n",
- TYPE_FN_FIELD_PHYSNAME (f, j));
+ TYPE_FN_FIELD_PHYSNAME (f, j));
break;
}
else if (!is_constructor && !is_full_physname_constructor)
@@ -271,7 +276,7 @@ java_type_print_base (type, stream, show, level)
DMGL_ANSI | DMGL_PARAMS | DMGL_JAVA);
if (demangled_name == NULL)
- demangled_name = strdup (mangled_name);
+ demangled_name = xstrdup (mangled_name);
{
char *demangled_no_class;
@@ -292,11 +297,11 @@ java_type_print_base (type, stream, show, level)
}
fputs_filtered (demangled_no_class, stream);
- free (demangled_name);
+ xfree (demangled_name);
}
if (TYPE_FN_FIELD_STUB (f, j))
- free (mangled_name);
+ xfree (mangled_name);
fprintf_filtered (stream, ";\n");
}
@@ -306,20 +311,19 @@ java_type_print_base (type, stream, show, level)
}
break;
- default:
- c_type_print_base (type, stream, show, level);
+ default:
+ c_type_print_base (type, stream, show, level);
}
}
/* 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 (type, varstring, stream, show, level)
- struct type *type;
- char *varstring;
- GDB_FILE *stream;
- int show;
- int level;
+java_print_type (struct type *type, char *varstring, struct ui_file *stream,
+ int show, int level)
{
int demangled_args;
@@ -334,6 +338,6 @@ java_print_type (type, varstring, stream, show, level)
/* 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;
+ demangled_args = strchr (varstring, '(') != NULL;
c_type_print_varspec_suffix (type, stream, show, 0, demangled_args);
}
OpenPOWER on IntegriCloud