/* Language independent support for printing types for GDB, the GNU debugger.
- Copyright 1986, 1988, 1989, 1991-1993, 1998, 2000 Free Software Foundation, Inc.
+
+ Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1998,
+ 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
This file is part of GDB.
Boston, MA 02111-1307, USA. */
#include "defs.h"
-#include "obstack.h"
+#include "gdb_obstack.h"
#include "bfd.h" /* Binary File Description */
#include "symtab.h"
#include "gdbtypes.h"
#include "gdbcmd.h"
#include "target.h"
#include "language.h"
-#include "demangle.h"
-
+#include "cp-abi.h"
+#include "typeprint.h"
#include "gdb_string.h"
#include <errno.h>
static void whatis_exp (char *, int);
+/* Print a description of a type in the format of a
+ typedef for the current language.
+ NEW is the new name for a type TYPE. */
+
+void
+typedef_print (struct type *type, struct symbol *new, struct ui_file *stream)
+{
+ CHECK_TYPEDEF (type);
+ switch (current_language->la_language)
+ {
+#ifdef _LANG_c
+ case language_c:
+ case language_cplus:
+ fprintf_filtered (stream, "typedef ");
+ type_print (type, "", stream, 0);
+ if (TYPE_NAME ((SYMBOL_TYPE (new))) == 0
+ || strcmp (TYPE_NAME ((SYMBOL_TYPE (new))), DEPRECATED_SYMBOL_NAME (new)) != 0)
+ fprintf_filtered (stream, " %s", SYMBOL_PRINT_NAME (new));
+ break;
+#endif
+#ifdef _LANG_m2
+ case language_m2:
+ fprintf_filtered (stream, "TYPE ");
+ if (!TYPE_NAME (SYMBOL_TYPE (new))
+ || strcmp (TYPE_NAME ((SYMBOL_TYPE (new))), DEPRECATED_SYMBOL_NAME (new)) != 0)
+ fprintf_filtered (stream, "%s = ", SYMBOL_PRINT_NAME (new));
+ else
+ fprintf_filtered (stream, "<builtin> = ");
+ type_print (type, "", stream, 0);
+ break;
+#endif
+#ifdef _LANG_pascal
+ case language_pascal:
+ fprintf_filtered (stream, "type ");
+ fprintf_filtered (stream, "%s = ", SYMBOL_PRINT_NAME (new));
+ type_print (type, "", stream, 0);
+ break;
+#endif
+ default:
+ error ("Language not supported.");
+ }
+ fprintf_filtered (stream, ";\n");
+}
+
/* Print a description of a type TYPE in the form of a declaration of a
variable named VARSTRING. (VARSTRING is demangled if necessary.)
Output goes to STREAM (via stdio).
whatis_exp (char *exp, int show)
{
struct expression *expr;
- register value_ptr val;
- register struct cleanup *old_chain = NULL;
+ struct value *val;
+ struct cleanup *old_chain = NULL;
struct type *real_type = NULL;
struct type *type;
int full = 0;
else
val = access_value_history (0);
- type = VALUE_TYPE (val);
+ type = value_type (val);
if (objectprint)
{
do_cleanups (old_chain);
}
-/* ARGSUSED */
static void
whatis_command (char *exp, int from_tty)
{
/* TYPENAME is either the name of a type, or an expression. */
-/* ARGSUSED */
static void
ptype_command (char *typename, int from_tty)
{
- register struct type *type;
+ struct type *type;
struct expression *expr;
- register struct cleanup *old_chain;
+ struct cleanup *old_chain;
if (typename == NULL)
{
case TYPE_CODE_MEMBER:
case TYPE_CODE_METHOD:
case TYPE_CODE_REF:
+ case TYPE_CODE_NAMESPACE:
error ("internal error: unhandled type in print_type_scalar");
break;
void
maintenance_print_type (char *typename, int from_tty)
{
- register value_ptr val;
- register struct type *type;
- register struct cleanup *old_chain;
+ struct value *val;
+ struct type *type;
+ struct cleanup *old_chain;
struct expression *expr;
if (typename != NULL)
/* The user expression may name a type indirectly by naming an
object of that type. Find that indirectly named type. */
val = evaluate_type (expr);
- type = VALUE_TYPE (val);
+ type = value_type (val);
}
if (type != NULL)
{