]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/c-valprint.c
* win32-low.c (win32_add_one_solib): If the dll name is
[thirdparty/binutils-gdb.git] / gdb / c-valprint.c
CommitLineData
c906108c 1/* Support for printing C values for GDB, the GNU debugger.
1bac305b 2
6aba47ca 3 Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
0fb0cc75 4 1998, 1999, 2000, 2001, 2003, 2005, 2006, 2007, 2008, 2009
4f2aea11 5 Free Software Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
309367d4 23#include "gdb_string.h"
c906108c
SS
24#include "symtab.h"
25#include "gdbtypes.h"
26#include "expression.h"
27#include "value.h"
c906108c
SS
28#include "valprint.h"
29#include "language.h"
30#include "c-lang.h"
015a42b4 31#include "cp-abi.h"
e2d0e7eb 32#include "target.h"
c906108c 33\f
c5aa993b 34
6e778545
PS
35/* Print function pointer with inferior address ADDRESS onto stdio
36 stream STREAM. */
37
38static void
50810684
UW
39print_function_pointer_address (struct gdbarch *gdbarch, CORE_ADDR address,
40 struct ui_file *stream, int addressprint)
6e778545 41{
50810684 42 CORE_ADDR func_addr = gdbarch_convert_from_func_ptr_addr (gdbarch, address,
e2d0e7eb 43 &current_target);
6e778545
PS
44
45 /* If the function pointer is represented by a description, print the
46 address of the description. */
47 if (addressprint && func_addr != address)
48 {
49 fputs_filtered ("@", stream);
5af949e3 50 fputs_filtered (paddress (gdbarch, address), stream);
6e778545
PS
51 fputs_filtered (": ", stream);
52 }
5af949e3 53 print_address_demangle (gdbarch, func_addr, stream, demangle);
6e778545
PS
54}
55
56
96c07c5b 57/* A helper for c_textual_element_type. This checks the name of the
6c7a06a3
TT
58 typedef. This is bogus but it isn't apparent that the compiler
59 provides us the help we may need. */
60
61static int
62textual_name (const char *name)
63{
64 return (!strcmp (name, "wchar_t")
65 || !strcmp (name, "char16_t")
66 || !strcmp (name, "char32_t"));
67}
68
ea37ba09
DJ
69/* Apply a heuristic to decide whether an array of TYPE or a pointer
70 to TYPE should be printed as a textual string. Return non-zero if
71 it should, or zero if it should be treated as an array of integers
72 or pointer to integers. FORMAT is the current format letter,
73 or 0 if none.
74
75 We guess that "char" is a character. Explicitly signed and
76 unsigned character types are also characters. Integer data from
77 vector types is not. The user can override this by using the /s
78 format letter. */
79
96c07c5b
TT
80int
81c_textual_element_type (struct type *type, char format)
ea37ba09 82{
85e306ed 83 struct type *true_type, *iter_type;
ea37ba09
DJ
84
85 if (format != 0 && format != 's')
86 return 0;
87
85e306ed
TT
88 /* We also rely on this for its side effect of setting up all the
89 typedef pointers. */
90 true_type = check_typedef (type);
91
ea37ba09
DJ
92 /* TYPE_CODE_CHAR is always textual. */
93 if (TYPE_CODE (true_type) == TYPE_CODE_CHAR)
94 return 1;
85e306ed 95
6c7a06a3
TT
96 /* Any other character-like types must be integral. */
97 if (TYPE_CODE (true_type) != TYPE_CODE_INT)
98 return 0;
99
85e306ed
TT
100 /* We peel typedefs one by one, looking for a match. */
101 iter_type = type;
102 while (iter_type)
103 {
104 /* Check the name of the type. */
105 if (TYPE_NAME (iter_type) && textual_name (TYPE_NAME (iter_type)))
106 return 1;
107
108 if (TYPE_CODE (iter_type) != TYPE_CODE_TYPEDEF)
109 break;
110
111 /* Peel a single typedef. If the typedef doesn't have a target
112 type, we use check_typedef and hope the result is ok -- it
113 might be for C++, where wchar_t is a built-in type. */
114 if (TYPE_TARGET_TYPE (iter_type))
115 iter_type = TYPE_TARGET_TYPE (iter_type);
116 else
117 iter_type = check_typedef (iter_type);
118 }
ea37ba09
DJ
119
120 if (format == 's')
121 {
122 /* Print this as a string if we can manage it. For now, no
123 wide character support. */
124 if (TYPE_CODE (true_type) == TYPE_CODE_INT
125 && TYPE_LENGTH (true_type) == 1)
126 return 1;
127 }
128 else
129 {
130 /* If a one-byte TYPE_CODE_INT is missing the not-a-character
131 flag, then we treat it as text; otherwise, we assume it's
132 being used as data. */
133 if (TYPE_CODE (true_type) == TYPE_CODE_INT
134 && TYPE_LENGTH (true_type) == 1
135 && !TYPE_NOTTEXT (true_type))
136 return 1;
137 }
138
139 return 0;
140}
141
142
c906108c
SS
143/* Print data of type TYPE located at VALADDR (within GDB), which came from
144 the inferior at address ADDRESS, onto stdio stream STREAM according to
79a45b7d 145 OPTIONS. The data at VALADDR is in target byte order.
c906108c
SS
146
147 If the data are a string pointer, returns the number of string characters
79a45b7d 148 printed. */
c906108c
SS
149
150int
fc1a4b47 151c_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
79a45b7d
TT
152 CORE_ADDR address, struct ui_file *stream, int recurse,
153 const struct value_print_options *options)
c906108c 154{
50810684 155 struct gdbarch *gdbarch = get_type_arch (type);
e17a4113 156 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
52f0bd74 157 unsigned int i = 0; /* Number of characters printed */
c906108c 158 unsigned len;
6c7a06a3
TT
159 struct type *elttype, *unresolved_elttype;
160 struct type *unresolved_type = type;
c906108c
SS
161 unsigned eltlen;
162 LONGEST val;
163 CORE_ADDR addr;
164
165 CHECK_TYPEDEF (type);
166 switch (TYPE_CODE (type))
167 {
168 case TYPE_CODE_ARRAY:
6c7a06a3
TT
169 unresolved_elttype = TYPE_TARGET_TYPE (type);
170 elttype = check_typedef (unresolved_elttype);
171 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (unresolved_elttype) > 0)
c906108c
SS
172 {
173 eltlen = TYPE_LENGTH (elttype);
174 len = TYPE_LENGTH (type) / eltlen;
79a45b7d 175 if (options->prettyprint_arrays)
c906108c
SS
176 {
177 print_spaces_filtered (2 + 2 * recurse, stream);
178 }
ea37ba09
DJ
179
180 /* Print arrays of textual chars with a string syntax. */
96c07c5b 181 if (c_textual_element_type (unresolved_elttype, options->format))
c906108c
SS
182 {
183 /* If requested, look for the first null char and only print
c5aa993b 184 elements up to it. */
79a45b7d 185 if (options->stop_print_at_null)
c906108c 186 {
745b8ca0 187 unsigned int temp_len;
c5aa993b 188
c906108c 189 for (temp_len = 0;
6c7a06a3
TT
190 (temp_len < len
191 && temp_len < options->print_max
192 && extract_unsigned_integer (valaddr + embedded_offset
193 + temp_len * eltlen,
e17a4113 194 eltlen, byte_order) == 0);
6c7a06a3
TT
195 ++temp_len)
196 ;
c906108c
SS
197 len = temp_len;
198 }
c5aa993b 199
6c7a06a3
TT
200 LA_PRINT_STRING (stream, unresolved_elttype,
201 valaddr + embedded_offset, len, 0, options);
c906108c
SS
202 i = len;
203 }
204 else
205 {
206 fprintf_filtered (stream, "{");
207 /* If this is a virtual function table, print the 0th
c5aa993b 208 entry specially, and the rest of the members normally. */
c906108c
SS
209 if (cp_is_vtbl_ptr_type (elttype))
210 {
211 i = 1;
3d263c1d 212 fprintf_filtered (stream, _("%d vtable entries"), len - 1);
c906108c
SS
213 }
214 else
215 {
216 i = 0;
217 }
218 val_print_array_elements (type, valaddr + embedded_offset, address, stream,
79a45b7d 219 recurse, options, i);
c906108c
SS
220 fprintf_filtered (stream, "}");
221 }
222 break;
223 }
224 /* Array of unspecified length: treat like pointer to first elt. */
225 addr = address;
226 goto print_unpacked_pointer;
227
0d5de010 228 case TYPE_CODE_MEMBERPTR:
79a45b7d 229 if (options->format)
0d5de010 230 {
79a45b7d
TT
231 print_scalar_formatted (valaddr + embedded_offset, type,
232 options, 0, stream);
0d5de010
DJ
233 break;
234 }
ad4820ab 235 cp_print_class_member (valaddr + embedded_offset, type, stream, "&");
0d5de010
DJ
236 break;
237
238 case TYPE_CODE_METHODPTR:
239 cplus_print_method_ptr (valaddr + embedded_offset, type, stream);
240 break;
241
c906108c 242 case TYPE_CODE_PTR:
79a45b7d 243 if (options->format && options->format != 's')
c906108c 244 {
79a45b7d
TT
245 print_scalar_formatted (valaddr + embedded_offset, type,
246 options, 0, stream);
c906108c
SS
247 break;
248 }
79a45b7d 249 if (options->vtblprint && cp_is_vtbl_ptr_type (type))
c906108c 250 {
c5aa993b 251 /* Print the unmangled name if desired. */
c906108c
SS
252 /* Print vtable entry - we only get here if we ARE using
253 -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */
4478b372
JB
254 CORE_ADDR addr
255 = extract_typed_address (valaddr + embedded_offset, type);
50810684
UW
256 print_function_pointer_address (gdbarch, addr, stream,
257 options->addressprint);
c906108c
SS
258 break;
259 }
6c7a06a3
TT
260 unresolved_elttype = TYPE_TARGET_TYPE (type);
261 elttype = check_typedef (unresolved_elttype);
c906108c
SS
262 {
263 addr = unpack_pointer (type, valaddr + embedded_offset);
264 print_unpacked_pointer:
c906108c
SS
265
266 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
267 {
268 /* Try to print what function it points to. */
50810684 269 print_function_pointer_address (gdbarch, addr, stream,
79a45b7d 270 options->addressprint);
c906108c
SS
271 /* Return value is irrelevant except for string pointers. */
272 return (0);
273 }
274
79a45b7d 275 if (options->addressprint)
5af949e3 276 fputs_filtered (paddress (gdbarch, addr), stream);
c906108c 277
ea37ba09 278 /* For a pointer to a textual type, also print the string
c906108c 279 pointed to, unless pointer is null. */
c906108c 280
96c07c5b 281 if (c_textual_element_type (unresolved_elttype, options->format)
79a45b7d 282 && addr != 0)
c906108c 283 {
6c7a06a3 284 i = val_print_string (unresolved_elttype, addr, -1, stream,
79a45b7d 285 options);
c906108c 286 }
c5aa993b
JM
287 else if (cp_is_vtbl_member (type))
288 {
c906108c
SS
289 /* print vtbl's nicely */
290 CORE_ADDR vt_address = unpack_pointer (type, valaddr + embedded_offset);
291
292 struct minimal_symbol *msymbol =
c5aa993b 293 lookup_minimal_symbol_by_pc (vt_address);
5aafa1cc
PM
294 if ((msymbol != NULL)
295 && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
c906108c
SS
296 {
297 fputs_filtered (" <", stream);
de5ad195 298 fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
c906108c
SS
299 fputs_filtered (">", stream);
300 }
79a45b7d 301 if (vt_address && options->vtblprint)
c5aa993b 302 {
6943961c 303 struct value *vt_val;
c5aa993b
JM
304 struct symbol *wsym = (struct symbol *) NULL;
305 struct type *wtype;
c5aa993b 306 struct block *block = (struct block *) NULL;
c906108c
SS
307 int is_this_fld;
308
309 if (msymbol != NULL)
3567439c 310 wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol), block,
2570f2b7 311 VAR_DOMAIN, &is_this_fld);
c5aa993b 312
c906108c
SS
313 if (wsym)
314 {
c5aa993b 315 wtype = SYMBOL_TYPE (wsym);
c906108c
SS
316 }
317 else
318 {
6c7a06a3 319 wtype = unresolved_elttype;
c906108c 320 }
00a4c844 321 vt_val = value_at (wtype, vt_address);
79a45b7d 322 common_val_print (vt_val, stream, recurse + 1, options,
d8ca156b 323 current_language);
79a45b7d 324 if (options->pretty)
c906108c
SS
325 {
326 fprintf_filtered (stream, "\n");
327 print_spaces_filtered (2 + 2 * recurse, stream);
328 }
c5aa993b
JM
329 }
330 }
c906108c
SS
331
332 /* Return number of characters printed, including the terminating
333 '\0' if we reached the end. val_print_string takes care including
334 the terminating '\0' if necessary. */
335 return i;
336 }
337 break;
338
c906108c
SS
339 case TYPE_CODE_REF:
340 elttype = check_typedef (TYPE_TARGET_TYPE (type));
79a45b7d 341 if (options->addressprint)
c5aa993b 342 {
4478b372
JB
343 CORE_ADDR addr
344 = extract_typed_address (valaddr + embedded_offset, type);
c906108c 345 fprintf_filtered (stream, "@");
5af949e3 346 fputs_filtered (paddress (gdbarch, addr), stream);
79a45b7d 347 if (options->deref_ref)
c906108c 348 fputs_filtered (": ", stream);
c5aa993b 349 }
c906108c 350 /* De-reference the reference. */
79a45b7d 351 if (options->deref_ref)
c906108c
SS
352 {
353 if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
354 {
6943961c 355 struct value *deref_val =
c5aa993b
JM
356 value_at
357 (TYPE_TARGET_TYPE (type),
d8631d21 358 unpack_pointer (type, valaddr + embedded_offset));
79a45b7d
TT
359 common_val_print (deref_val, stream, recurse, options,
360 current_language);
c906108c
SS
361 }
362 else
363 fputs_filtered ("???", stream);
364 }
365 break;
366
367 case TYPE_CODE_UNION:
79a45b7d 368 if (recurse && !options->unionprint)
c906108c
SS
369 {
370 fprintf_filtered (stream, "{...}");
371 break;
372 }
373 /* Fall through. */
374 case TYPE_CODE_STRUCT:
015a42b4 375 /*FIXME: Abstract this away */
79a45b7d 376 if (options->vtblprint && cp_is_vtbl_ptr_type (type))
c906108c 377 {
c5aa993b 378 /* Print the unmangled name if desired. */
c906108c
SS
379 /* Print vtable entry - we only get here if NOT using
380 -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */
4478b372
JB
381 int offset = (embedded_offset +
382 TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8);
383 struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET);
384 CORE_ADDR addr
385 = extract_typed_address (valaddr + offset, field_type);
386
50810684
UW
387 print_function_pointer_address (gdbarch, addr, stream,
388 options->addressprint);
c906108c
SS
389 }
390 else
79a45b7d
TT
391 cp_print_value_fields (type, type, valaddr, embedded_offset, address, stream,
392 recurse, options, NULL, 0);
c906108c
SS
393 break;
394
395 case TYPE_CODE_ENUM:
79a45b7d 396 if (options->format)
c906108c 397 {
79a45b7d
TT
398 print_scalar_formatted (valaddr + embedded_offset, type,
399 options, 0, stream);
c906108c
SS
400 break;
401 }
402 len = TYPE_NFIELDS (type);
403 val = unpack_long (type, valaddr + embedded_offset);
404 for (i = 0; i < len; i++)
405 {
406 QUIT;
407 if (val == TYPE_FIELD_BITPOS (type, i))
408 {
409 break;
410 }
411 }
412 if (i < len)
413 {
414 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
415 }
416 else
417 {
418 print_longest (stream, 'd', 0, val);
419 }
420 break;
421
4f2aea11 422 case TYPE_CODE_FLAGS:
79a45b7d
TT
423 if (options->format)
424 print_scalar_formatted (valaddr + embedded_offset, type,
425 options, 0, stream);
4f2aea11
MK
426 else
427 val_print_type_code_flags (type, valaddr + embedded_offset, stream);
428 break;
429
c906108c 430 case TYPE_CODE_FUNC:
0d5de010 431 case TYPE_CODE_METHOD:
79a45b7d 432 if (options->format)
c906108c 433 {
79a45b7d
TT
434 print_scalar_formatted (valaddr + embedded_offset, type,
435 options, 0, stream);
c906108c
SS
436 break;
437 }
438 /* FIXME, we should consider, at least for ANSI C language, eliminating
c5aa993b 439 the distinction made between FUNCs and POINTERs to FUNCs. */
c906108c
SS
440 fprintf_filtered (stream, "{");
441 type_print (type, "", stream, -1);
442 fprintf_filtered (stream, "} ");
443 /* Try to print what function it points to, and its address. */
5af949e3 444 print_address_demangle (gdbarch, address, stream, demangle);
c906108c
SS
445 break;
446
447 case TYPE_CODE_BOOL:
79a45b7d
TT
448 if (options->format || options->output_format)
449 {
450 struct value_print_options opts = *options;
451 opts.format = (options->format ? options->format
452 : options->output_format);
453 print_scalar_formatted (valaddr + embedded_offset, type,
454 &opts, 0, stream);
455 }
c906108c
SS
456 else
457 {
458 val = unpack_long (type, valaddr + embedded_offset);
459 if (val == 0)
460 fputs_filtered ("false", stream);
461 else if (val == 1)
462 fputs_filtered ("true", stream);
463 else
464 print_longest (stream, 'd', 0, val);
465 }
466 break;
467
468 case TYPE_CODE_RANGE:
469 /* FIXME: create_range_type does not set the unsigned bit in a
c5aa993b
JM
470 range type (I think it probably should copy it from the target
471 type), so we won't print values which are too large to
472 fit in a signed integer correctly. */
c906108c 473 /* FIXME: Doesn't handle ranges of enums correctly. (Can't just
c5aa993b
JM
474 print with the target type, though, because the size of our type
475 and the target type might differ). */
c906108c
SS
476 /* FALLTHROUGH */
477
478 case TYPE_CODE_INT:
79a45b7d 479 if (options->format || options->output_format)
c906108c 480 {
79a45b7d
TT
481 struct value_print_options opts = *options;
482 opts.format = (options->format ? options->format
483 : options->output_format);
484 print_scalar_formatted (valaddr + embedded_offset, type,
485 &opts, 0, stream);
c906108c
SS
486 }
487 else
488 {
489 val_print_type_code_int (type, valaddr + embedded_offset, stream);
490 /* C and C++ has no single byte int type, char is used instead.
491 Since we don't know whether the value is really intended to
492 be used as an integer or a character, print the character
ea37ba09 493 equivalent as well. */
96c07c5b 494 if (c_textual_element_type (unresolved_type, options->format))
c906108c
SS
495 {
496 fputs_filtered (" ", stream);
497 LA_PRINT_CHAR ((unsigned char) unpack_long (type, valaddr + embedded_offset),
6c7a06a3 498 unresolved_type, stream);
c906108c
SS
499 }
500 }
501 break;
502
503 case TYPE_CODE_CHAR:
79a45b7d 504 if (options->format || options->output_format)
c906108c 505 {
79a45b7d
TT
506 struct value_print_options opts = *options;
507 opts.format = (options->format ? options->format
508 : options->output_format);
509 print_scalar_formatted (valaddr + embedded_offset, type,
510 &opts, 0, stream);
c906108c
SS
511 }
512 else
513 {
96baa820
JM
514 val = unpack_long (type, valaddr + embedded_offset);
515 if (TYPE_UNSIGNED (type))
516 fprintf_filtered (stream, "%u", (unsigned int) val);
517 else
518 fprintf_filtered (stream, "%d", (int) val);
c906108c 519 fputs_filtered (" ", stream);
6c7a06a3 520 LA_PRINT_CHAR ((unsigned char) val, unresolved_type, stream);
c906108c
SS
521 }
522 break;
523
524 case TYPE_CODE_FLT:
79a45b7d 525 if (options->format)
c906108c 526 {
79a45b7d
TT
527 print_scalar_formatted (valaddr + embedded_offset, type,
528 options, 0, stream);
c906108c
SS
529 }
530 else
531 {
532 print_floating (valaddr + embedded_offset, type, stream);
533 }
534 break;
535
7678ef8f 536 case TYPE_CODE_DECFLOAT:
79a45b7d
TT
537 if (options->format)
538 print_scalar_formatted (valaddr + embedded_offset, type,
539 options, 0, stream);
7678ef8f
TJB
540 else
541 print_decimal_floating (valaddr + embedded_offset, type, stream);
542 break;
543
c906108c
SS
544 case TYPE_CODE_VOID:
545 fprintf_filtered (stream, "void");
546 break;
547
548 case TYPE_CODE_ERROR:
3d263c1d 549 fprintf_filtered (stream, _("<error type>"));
c906108c
SS
550 break;
551
552 case TYPE_CODE_UNDEF:
553 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
c5aa993b
JM
554 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
555 and no complete type for struct foo in that file. */
3d263c1d 556 fprintf_filtered (stream, _("<incomplete type>"));
c906108c
SS
557 break;
558
fca9e603 559 case TYPE_CODE_COMPLEX:
79a45b7d 560 if (options->format)
fca9e603
DJ
561 print_scalar_formatted (valaddr + embedded_offset,
562 TYPE_TARGET_TYPE (type),
79a45b7d 563 options, 0, stream);
fca9e603
DJ
564 else
565 print_floating (valaddr + embedded_offset, TYPE_TARGET_TYPE (type),
566 stream);
567 fprintf_filtered (stream, " + ");
79a45b7d 568 if (options->format)
fca9e603
DJ
569 print_scalar_formatted (valaddr + embedded_offset
570 + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
571 TYPE_TARGET_TYPE (type),
79a45b7d 572 options, 0, stream);
fca9e603
DJ
573 else
574 print_floating (valaddr + embedded_offset
575 + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
576 TYPE_TARGET_TYPE (type),
577 stream);
578 fprintf_filtered (stream, " * I");
579 break;
580
c906108c 581 default:
3d263c1d 582 error (_("Invalid C/C++ type code %d in symbol table."), TYPE_CODE (type));
c906108c
SS
583 }
584 gdb_flush (stream);
585 return (0);
586}
587\f
588int
79a45b7d
TT
589c_value_print (struct value *val, struct ui_file *stream,
590 const struct value_print_options *options)
c906108c 591{
6c7a06a3 592 struct type *type, *real_type, *val_type;
c906108c 593 int full, top, using_enc;
79a45b7d
TT
594 struct value_print_options opts = *options;
595
596 opts.deref_ref = 1;
c5aa993b 597
c906108c
SS
598 /* If it is a pointer, indicate what it points to.
599
600 Print type also if it is a reference.
601
602 C++: if it is a member pointer, we will take care
603 of that when we print it. */
88750304 604
6c7a06a3
TT
605 /* Preserve the original type before stripping typedefs. We prefer
606 to pass down the original type when possible, but for local
607 checks it is better to look past the typedefs. */
608 val_type = value_type (val);
609 type = check_typedef (val_type);
88750304
DJ
610
611 if (TYPE_CODE (type) == TYPE_CODE_PTR
612 || TYPE_CODE (type) == TYPE_CODE_REF)
c906108c
SS
613 {
614 /* Hack: remove (char *) for char strings. Their
ea37ba09 615 type is indicated by the quoted string anyway.
96c07c5b 616 (Don't use c_textual_element_type here; quoted strings
6c7a06a3
TT
617 are always exactly (char *), (wchar_t *), or the like. */
618 if (TYPE_CODE (val_type) == TYPE_CODE_PTR
619 && TYPE_NAME (val_type) == NULL
620 && TYPE_NAME (TYPE_TARGET_TYPE (val_type)) != NULL
621 && (strcmp (TYPE_NAME (TYPE_TARGET_TYPE (val_type)), "char") == 0
622 || textual_name (TYPE_NAME (TYPE_TARGET_TYPE (val_type)))))
c906108c
SS
623 {
624 /* Print nothing */
625 }
79a45b7d
TT
626 else if (options->objectprint
627 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
c5aa993b 628 {
070ad9f0
DB
629
630 if (TYPE_CODE(type) == TYPE_CODE_REF)
631 {
632 /* Copy value, change to pointer, so we don't get an
633 * error about a non-pointer type in value_rtti_target_type
634 */
6943961c 635 struct value *temparg;
070ad9f0 636 temparg=value_copy(val);
04624583 637 deprecated_set_value_type (temparg, lookup_pointer_type (TYPE_TARGET_TYPE(type)));
070ad9f0
DB
638 val=temparg;
639 }
c5aa993b 640 /* Pointer to class, check real type of object */
c906108c 641 fprintf_filtered (stream, "(");
c4093a6a
JM
642 real_type = value_rtti_target_type (val, &full, &top, &using_enc);
643 if (real_type)
c5aa993b
JM
644 {
645 /* RTTI entry found */
c4093a6a
JM
646 if (TYPE_CODE (type) == TYPE_CODE_PTR)
647 {
648 /* create a pointer type pointing to the real type */
649 type = lookup_pointer_type (real_type);
650 }
651 else
652 {
653 /* create a reference type referencing the real type */
654 type = lookup_reference_type (real_type);
655 }
070ad9f0 656 /* JYG: Need to adjust pointer value. */
5086187c
AC
657 /* NOTE: cagney/2005-01-02: THIS IS BOGUS. */
658 value_contents_writeable (val)[0] -= top;
070ad9f0 659
c4093a6a
JM
660 /* Note: When we look up RTTI entries, we don't get any
661 information on const or volatile attributes */
662 }
663 type_print (type, "", stream, -1);
c906108c 664 fprintf_filtered (stream, ") ");
6c7a06a3 665 val_type = type;
c5aa993b 666 }
c906108c
SS
667 else
668 {
c5aa993b 669 /* normal case */
c906108c 670 fprintf_filtered (stream, "(");
88750304 671 type_print (value_type (val), "", stream, -1);
c906108c
SS
672 fprintf_filtered (stream, ") ");
673 }
674 }
88750304 675
42be36b3
CT
676 if (!value_initialized (val))
677 fprintf_filtered (stream, " [uninitialized] ");
678
79a45b7d 679 if (options->objectprint && (TYPE_CODE (type) == TYPE_CODE_CLASS))
c906108c
SS
680 {
681 /* Attempt to determine real type of object */
682 real_type = value_rtti_type (val, &full, &top, &using_enc);
c5aa993b
JM
683 if (real_type)
684 {
685 /* We have RTTI information, so use it */
686 val = value_full_object (val, real_type, full, top, using_enc);
687 fprintf_filtered (stream, "(%s%s) ",
688 TYPE_NAME (real_type),
3d263c1d 689 full ? "" : _(" [incomplete object]"));
c5aa993b 690 /* Print out object: enclosing type is same as real_type if full */
46615f07
AC
691 return val_print (value_enclosing_type (val),
692 value_contents_all (val), 0,
42ae5230 693 value_address (val), stream, 0,
79a45b7d 694 &opts, current_language);
c4093a6a
JM
695 /* Note: When we look up RTTI entries, we don't get any information on
696 const or volatile attributes */
c5aa993b 697 }
88750304 698 else if (type != check_typedef (value_enclosing_type (val)))
c5aa993b
JM
699 {
700 /* No RTTI information, so let's do our best */
701 fprintf_filtered (stream, "(%s ?) ",
4754a64e 702 TYPE_NAME (value_enclosing_type (val)));
46615f07
AC
703 return val_print (value_enclosing_type (val),
704 value_contents_all (val), 0,
42ae5230 705 value_address (val), stream, 0,
79a45b7d 706 &opts, current_language);
c5aa993b 707 }
c906108c
SS
708 /* Otherwise, we end up at the return outside this "if" */
709 }
c5aa993b 710
6c7a06a3 711 return val_print (val_type, value_contents_all (val),
13c3b5f5 712 value_embedded_offset (val),
42ae5230 713 value_address (val),
79a45b7d 714 stream, 0, &opts, current_language);
c906108c 715}