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