/* Support for printing Java values for GDB, the GNU debugger. Copyright 1997 Free Software Foundation, Inc. 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 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. */ #include "defs.h" #include "symtab.h" #include "gdbtypes.h" #include "expression.h" #include "value.h" #include "demangle.h" #include "valprint.h" #include "language.h" #include "jv-lang.h" #include "c-lang.h" int java_value_print (val, stream, format, pretty) value_ptr val; GDB_FILE *stream; int format; enum val_prettyprint pretty; { struct type *type = VALUE_TYPE (val); if (TYPE_CODE (type) == TYPE_CODE_PTR) { fprintf_filtered (stream, "("); type_print (TYPE_TARGET_TYPE (type), "", stream, -1); fprintf_filtered (stream, ") "); } return (val_print (VALUE_TYPE (val), VALUE_CONTENTS (val), VALUE_ADDRESS (val) + VALUE_OFFSET (val), stream, format, 1, 0, pretty)); } int java_val_print (type, valaddr, address, stream, format, deref_ref, recurse, pretty) struct type *type; char *valaddr; CORE_ADDR address; GDB_FILE *stream; int format; int deref_ref; int recurse; enum val_prettyprint pretty; { CHECK_TYPEDEF (type); if (is_object_type (type)) { CORE_ADDR obj_addr = unpack_pointer (type, valaddr); if (obj_addr != 0) { value_ptr obj_val = value_at (TYPE_TARGET_TYPE (type), obj_addr, NULL); type = type_from_class (java_class_from_object (obj_val)); type = lookup_pointer_type (type); } } switch (TYPE_CODE (type)) { default: return c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, pretty); } }