X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fjv-typeprint.c;h=893082cc187ebb9e7498024cc670c2bad7c60768;hb=ff0a3bf8241108b84d35feee538f05ca23fa4e75;hp=cddf758f73eaf898ca508c214037479176b69042;hpb=8b0b198558d0fc981f129e2e3dcbe00a0f308449;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/jv-typeprint.c b/gdb/jv-typeprint.c index cddf758f73..893082cc18 100644 --- a/gdb/jv-typeprint.c +++ b/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" @@ -27,11 +28,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #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; @@ -44,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 " @@ -76,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; @@ -120,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; } @@ -145,11 +148,11 @@ 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) + if (TYPE_STUB (type)) fprintfi_filtered (level + 4, stream, "\n"); else fprintfi_filtered (level + 4, stream, "\n"); @@ -196,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 */ @@ -222,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; @@ -255,7 +255,7 @@ java_type_print_base (type, stream, show, level) { /* Keep GDB from crashing here. */ fprintf_filtered (stream, " %s;\n", - TYPE_FN_FIELD_PHYSNAME (f, j)); + TYPE_FN_FIELD_PHYSNAME (f, j)); break; } else if (!is_constructor && !is_full_physname_constructor) @@ -276,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; @@ -297,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"); } @@ -311,23 +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 PARAMS ((struct type *, GDB_FILE *, int, int, int)); +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; @@ -342,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); }