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