Make "print" and "compile print" support -OPT options
[deliverable/binutils-gdb.git] / gdb / cp-valprint.c
1 /* Support for printing C++ values for GDB, the GNU debugger.
2
3 Copyright (C) 1986-2019 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 3 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, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "gdb_obstack.h"
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "expression.h"
25 #include "value.h"
26 #include "command.h"
27 #include "gdbcmd.h"
28 #include "demangle.h"
29 #include "annotate.h"
30 #include "c-lang.h"
31 #include "target.h"
32 #include "cp-abi.h"
33 #include "valprint.h"
34 #include "cp-support.h"
35 #include "language.h"
36 #include "extension.h"
37 #include "typeprint.h"
38 #include "common/byte-vector.h"
39
40 static struct obstack dont_print_vb_obstack;
41 static struct obstack dont_print_statmem_obstack;
42 static struct obstack dont_print_stat_array_obstack;
43
44 static void cp_print_static_field (struct type *, struct value *,
45 struct ui_file *, int,
46 const struct value_print_options *);
47
48 static void cp_print_value (struct type *, struct type *,
49 LONGEST,
50 CORE_ADDR, struct ui_file *,
51 int, struct value *,
52 const struct value_print_options *,
53 struct type **);
54
55
56 /* GCC versions after 2.4.5 use this. */
57 extern const char vtbl_ptr_name[] = "__vtbl_ptr_type";
58
59 /* Return truth value for assertion that TYPE is of the type
60 "pointer to virtual function". */
61
62 int
63 cp_is_vtbl_ptr_type (struct type *type)
64 {
65 const char *type_name = TYPE_NAME (type);
66
67 return (type_name != NULL && !strcmp (type_name, vtbl_ptr_name));
68 }
69
70 /* Return truth value for the assertion that TYPE is of the type
71 "pointer to virtual function table". */
72
73 int
74 cp_is_vtbl_member (struct type *type)
75 {
76 /* With older versions of g++, the vtbl field pointed to an array of
77 structures. Nowadays it points directly to the structure. */
78 if (TYPE_CODE (type) == TYPE_CODE_PTR)
79 {
80 type = TYPE_TARGET_TYPE (type);
81 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
82 {
83 type = TYPE_TARGET_TYPE (type);
84 if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */
85 || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
86 {
87 /* Virtual functions tables are full of pointers
88 to virtual functions. */
89 return cp_is_vtbl_ptr_type (type);
90 }
91 }
92 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) /* if not using thunks */
93 {
94 return cp_is_vtbl_ptr_type (type);
95 }
96 else if (TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
97 {
98 /* The type name of the thunk pointer is NULL when using
99 dwarf2. We could test for a pointer to a function, but
100 there is no type info for the virtual table either, so it
101 wont help. */
102 return cp_is_vtbl_ptr_type (type);
103 }
104 }
105 return 0;
106 }
107
108 /* Mutually recursive subroutines of cp_print_value and c_val_print to
109 print out a structure's fields: cp_print_value_fields and
110 cp_print_value.
111
112 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the same
113 meanings as in cp_print_value and c_val_print.
114
115 2nd argument REAL_TYPE is used to carry over the type of the
116 derived class across the recursion to base classes.
117
118 DONT_PRINT is an array of baseclass types that we should not print,
119 or zero if called from top level. */
120
121 void
122 cp_print_value_fields (struct type *type, struct type *real_type,
123 LONGEST offset,
124 CORE_ADDR address, struct ui_file *stream,
125 int recurse, struct value *val,
126 const struct value_print_options *options,
127 struct type **dont_print_vb,
128 int dont_print_statmem)
129 {
130 int i, len, n_baseclasses;
131 int fields_seen = 0;
132 static int last_set_recurse = -1;
133
134 type = check_typedef (type);
135
136 if (recurse == 0)
137 {
138 /* Any object can be left on obstacks only during an unexpected
139 error. */
140
141 if (obstack_object_size (&dont_print_statmem_obstack) > 0)
142 {
143 obstack_free (&dont_print_statmem_obstack, NULL);
144 obstack_begin (&dont_print_statmem_obstack,
145 32 * sizeof (CORE_ADDR));
146 }
147 if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
148 {
149 obstack_free (&dont_print_stat_array_obstack, NULL);
150 obstack_begin (&dont_print_stat_array_obstack,
151 32 * sizeof (struct type *));
152 }
153 }
154
155 fprintf_filtered (stream, "{");
156 len = TYPE_NFIELDS (type);
157 n_baseclasses = TYPE_N_BASECLASSES (type);
158
159 /* First, print out baseclasses such that we don't print
160 duplicates of virtual baseclasses. */
161
162 if (n_baseclasses > 0)
163 cp_print_value (type, real_type,
164 offset, address, stream,
165 recurse + 1, val, options,
166 dont_print_vb);
167
168 /* Second, print out data fields */
169
170 /* If there are no data fields, skip this part */
171 if (len == n_baseclasses || !len)
172 fprintf_filtered (stream, "<No data fields>");
173 else
174 {
175 size_t statmem_obstack_initial_size = 0;
176 size_t stat_array_obstack_initial_size = 0;
177 struct type *vptr_basetype = NULL;
178 int vptr_fieldno;
179
180 if (dont_print_statmem == 0)
181 {
182 statmem_obstack_initial_size =
183 obstack_object_size (&dont_print_statmem_obstack);
184
185 if (last_set_recurse != recurse)
186 {
187 stat_array_obstack_initial_size =
188 obstack_object_size (&dont_print_stat_array_obstack);
189
190 last_set_recurse = recurse;
191 }
192 }
193
194 vptr_fieldno = get_vptr_fieldno (type, &vptr_basetype);
195 for (i = n_baseclasses; i < len; i++)
196 {
197 const gdb_byte *valaddr = value_contents_for_printing (val);
198
199 /* If requested, skip printing of static fields. */
200 if (!options->static_field_print
201 && field_is_static (&TYPE_FIELD (type, i)))
202 continue;
203
204 if (fields_seen)
205 {
206 fputs_filtered (",", stream);
207 if (!options->prettyformat)
208 fputs_filtered (" ", stream);
209 }
210 else if (n_baseclasses > 0)
211 {
212 if (options->prettyformat)
213 {
214 fprintf_filtered (stream, "\n");
215 print_spaces_filtered (2 + 2 * recurse, stream);
216 fputs_filtered ("members of ", stream);
217 fputs_filtered (TYPE_NAME (type), stream);
218 fputs_filtered (":", stream);
219 }
220 }
221 fields_seen = 1;
222
223 if (options->prettyformat)
224 {
225 fprintf_filtered (stream, "\n");
226 print_spaces_filtered (2 + 2 * recurse, stream);
227 }
228 else
229 {
230 wrap_here (n_spaces (2 + 2 * recurse));
231 }
232
233 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
234
235 if (field_is_static (&TYPE_FIELD (type, i)))
236 fputs_filtered ("static ", stream);
237 fprintf_symbol_filtered (stream,
238 TYPE_FIELD_NAME (type, i),
239 current_language->la_language,
240 DMGL_PARAMS | DMGL_ANSI);
241 annotate_field_name_end ();
242
243 /* We tweak various options in a few cases below. */
244 value_print_options options_copy = *options;
245 value_print_options *opts = &options_copy;
246
247 /* Do not print leading '=' in case of anonymous
248 unions. */
249 if (strcmp (TYPE_FIELD_NAME (type, i), ""))
250 fputs_filtered (" = ", stream);
251 else
252 {
253 /* If this is an anonymous field then we want to consider it
254 as though it is at its parent's depth when it comes to the
255 max print depth. */
256 if (opts->max_depth != -1 && opts->max_depth < INT_MAX)
257 ++opts->max_depth;
258 }
259 annotate_field_value ();
260
261 if (!field_is_static (&TYPE_FIELD (type, i))
262 && TYPE_FIELD_PACKED (type, i))
263 {
264 struct value *v;
265
266 /* Bitfields require special handling, especially due to
267 byte order problems. */
268 if (TYPE_FIELD_IGNORE (type, i))
269 {
270 fputs_filtered ("<optimized out or zero length>", stream);
271 }
272 else if (value_bits_synthetic_pointer (val,
273 TYPE_FIELD_BITPOS (type,
274 i),
275 TYPE_FIELD_BITSIZE (type,
276 i)))
277 {
278 fputs_filtered (_("<synthetic pointer>"), stream);
279 }
280 else
281 {
282 opts->deref_ref = 0;
283
284 v = value_field_bitfield (type, i, valaddr, offset, val);
285
286 common_val_print (v, stream, recurse + 1,
287 opts, current_language);
288 }
289 }
290 else
291 {
292 if (TYPE_FIELD_IGNORE (type, i))
293 {
294 fputs_filtered ("<optimized out or zero length>",
295 stream);
296 }
297 else if (field_is_static (&TYPE_FIELD (type, i)))
298 {
299 try
300 {
301 struct value *v = value_static_field (type, i);
302
303 cp_print_static_field (TYPE_FIELD_TYPE (type, i),
304 v, stream, recurse + 1,
305 options);
306 }
307 catch (const gdb_exception_error &ex)
308 {
309 fprintf_filtered (stream,
310 _("<error reading variable: %s>"),
311 ex.what ());
312 }
313 }
314 else if (i == vptr_fieldno && type == vptr_basetype)
315 {
316 int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
317 struct type *i_type = TYPE_FIELD_TYPE (type, i);
318
319 if (valprint_check_validity (stream, i_type, i_offset, val))
320 {
321 CORE_ADDR addr;
322
323 addr = extract_typed_address (valaddr + i_offset, i_type);
324 print_function_pointer_address (opts,
325 get_type_arch (type),
326 addr, stream);
327 }
328 }
329 else
330 {
331 opts->deref_ref = 0;
332 val_print (TYPE_FIELD_TYPE (type, i),
333 offset + TYPE_FIELD_BITPOS (type, i) / 8,
334 address,
335 stream, recurse + 1, val, opts,
336 current_language);
337 }
338 }
339 annotate_field_end ();
340 }
341
342 if (dont_print_statmem == 0)
343 {
344 size_t obstack_final_size =
345 obstack_object_size (&dont_print_statmem_obstack);
346
347 if (obstack_final_size > statmem_obstack_initial_size)
348 {
349 /* In effect, a pop of the printed-statics stack. */
350 size_t shrink_bytes
351 = statmem_obstack_initial_size - obstack_final_size;
352 obstack_blank_fast (&dont_print_statmem_obstack, shrink_bytes);
353 }
354
355 if (last_set_recurse != recurse)
356 {
357 obstack_final_size =
358 obstack_object_size (&dont_print_stat_array_obstack);
359
360 if (obstack_final_size > stat_array_obstack_initial_size)
361 {
362 void *free_to_ptr =
363 (char *) obstack_next_free (&dont_print_stat_array_obstack)
364 - (obstack_final_size
365 - stat_array_obstack_initial_size);
366
367 obstack_free (&dont_print_stat_array_obstack,
368 free_to_ptr);
369 }
370 last_set_recurse = -1;
371 }
372 }
373
374 if (options->prettyformat)
375 {
376 fprintf_filtered (stream, "\n");
377 print_spaces_filtered (2 * recurse, stream);
378 }
379 } /* if there are data fields */
380
381 fprintf_filtered (stream, "}");
382 }
383
384 /* Like cp_print_value_fields, but find the runtime type of the object
385 and pass it as the `real_type' argument to cp_print_value_fields.
386 This function is a hack to work around the fact that
387 common_val_print passes the embedded offset to val_print, but not
388 the enclosing type. */
389
390 void
391 cp_print_value_fields_rtti (struct type *type,
392 const gdb_byte *valaddr, LONGEST offset,
393 CORE_ADDR address,
394 struct ui_file *stream, int recurse,
395 struct value *val,
396 const struct value_print_options *options,
397 struct type **dont_print_vb,
398 int dont_print_statmem)
399 {
400 struct type *real_type = NULL;
401
402 /* We require all bits to be valid in order to attempt a
403 conversion. */
404 if (!value_bits_any_optimized_out (val,
405 TARGET_CHAR_BIT * offset,
406 TARGET_CHAR_BIT * TYPE_LENGTH (type)))
407 {
408 struct value *value;
409 int full, using_enc;
410 LONGEST top;
411
412 /* Ugh, we have to convert back to a value here. */
413 value = value_from_contents_and_address (type, valaddr + offset,
414 address + offset);
415 type = value_type (value);
416 /* We don't actually care about most of the result here -- just
417 the type. We already have the correct offset, due to how
418 val_print was initially called. */
419 real_type = value_rtti_type (value, &full, &top, &using_enc);
420 }
421
422 if (!real_type)
423 real_type = type;
424
425 cp_print_value_fields (type, real_type, offset,
426 address, stream, recurse, val, options,
427 dont_print_vb, dont_print_statmem);
428 }
429
430 /* Special val_print routine to avoid printing multiple copies of
431 virtual baseclasses. */
432
433 static void
434 cp_print_value (struct type *type, struct type *real_type,
435 LONGEST offset,
436 CORE_ADDR address, struct ui_file *stream,
437 int recurse, struct value *val,
438 const struct value_print_options *options,
439 struct type **dont_print_vb)
440 {
441 struct type **last_dont_print
442 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
443 struct obstack tmp_obstack = dont_print_vb_obstack;
444 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
445 LONGEST thisoffset;
446 struct type *thistype;
447 const gdb_byte *valaddr = value_contents_for_printing (val);
448
449 if (dont_print_vb == 0)
450 {
451 /* If we're at top level, carve out a completely fresh chunk of
452 the obstack and use that until this particular invocation
453 returns. */
454 /* Bump up the high-water mark. Now alpha is omega. */
455 obstack_finish (&dont_print_vb_obstack);
456 }
457
458 for (i = 0; i < n_baseclasses; i++)
459 {
460 LONGEST boffset = 0;
461 int skip = 0;
462 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
463 const char *basename = TYPE_NAME (baseclass);
464 struct value *base_val = NULL;
465
466 if (BASETYPE_VIA_VIRTUAL (type, i))
467 {
468 struct type **first_dont_print
469 = (struct type **) obstack_base (&dont_print_vb_obstack);
470
471 int j = (struct type **)
472 obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
473
474 while (--j >= 0)
475 if (baseclass == first_dont_print[j])
476 goto flush_it;
477
478 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
479 }
480
481 thisoffset = offset;
482 thistype = real_type;
483
484 try
485 {
486 boffset = baseclass_offset (type, i, valaddr, offset, address, val);
487 }
488 catch (const gdb_exception_error &ex)
489 {
490 if (ex.error == NOT_AVAILABLE_ERROR)
491 skip = -1;
492 else
493 skip = 1;
494 }
495
496 if (skip == 0)
497 {
498 if (BASETYPE_VIA_VIRTUAL (type, i))
499 {
500 /* The virtual base class pointer might have been
501 clobbered by the user program. Make sure that it
502 still points to a valid memory location. */
503
504 if ((boffset + offset) < 0
505 || (boffset + offset) >= TYPE_LENGTH (real_type))
506 {
507 gdb::byte_vector buf (TYPE_LENGTH (baseclass));
508
509 if (target_read_memory (address + boffset, buf.data (),
510 TYPE_LENGTH (baseclass)) != 0)
511 skip = 1;
512 base_val = value_from_contents_and_address (baseclass,
513 buf.data (),
514 address + boffset);
515 baseclass = value_type (base_val);
516 thisoffset = 0;
517 boffset = 0;
518 thistype = baseclass;
519 }
520 else
521 {
522 base_val = val;
523 }
524 }
525 else
526 {
527 base_val = val;
528 }
529 }
530
531 /* Now do the printing. */
532 if (options->prettyformat)
533 {
534 fprintf_filtered (stream, "\n");
535 print_spaces_filtered (2 * recurse, stream);
536 }
537 fputs_filtered ("<", stream);
538 /* Not sure what the best notation is in the case where there is
539 no baseclass name. */
540 fputs_filtered (basename ? basename : "", stream);
541 fputs_filtered ("> = ", stream);
542
543 if (skip < 0)
544 val_print_unavailable (stream);
545 else if (skip > 0)
546 val_print_invalid_address (stream);
547 else
548 {
549 int result = 0;
550
551 if (options->max_depth > -1
552 && recurse >= options->max_depth)
553 {
554 const struct language_defn *language = current_language;
555 gdb_assert (language->la_struct_too_deep_ellipsis != NULL);
556 fputs_filtered (language->la_struct_too_deep_ellipsis, stream);
557 }
558 else
559 {
560 /* Attempt to run an extension language pretty-printer on the
561 baseclass if possible. */
562 if (!options->raw)
563 result
564 = apply_ext_lang_val_pretty_printer (baseclass,
565 thisoffset + boffset,
566 value_address (base_val),
567 stream, recurse,
568 base_val, options,
569 current_language);
570
571 if (!result)
572 cp_print_value_fields (baseclass, thistype,
573 thisoffset + boffset,
574 value_address (base_val),
575 stream, recurse, base_val, options,
576 ((struct type **)
577 obstack_base (&dont_print_vb_obstack)),
578 0);
579 }
580 }
581 fputs_filtered (", ", stream);
582
583 flush_it:
584 ;
585 }
586
587 if (dont_print_vb == 0)
588 {
589 /* Free the space used to deal with the printing
590 of this type from top level. */
591 obstack_free (&dont_print_vb_obstack, last_dont_print);
592 /* Reset watermark so that we can continue protecting
593 ourselves from whatever we were protecting ourselves. */
594 dont_print_vb_obstack = tmp_obstack;
595 }
596 }
597
598 /* Print value of a static member. To avoid infinite recursion when
599 printing a class that contains a static instance of the class, we
600 keep the addresses of all printed static member classes in an
601 obstack and refuse to print them more than once.
602
603 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
604 have the same meanings as in c_val_print. */
605
606 static void
607 cp_print_static_field (struct type *type,
608 struct value *val,
609 struct ui_file *stream,
610 int recurse,
611 const struct value_print_options *options)
612 {
613 struct value_print_options opts;
614
615 if (value_entirely_optimized_out (val))
616 {
617 val_print_optimized_out (val, stream);
618 return;
619 }
620
621 struct type *real_type = check_typedef (type);
622 if (TYPE_CODE (real_type) == TYPE_CODE_STRUCT)
623 {
624 CORE_ADDR *first_dont_print;
625 CORE_ADDR addr;
626 int i;
627
628 first_dont_print
629 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
630 i = obstack_object_size (&dont_print_statmem_obstack)
631 / sizeof (CORE_ADDR);
632
633 while (--i >= 0)
634 {
635 if (value_address (val) == first_dont_print[i])
636 {
637 fputs_filtered ("<same as static member of an already"
638 " seen type>",
639 stream);
640 return;
641 }
642 }
643
644 addr = value_address (val);
645 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
646 sizeof (CORE_ADDR));
647 cp_print_value_fields (type, value_enclosing_type (val),
648 value_embedded_offset (val), addr,
649 stream, recurse, val,
650 options, NULL, 1);
651 return;
652 }
653
654 if (TYPE_CODE (real_type) == TYPE_CODE_ARRAY)
655 {
656 struct type **first_dont_print;
657 int i;
658 struct type *target_type = TYPE_TARGET_TYPE (type);
659
660 first_dont_print
661 = (struct type **) obstack_base (&dont_print_stat_array_obstack);
662 i = obstack_object_size (&dont_print_stat_array_obstack)
663 / sizeof (struct type *);
664
665 while (--i >= 0)
666 {
667 if (target_type == first_dont_print[i])
668 {
669 fputs_filtered ("<same as static member of an already"
670 " seen type>",
671 stream);
672 return;
673 }
674 }
675
676 obstack_grow (&dont_print_stat_array_obstack,
677 (char *) &target_type,
678 sizeof (struct type *));
679 }
680
681 opts = *options;
682 opts.deref_ref = 0;
683 val_print (type,
684 value_embedded_offset (val),
685 value_address (val),
686 stream, recurse, val,
687 &opts, current_language);
688 }
689
690 /* Find the field in *SELF, or its non-virtual base classes, with
691 bit offset OFFSET. Set *SELF to the containing type and *FIELDNO
692 to the containing field number. If OFFSET is not exactly at the
693 start of some field, set *SELF to NULL. */
694
695 static void
696 cp_find_class_member (struct type **self_p, int *fieldno,
697 LONGEST offset)
698 {
699 struct type *self;
700 unsigned int i;
701 unsigned len;
702
703 *self_p = check_typedef (*self_p);
704 self = *self_p;
705 len = TYPE_NFIELDS (self);
706
707 for (i = TYPE_N_BASECLASSES (self); i < len; i++)
708 {
709 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
710
711 QUIT;
712 if (offset == bitpos)
713 {
714 *fieldno = i;
715 return;
716 }
717 }
718
719 for (i = 0; i < TYPE_N_BASECLASSES (self); i++)
720 {
721 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
722 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (self, i));
723
724 if (offset >= bitpos && offset < bitpos + bitsize)
725 {
726 *self_p = TYPE_FIELD_TYPE (self, i);
727 cp_find_class_member (self_p, fieldno, offset - bitpos);
728 return;
729 }
730 }
731
732 *self_p = NULL;
733 }
734
735 void
736 cp_print_class_member (const gdb_byte *valaddr, struct type *type,
737 struct ui_file *stream, const char *prefix)
738 {
739 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
740
741 /* VAL is a byte offset into the structure type SELF_TYPE.
742 Find the name of the field for that offset and
743 print it. */
744 struct type *self_type = TYPE_SELF_TYPE (type);
745 LONGEST val;
746 int fieldno;
747
748 val = extract_signed_integer (valaddr,
749 TYPE_LENGTH (type),
750 byte_order);
751
752 /* Pointers to data members are usually byte offsets into an object.
753 Because a data member can have offset zero, and a NULL pointer to
754 member must be distinct from any valid non-NULL pointer to
755 member, either the value is biased or the NULL value has a
756 special representation; both are permitted by ISO C++. HP aCC
757 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
758 and other compilers which use the Itanium ABI use -1 as the NULL
759 value. GDB only supports that last form; to add support for
760 another form, make this into a cp-abi hook. */
761
762 if (val == -1)
763 {
764 fprintf_filtered (stream, "NULL");
765 return;
766 }
767
768 cp_find_class_member (&self_type, &fieldno, val << 3);
769
770 if (self_type != NULL)
771 {
772 const char *name;
773
774 fputs_filtered (prefix, stream);
775 name = TYPE_NAME (self_type);
776 if (name)
777 fputs_filtered (name, stream);
778 else
779 c_type_print_base (self_type, stream, 0, 0, &type_print_raw_options);
780 fprintf_filtered (stream, "::");
781 fputs_filtered (TYPE_FIELD_NAME (self_type, fieldno), stream);
782 }
783 else
784 fprintf_filtered (stream, "%ld", (long) val);
785 }
786
787
788 void
789 _initialize_cp_valprint (void)
790 {
791 obstack_begin (&dont_print_stat_array_obstack,
792 32 * sizeof (struct type *));
793 obstack_begin (&dont_print_statmem_obstack,
794 32 * sizeof (CORE_ADDR));
795 obstack_begin (&dont_print_vb_obstack,
796 32 * sizeof (struct type *));
797 }
This page took 0.068285 seconds and 5 git commands to generate.