/* Language independent support for printing types for GDB, the GNU debugger.
Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1998, 1999,
- 2000, 2001, 2003, 2006, 2007, 2008 Free Software Foundation, Inc.
+ 2000, 2001, 2003, 2006, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
This file is part of GDB.
#include "cp-abi.h"
#include "typeprint.h"
#include "gdb_string.h"
+#include "exceptions.h"
+#include "valprint.h"
#include <errno.h>
-/* For real-type printing in whatis_exp() */
-extern int objectprint; /* Controls looking up an object's derived type
- using what we find in its vtables. */
-
extern void _initialize_typeprint (void);
static void ptype_command (char *, int);
LA_PRINT_TYPE (type, varstring, stream, show, 0);
}
+/* Print TYPE to a string, returning it. The caller is responsible for
+ freeing the string. */
+
+char *
+type_to_string (struct type *type)
+{
+ char *s = NULL;
+ struct ui_file *stb;
+ struct cleanup *old_chain;
+ volatile struct gdb_exception except;
+
+ stb = mem_fileopen ();
+ old_chain = make_cleanup_ui_file_delete (stb);
+
+ TRY_CATCH (except, RETURN_MASK_ALL)
+ {
+ type_print (type, "", stb, -1);
+ s = ui_file_xstrdup (stb, NULL);
+ }
+ if (except.reason < 0)
+ s = NULL;
+
+ do_cleanups (old_chain);
+
+ return s;
+}
+
/* Print type of EXP, or last thing in value history if EXP == NULL.
show is passed to type_print. */
int full = 0;
int top = -1;
int using_enc = 0;
+ struct value_print_options opts;
if (exp)
{
type = value_type (val);
- if (objectprint)
+ get_user_print_options (&opts);
+ if (opts.objectprint)
{
if (((TYPE_CODE (type) == TYPE_CODE_PTR)
|| (TYPE_CODE (type) == TYPE_CODE_REF))
break;
case TYPE_CODE_CHAR:
- LA_PRINT_CHAR ((unsigned char) val, stream);
+ LA_PRINT_CHAR ((unsigned char) val, type, stream);
break;
case TYPE_CODE_BOOL: