typeprint.c revision 98944
1/* Language independent support for printing types for GDB, the GNU debugger.
2   Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1998, 1999,
3   2000, 2001 Free Software Foundation, Inc.
4
5   This file is part of GDB.
6
7   This program is free software; you can redistribute it and/or modify
8   it under the terms of the GNU General Public License as published by
9   the Free Software Foundation; either version 2 of the License, or
10   (at your option) any later version.
11
12   This program is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with this program; if not, write to the Free Software
19   Foundation, Inc., 59 Temple Place - Suite 330,
20   Boston, MA 02111-1307, USA.  */
21
22#include "defs.h"
23#include "obstack.h"
24#include "bfd.h"		/* Binary File Description */
25#include "symtab.h"
26#include "gdbtypes.h"
27#include "expression.h"
28#include "value.h"
29#include "gdbcore.h"
30#include "command.h"
31#include "gdbcmd.h"
32#include "target.h"
33#include "language.h"
34#include "cp-abi.h"
35
36#include "gdb_string.h"
37#include <errno.h>
38
39/* For real-type printing in whatis_exp() */
40extern int objectprint;		/* Controls looking up an object's derived type
41				   using what we find in its vtables.  */
42
43extern void _initialize_typeprint (void);
44
45static void ptype_command (char *, int);
46
47static struct type *ptype_eval (struct expression *);
48
49static void whatis_command (char *, int);
50
51static void whatis_exp (char *, int);
52
53/* Print a description of a type in the format of a
54   typedef for the current language.
55   NEW is the new name for a type TYPE. */
56
57void
58typedef_print (struct type *type, struct symbol *new, struct ui_file *stream)
59{
60  CHECK_TYPEDEF (type);
61  switch (current_language->la_language)
62    {
63#ifdef _LANG_c
64    case language_c:
65    case language_cplus:
66      fprintf_filtered (stream, "typedef ");
67      type_print (type, "", stream, 0);
68      if (TYPE_NAME ((SYMBOL_TYPE (new))) == 0
69	  || !STREQ (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_NAME (new)))
70	fprintf_filtered (stream, " %s", SYMBOL_SOURCE_NAME (new));
71      break;
72#endif
73#ifdef _LANG_m2
74    case language_m2:
75      fprintf_filtered (stream, "TYPE ");
76      if (!TYPE_NAME (SYMBOL_TYPE (new)) ||
77	  !STREQ (TYPE_NAME (SYMBOL_TYPE (new)), SYMBOL_NAME (new)))
78	fprintf_filtered (stream, "%s = ", SYMBOL_SOURCE_NAME (new));
79      else
80	fprintf_filtered (stream, "<builtin> = ");
81      type_print (type, "", stream, 0);
82      break;
83#endif
84#ifdef _LANG_pascal
85    case language_pascal:
86      fprintf_filtered (stream, "type ");
87      fprintf_filtered (stream, "%s = ", SYMBOL_SOURCE_NAME (new));
88      type_print (type, "", stream, 0);
89      break;
90#endif
91#ifdef _LANG_chill
92    case language_chill:
93      fprintf_filtered (stream, "SYNMODE ");
94      if (!TYPE_NAME (SYMBOL_TYPE (new)) ||
95	  !STREQ (TYPE_NAME (SYMBOL_TYPE (new)), SYMBOL_NAME (new)))
96	fprintf_filtered (stream, "%s = ", SYMBOL_SOURCE_NAME (new));
97      else
98	fprintf_filtered (stream, "<builtin> = ");
99      type_print (type, "", stream, 0);
100      break;
101#endif
102    default:
103      error ("Language not supported.");
104    }
105  fprintf_filtered (stream, ";\n");
106}
107
108/* Print a description of a type TYPE in the form of a declaration of a
109   variable named VARSTRING.  (VARSTRING is demangled if necessary.)
110   Output goes to STREAM (via stdio).
111   If SHOW is positive, we show the contents of the outermost level
112   of structure even if there is a type name that could be used instead.
113   If SHOW is negative, we never show the details of elements' types.  */
114
115void
116type_print (struct type *type, char *varstring, struct ui_file *stream,
117	    int show)
118{
119  LA_PRINT_TYPE (type, varstring, stream, show, 0);
120}
121
122/* Print type of EXP, or last thing in value history if EXP == NULL.
123   show is passed to type_print.  */
124
125static void
126whatis_exp (char *exp, int show)
127{
128  struct expression *expr;
129  struct value *val;
130  register struct cleanup *old_chain = NULL;
131  struct type *real_type = NULL;
132  struct type *type;
133  int full = 0;
134  int top = -1;
135  int using_enc = 0;
136
137  if (exp)
138    {
139      expr = parse_expression (exp);
140      old_chain = make_cleanup (free_current_contents, &expr);
141      val = evaluate_type (expr);
142    }
143  else
144    val = access_value_history (0);
145
146  type = VALUE_TYPE (val);
147
148  if (objectprint)
149    {
150      if (((TYPE_CODE (type) == TYPE_CODE_PTR) ||
151           (TYPE_CODE (type) == TYPE_CODE_REF))
152          &&
153          (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
154        {
155          real_type = value_rtti_target_type (val, &full, &top, &using_enc);
156          if (real_type)
157            {
158              if (TYPE_CODE (type) == TYPE_CODE_PTR)
159                real_type = lookup_pointer_type (real_type);
160              else
161                real_type = lookup_reference_type (real_type);
162            }
163        }
164      else if (TYPE_CODE (type) == TYPE_CODE_CLASS)
165  real_type = value_rtti_type (val, &full, &top, &using_enc);
166    }
167
168  printf_filtered ("type = ");
169
170  if (real_type)
171    {
172      printf_filtered ("/* real type = ");
173      type_print (real_type, "", gdb_stdout, -1);
174      if (! full)
175        printf_filtered (" (incomplete object)");
176      printf_filtered (" */\n");
177    }
178
179  type_print (type, "", gdb_stdout, show);
180  printf_filtered ("\n");
181
182  if (exp)
183    do_cleanups (old_chain);
184}
185
186/* ARGSUSED */
187static void
188whatis_command (char *exp, int from_tty)
189{
190  /* Most of the time users do not want to see all the fields
191     in a structure.  If they do they can use the "ptype" command.
192     Hence the "-1" below.  */
193  whatis_exp (exp, -1);
194}
195
196/* Simple subroutine for ptype_command.  */
197
198static struct type *
199ptype_eval (struct expression *exp)
200{
201  if (exp->elts[0].opcode == OP_TYPE)
202    {
203      return (exp->elts[1].type);
204    }
205  else
206    {
207      return (NULL);
208    }
209}
210
211/* TYPENAME is either the name of a type, or an expression.  */
212
213/* ARGSUSED */
214static void
215ptype_command (char *typename, int from_tty)
216{
217  register struct type *type;
218  struct expression *expr;
219  register struct cleanup *old_chain;
220
221  if (typename == NULL)
222    {
223      /* Print type of last thing in value history. */
224      whatis_exp (typename, 1);
225    }
226  else
227    {
228      expr = parse_expression (typename);
229      old_chain = make_cleanup (free_current_contents, &expr);
230      type = ptype_eval (expr);
231      if (type != NULL)
232	{
233	  /* User did "ptype <typename>" */
234	  printf_filtered ("type = ");
235	  type_print (type, "", gdb_stdout, 1);
236	  printf_filtered ("\n");
237	  do_cleanups (old_chain);
238	}
239      else
240	{
241	  /* User did "ptype <symbolname>" */
242	  do_cleanups (old_chain);
243	  whatis_exp (typename, 1);
244	}
245    }
246}
247
248/* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.
249   Used to print data from type structures in a specified type.  For example,
250   array bounds may be characters or booleans in some languages, and this
251   allows the ranges to be printed in their "natural" form rather than as
252   decimal integer values.
253
254   FIXME:  This is here simply because only the type printing routines
255   currently use it, and it wasn't clear if it really belonged somewhere
256   else (like printcmd.c).  There are a lot of other gdb routines that do
257   something similar, but they are generally concerned with printing values
258   that come from the inferior in target byte order and target size. */
259
260void
261print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
262{
263  unsigned int i;
264  unsigned len;
265
266  CHECK_TYPEDEF (type);
267
268  switch (TYPE_CODE (type))
269    {
270
271    case TYPE_CODE_ENUM:
272      len = TYPE_NFIELDS (type);
273      for (i = 0; i < len; i++)
274	{
275	  if (TYPE_FIELD_BITPOS (type, i) == val)
276	    {
277	      break;
278	    }
279	}
280      if (i < len)
281	{
282	  fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
283	}
284      else
285	{
286	  print_longest (stream, 'd', 0, val);
287	}
288      break;
289
290    case TYPE_CODE_INT:
291      print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
292      break;
293
294    case TYPE_CODE_CHAR:
295      LA_PRINT_CHAR ((unsigned char) val, stream);
296      break;
297
298    case TYPE_CODE_BOOL:
299      fprintf_filtered (stream, val ? "TRUE" : "FALSE");
300      break;
301
302    case TYPE_CODE_RANGE:
303      print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
304      return;
305
306    case TYPE_CODE_UNDEF:
307    case TYPE_CODE_PTR:
308    case TYPE_CODE_ARRAY:
309    case TYPE_CODE_STRUCT:
310    case TYPE_CODE_UNION:
311    case TYPE_CODE_FUNC:
312    case TYPE_CODE_FLT:
313    case TYPE_CODE_VOID:
314    case TYPE_CODE_SET:
315    case TYPE_CODE_STRING:
316    case TYPE_CODE_ERROR:
317    case TYPE_CODE_MEMBER:
318    case TYPE_CODE_METHOD:
319    case TYPE_CODE_REF:
320      error ("internal error: unhandled type in print_type_scalar");
321      break;
322
323    default:
324      error ("Invalid type code in symbol table.");
325    }
326  gdb_flush (stream);
327}
328
329/* Dump details of a type specified either directly or indirectly.
330   Uses the same sort of type lookup mechanism as ptype_command()
331   and whatis_command(). */
332
333void
334maintenance_print_type (char *typename, int from_tty)
335{
336  struct value *val;
337  register struct type *type;
338  register struct cleanup *old_chain;
339  struct expression *expr;
340
341  if (typename != NULL)
342    {
343      expr = parse_expression (typename);
344      old_chain = make_cleanup (free_current_contents, &expr);
345      if (expr->elts[0].opcode == OP_TYPE)
346	{
347	  /* The user expression names a type directly, just use that type. */
348	  type = expr->elts[1].type;
349	}
350      else
351	{
352	  /* The user expression may name a type indirectly by naming an
353	     object of that type.  Find that indirectly named type. */
354	  val = evaluate_type (expr);
355	  type = VALUE_TYPE (val);
356	}
357      if (type != NULL)
358	{
359	  recursive_dump_type (type, 0);
360	}
361      do_cleanups (old_chain);
362    }
363}
364
365
366void
367_initialize_typeprint (void)
368{
369
370  add_com ("ptype", class_vars, ptype_command,
371	   "Print definition of type TYPE.\n\
372Argument may be a type name defined by typedef, or \"struct STRUCT-TAG\"\n\
373or \"class CLASS-NAME\" or \"union UNION-TAG\" or \"enum ENUM-TAG\".\n\
374The selected stack frame's lexical context is used to look up the name.");
375
376  add_com ("whatis", class_vars, whatis_command,
377	   "Print data type of expression EXP.");
378
379}
380