/* Support for printing Ada values for GDB, the GNU debugger.
- Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1997, 2001,
- 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1997, 2001, 2002,
+ 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GDB.
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., 675 Mass Ave, Cambridge, MA 02139, USA. */
+Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
#include <ctype.h>
#include "defs.h"
index_type = TYPE_INDEX_TYPE (type);
+ if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
+ {
+ /* We need to know what the base type is, in order to do the
+ appropriate check below. Otherwise, if this is a subrange
+ of an enumerated type, where the underlying value of the
+ first element is typically 0, we might test the low bound
+ against the wrong value. */
+ index_type = TYPE_TARGET_TYPE (index_type);
+ }
+
switch (TYPE_CODE (index_type))
{
case TYPE_CODE_ENUM:
if (isascii (c) && isprint (c))
{
if (c == quoter && c == '"')
- fprintf_filtered (stream, "[\"%c\"]", quoter);
+ fprintf_filtered (stream, "\"\"");
else
fprintf_filtered (stream, "%c", c);
}
case TYPE_CODE_SET:
case TYPE_CODE_STRING:
case TYPE_CODE_ERROR:
- case TYPE_CODE_MEMBER:
+ case TYPE_CODE_MEMBERPTR:
+ case TYPE_CODE_METHODPTR:
case TYPE_CODE_METHOD:
case TYPE_CODE_REF:
warning (_("internal error: unhandled type in ada_print_scalar"));
}
break;
+ case TYPE_CODE_FLAGS:
+ if (format)
+ print_scalar_formatted (valaddr, type, format, 0, stream);
+ else
+ val_print_type_code_flags (type, valaddr, stream);
+ break;
+
case TYPE_CODE_FLT:
if (format)
return c_val_print (type, valaddr0, embedded_offset, address, stream,