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.
5 This file is part of GDB.
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.
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.
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. */
24 #include "bfd.h" /* Binary File Description */
27 #include "expression.h"
36 #include "gdb_string.h"
39 /* For real-type printing in whatis_exp() */
40 extern int objectprint; /* Controls looking up an object's derived type
41 using what we find in its vtables. */
43 extern void _initialize_typeprint (void);
45 static void ptype_command (char *, int);
47 static struct type *ptype_eval (struct expression *);
49 static void whatis_command (char *, int);
51 static void whatis_exp (char *, int);
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. */
58 typedef_print (struct type *type, struct symbol *new, struct ui_file *stream)
61 switch (current_language->la_language)
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));
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));
80 fprintf_filtered (stream, "<builtin> = ");
81 type_print (type, "", stream, 0);
86 fprintf_filtered (stream, "type ");
87 fprintf_filtered (stream, "%s = ", SYMBOL_SOURCE_NAME (new));
88 type_print (type, "", stream, 0);
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));
98 fprintf_filtered (stream, "<builtin> = ");
99 type_print (type, "", stream, 0);
103 error ("Language not supported.");
105 fprintf_filtered (stream, ";\n");
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. */
116 type_print (struct type *type, char *varstring, struct ui_file *stream,
119 LA_PRINT_TYPE (type, varstring, stream, show, 0);
122 /* Print type of EXP, or last thing in value history if EXP == NULL.
123 show is passed to type_print. */
126 whatis_exp (char *exp, int show)
128 struct expression *expr;
130 register struct cleanup *old_chain = NULL;
131 struct type *real_type = NULL;
139 expr = parse_expression (exp);
140 old_chain = make_cleanup (free_current_contents, &expr);
141 val = evaluate_type (expr);
144 val = access_value_history (0);
146 type = VALUE_TYPE (val);
150 if (((TYPE_CODE (type) == TYPE_CODE_PTR) ||
151 (TYPE_CODE (type) == TYPE_CODE_REF))
153 (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
155 real_type = value_rtti_target_type (val, &full, &top, &using_enc);
158 if (TYPE_CODE (type) == TYPE_CODE_PTR)
159 real_type = lookup_pointer_type (real_type);
161 real_type = lookup_reference_type (real_type);
164 else if (TYPE_CODE (type) == TYPE_CODE_CLASS)
165 real_type = value_rtti_type (val, &full, &top, &using_enc);
168 printf_filtered ("type = ");
172 printf_filtered ("/* real type = ");
173 type_print (real_type, "", gdb_stdout, -1);
175 printf_filtered (" (incomplete object)");
176 printf_filtered (" */\n");
179 type_print (type, "", gdb_stdout, show);
180 printf_filtered ("\n");
183 do_cleanups (old_chain);
188 whatis_command (char *exp, int from_tty)
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);
196 /* Simple subroutine for ptype_command. */
199 ptype_eval (struct expression *exp)
201 if (exp->elts[0].opcode == OP_TYPE)
203 return (exp->elts[1].type);
211 /* TYPENAME is either the name of a type, or an expression. */
215 ptype_command (char *typename, int from_tty)
217 register struct type *type;
218 struct expression *expr;
219 register struct cleanup *old_chain;
221 if (typename == NULL)
223 /* Print type of last thing in value history. */
224 whatis_exp (typename, 1);
228 expr = parse_expression (typename);
229 old_chain = make_cleanup (free_current_contents, &expr);
230 type = ptype_eval (expr);
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);
241 /* User did "ptype <symbolname>" */
242 do_cleanups (old_chain);
243 whatis_exp (typename, 1);
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.
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. */
261 print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
266 CHECK_TYPEDEF (type);
268 switch (TYPE_CODE (type))
272 len = TYPE_NFIELDS (type);
273 for (i = 0; i < len; i++)
275 if (TYPE_FIELD_BITPOS (type, i) == val)
282 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
286 print_longest (stream, 'd', 0, val);
291 print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
295 LA_PRINT_CHAR ((unsigned char) val, stream);
299 fprintf_filtered (stream, val ? "TRUE" : "FALSE");
302 case TYPE_CODE_RANGE:
303 print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
306 case TYPE_CODE_UNDEF:
308 case TYPE_CODE_ARRAY:
309 case TYPE_CODE_STRUCT:
310 case TYPE_CODE_UNION:
315 case TYPE_CODE_STRING:
316 case TYPE_CODE_ERROR:
317 case TYPE_CODE_MEMBER:
318 case TYPE_CODE_METHOD:
320 error ("internal error: unhandled type in print_type_scalar");
324 error ("Invalid type code in symbol table.");
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(). */
334 maintenance_print_type (char *typename, int from_tty)
337 register struct type *type;
338 register struct cleanup *old_chain;
339 struct expression *expr;
341 if (typename != NULL)
343 expr = parse_expression (typename);
344 old_chain = make_cleanup (free_current_contents, &expr);
345 if (expr->elts[0].opcode == OP_TYPE)
347 /* The user expression names a type directly, just use that type. */
348 type = expr->elts[1].type;
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);
359 recursive_dump_type (type, 0);
361 do_cleanups (old_chain);
367 _initialize_typeprint (void)
370 add_com ("ptype", class_vars, ptype_command,
371 "Print definition of type TYPE.\n\
372 Argument may be a type name defined by typedef, or \"struct STRUCT-TAG\"\n\
373 or \"class CLASS-NAME\" or \"union UNION-TAG\" or \"enum ENUM-TAG\".\n\
374 The selected stack frame's lexical context is used to look up the name.");
376 add_com ("whatis", class_vars, whatis_command,
377 "Print data type of expression EXP.");