1 /* Support for printing Pascal values for GDB, the GNU debugger.
3 Copyright (C) 2000, 2001, 2003, 2005, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
6 This file is part of GDB.
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
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
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.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 /* This file is derived from c-valprint.c */
24 #include "gdb_obstack.h"
27 #include "expression.h"
34 #include "typeprint.h"
40 #include "cp-support.h"
45 /* Print data of type TYPE located at VALADDR (within GDB), which came from
46 the inferior at address ADDRESS, onto stdio stream STREAM according to
47 OPTIONS. The data at VALADDR is in target byte order.
49 If the data are a string pointer, returns the number of string characters
54 pascal_val_print (struct type *type, const gdb_byte *valaddr,
55 int embedded_offset, CORE_ADDR address,
56 struct ui_file *stream, int recurse,
57 const struct value_print_options *options)
59 struct gdbarch *gdbarch = get_type_arch (type);
60 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
61 unsigned int i = 0; /* Number of characters printed */
65 int length_pos, length_size, string_pos;
66 struct type *char_type;
71 switch (TYPE_CODE (type))
74 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
76 elttype = check_typedef (TYPE_TARGET_TYPE (type));
77 eltlen = TYPE_LENGTH (elttype);
78 len = TYPE_LENGTH (type) / eltlen;
79 if (options->prettyprint_arrays)
81 print_spaces_filtered (2 + 2 * recurse, stream);
83 /* For an array of chars, print with string syntax. */
84 if ((eltlen == 1 || eltlen == 2 || eltlen == 4)
85 && ((TYPE_CODE (elttype) == TYPE_CODE_INT)
86 || ((current_language->la_language == language_pascal)
87 && (TYPE_CODE (elttype) == TYPE_CODE_CHAR)))
88 && (options->format == 0 || options->format == 's'))
90 /* If requested, look for the first null char and only print
92 if (options->stop_print_at_null)
94 unsigned int temp_len;
96 /* Look for a NULL char. */
98 extract_unsigned_integer (valaddr + embedded_offset +
99 temp_len * eltlen, eltlen,
101 && temp_len < len && temp_len < options->print_max;
106 LA_PRINT_STRING (stream, TYPE_TARGET_TYPE (type),
107 valaddr + embedded_offset, len, 0,
113 fprintf_filtered (stream, "{");
114 /* If this is a virtual function table, print the 0th
115 entry specially, and the rest of the members normally. */
116 if (pascal_object_is_vtbl_ptr_type (elttype))
119 fprintf_filtered (stream, "%d vtable entries", len - 1);
125 val_print_array_elements (type, valaddr + embedded_offset, address, stream,
126 recurse, options, i);
127 fprintf_filtered (stream, "}");
131 /* Array of unspecified length: treat like pointer to first elt. */
133 goto print_unpacked_pointer;
136 if (options->format && options->format != 's')
138 print_scalar_formatted (valaddr + embedded_offset, type,
142 if (options->vtblprint && pascal_object_is_vtbl_ptr_type (type))
144 /* Print the unmangled name if desired. */
145 /* Print vtable entry - we only get here if we ARE using
146 -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */
147 /* Extract the address, assume that it is unsigned. */
148 addr = extract_unsigned_integer (valaddr + embedded_offset,
149 TYPE_LENGTH (type), byte_order);
150 print_address_demangle (gdbarch, addr, stream, demangle);
153 elttype = check_typedef (TYPE_TARGET_TYPE (type));
155 addr = unpack_pointer (type, valaddr + embedded_offset);
156 print_unpacked_pointer:
157 elttype = check_typedef (TYPE_TARGET_TYPE (type));
159 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
161 /* Try to print what function it points to. */
162 print_address_demangle (gdbarch, addr, stream, demangle);
163 /* Return value is irrelevant except for string pointers. */
167 if (options->addressprint && options->format != 's')
169 fputs_filtered (paddress (gdbarch, addr), stream);
172 /* For a pointer to char or unsigned char, also print the string
173 pointed to, unless pointer is null. */
174 if (((TYPE_LENGTH (elttype) == 1
175 && (TYPE_CODE (elttype) == TYPE_CODE_INT
176 || TYPE_CODE (elttype) == TYPE_CODE_CHAR))
177 || ((TYPE_LENGTH (elttype) == 2 || TYPE_LENGTH (elttype) == 4)
178 && TYPE_CODE (elttype) == TYPE_CODE_CHAR))
179 && (options->format == 0 || options->format == 's')
182 /* no wide string yet */
183 i = val_print_string (elttype, addr, -1, stream, options);
185 /* also for pointers to pascal strings */
186 /* Note: this is Free Pascal specific:
187 as GDB does not recognize stabs pascal strings
188 Pascal strings are mapped to records
189 with lowercase names PM */
190 if (is_pascal_string_type (elttype, &length_pos, &length_size,
191 &string_pos, &char_type, NULL)
194 ULONGEST string_length;
196 buffer = xmalloc (length_size);
197 read_memory (addr + length_pos, buffer, length_size);
198 string_length = extract_unsigned_integer (buffer, length_size,
201 i = val_print_string (char_type ,addr + string_pos, string_length, stream, options);
203 else if (pascal_object_is_vtbl_member (type))
205 /* print vtbl's nicely */
206 CORE_ADDR vt_address = unpack_pointer (type, valaddr + embedded_offset);
208 struct minimal_symbol *msymbol =
209 lookup_minimal_symbol_by_pc (vt_address);
210 if ((msymbol != NULL)
211 && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
213 fputs_filtered (" <", stream);
214 fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
215 fputs_filtered (">", stream);
217 if (vt_address && options->vtblprint)
219 struct value *vt_val;
220 struct symbol *wsym = (struct symbol *) NULL;
222 struct block *block = (struct block *) NULL;
226 wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol), block,
227 VAR_DOMAIN, &is_this_fld);
231 wtype = SYMBOL_TYPE (wsym);
235 wtype = TYPE_TARGET_TYPE (type);
237 vt_val = value_at (wtype, vt_address);
238 common_val_print (vt_val, stream, recurse + 1, options,
242 fprintf_filtered (stream, "\n");
243 print_spaces_filtered (2 + 2 * recurse, stream);
248 /* Return number of characters printed, including the terminating
249 '\0' if we reached the end. val_print_string takes care including
250 the terminating '\0' if necessary. */
256 elttype = check_typedef (TYPE_TARGET_TYPE (type));
257 if (options->addressprint)
260 = extract_typed_address (valaddr + embedded_offset, type);
261 fprintf_filtered (stream, "@");
262 fputs_filtered (paddress (gdbarch, addr), stream);
263 if (options->deref_ref)
264 fputs_filtered (": ", stream);
266 /* De-reference the reference. */
267 if (options->deref_ref)
269 if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
271 struct value *deref_val =
273 (TYPE_TARGET_TYPE (type),
274 unpack_pointer (type, valaddr + embedded_offset));
275 common_val_print (deref_val, stream, recurse + 1, options,
279 fputs_filtered ("???", stream);
283 case TYPE_CODE_UNION:
284 if (recurse && !options->unionprint)
286 fprintf_filtered (stream, "{...}");
290 case TYPE_CODE_STRUCT:
291 if (options->vtblprint && pascal_object_is_vtbl_ptr_type (type))
293 /* Print the unmangled name if desired. */
294 /* Print vtable entry - we only get here if NOT using
295 -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */
296 /* Extract the address, assume that it is unsigned. */
297 print_address_demangle
299 extract_unsigned_integer (valaddr + embedded_offset + TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8,
300 TYPE_LENGTH (TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET)), byte_order),
305 if (is_pascal_string_type (type, &length_pos, &length_size,
306 &string_pos, &char_type, NULL))
308 len = extract_unsigned_integer (valaddr + embedded_offset + length_pos, length_size, byte_order);
309 LA_PRINT_STRING (stream, char_type, valaddr + embedded_offset + string_pos, len, 0, options);
312 pascal_object_print_value_fields (type, valaddr + embedded_offset, address, stream,
313 recurse, options, NULL, 0);
320 print_scalar_formatted (valaddr + embedded_offset, type,
324 len = TYPE_NFIELDS (type);
325 val = unpack_long (type, valaddr + embedded_offset);
326 for (i = 0; i < len; i++)
329 if (val == TYPE_FIELD_BITPOS (type, i))
336 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
340 print_longest (stream, 'd', 0, val);
344 case TYPE_CODE_FLAGS:
346 print_scalar_formatted (valaddr + embedded_offset, type,
349 val_print_type_code_flags (type, valaddr + embedded_offset, stream);
355 print_scalar_formatted (valaddr + embedded_offset, type,
359 /* FIXME, we should consider, at least for ANSI C language, eliminating
360 the distinction made between FUNCs and POINTERs to FUNCs. */
361 fprintf_filtered (stream, "{");
362 type_print (type, "", stream, -1);
363 fprintf_filtered (stream, "} ");
364 /* Try to print what function it points to, and its address. */
365 print_address_demangle (gdbarch, address, stream, demangle);
369 if (options->format || options->output_format)
371 struct value_print_options opts = *options;
372 opts.format = (options->format ? options->format
373 : options->output_format);
374 print_scalar_formatted (valaddr + embedded_offset, type,
379 val = unpack_long (type, valaddr + embedded_offset);
381 fputs_filtered ("false", stream);
383 fputs_filtered ("true", stream);
386 fputs_filtered ("true (", stream);
387 fprintf_filtered (stream, "%ld)", (long int) val);
392 case TYPE_CODE_RANGE:
393 /* FIXME: create_range_type does not set the unsigned bit in a
394 range type (I think it probably should copy it from the target
395 type), so we won't print values which are too large to
396 fit in a signed integer correctly. */
397 /* FIXME: Doesn't handle ranges of enums correctly. (Can't just
398 print with the target type, though, because the size of our type
399 and the target type might differ). */
403 if (options->format || options->output_format)
405 struct value_print_options opts = *options;
406 opts.format = (options->format ? options->format
407 : options->output_format);
408 print_scalar_formatted (valaddr + embedded_offset, type,
413 val_print_type_code_int (type, valaddr + embedded_offset, stream);
418 if (options->format || options->output_format)
420 struct value_print_options opts = *options;
421 opts.format = (options->format ? options->format
422 : options->output_format);
423 print_scalar_formatted (valaddr + embedded_offset, type,
428 val = unpack_long (type, valaddr + embedded_offset);
429 if (TYPE_UNSIGNED (type))
430 fprintf_filtered (stream, "%u", (unsigned int) val);
432 fprintf_filtered (stream, "%d", (int) val);
433 fputs_filtered (" ", stream);
434 LA_PRINT_CHAR ((unsigned char) val, type, stream);
441 print_scalar_formatted (valaddr + embedded_offset, type,
446 print_floating (valaddr + embedded_offset, type, stream);
450 case TYPE_CODE_BITSTRING:
452 elttype = TYPE_INDEX_TYPE (type);
453 CHECK_TYPEDEF (elttype);
454 if (TYPE_STUB (elttype))
456 fprintf_filtered (stream, "<incomplete type>");
462 struct type *range = elttype;
463 LONGEST low_bound, high_bound;
465 int is_bitstring = TYPE_CODE (type) == TYPE_CODE_BITSTRING;
469 fputs_filtered ("B'", stream);
471 fputs_filtered ("[", stream);
473 i = get_discrete_bounds (range, &low_bound, &high_bound);
477 fputs_filtered ("<error value>", stream);
481 for (i = low_bound; i <= high_bound; i++)
483 int element = value_bit_index (type, valaddr + embedded_offset, i);
487 goto maybe_bad_bstring;
490 fprintf_filtered (stream, "%d", element);
494 fputs_filtered (", ", stream);
495 print_type_scalar (range, i, stream);
498 if (i + 1 <= high_bound && value_bit_index (type, valaddr + embedded_offset, ++i))
501 fputs_filtered ("..", stream);
502 while (i + 1 <= high_bound
503 && value_bit_index (type, valaddr + embedded_offset, ++i))
505 print_type_scalar (range, j, stream);
511 fputs_filtered ("'", stream);
513 fputs_filtered ("]", stream);
518 fprintf_filtered (stream, "void");
521 case TYPE_CODE_ERROR:
522 fprintf_filtered (stream, "<error type>");
525 case TYPE_CODE_UNDEF:
526 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
527 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
528 and no complete type for struct foo in that file. */
529 fprintf_filtered (stream, "<incomplete type>");
533 error (_("Invalid pascal type code %d in symbol table."), TYPE_CODE (type));
540 pascal_value_print (struct value *val, struct ui_file *stream,
541 const struct value_print_options *options)
543 struct type *type = value_type (val);
545 /* If it is a pointer, indicate what it points to.
547 Print type also if it is a reference.
549 Object pascal: if it is a member pointer, we will take care
550 of that when we print it. */
551 if (TYPE_CODE (type) == TYPE_CODE_PTR
552 || TYPE_CODE (type) == TYPE_CODE_REF)
554 /* Hack: remove (char *) for char strings. Their
555 type is indicated by the quoted string anyway. */
556 if (TYPE_CODE (type) == TYPE_CODE_PTR
557 && TYPE_NAME (type) == NULL
558 && TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL
559 && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
565 fprintf_filtered (stream, "(");
566 type_print (type, "", stream, -1);
567 fprintf_filtered (stream, ") ");
570 return common_val_print (val, stream, 0, options, current_language);
575 show_pascal_static_field_print (struct ui_file *file, int from_tty,
576 struct cmd_list_element *c, const char *value)
578 fprintf_filtered (file, _("Printing of pascal static members is %s.\n"),
582 static struct obstack dont_print_vb_obstack;
583 static struct obstack dont_print_statmem_obstack;
585 static void pascal_object_print_static_field (struct value *,
586 struct ui_file *, int,
587 const struct value_print_options *);
589 static void pascal_object_print_value (struct type *, const gdb_byte *,
590 CORE_ADDR, struct ui_file *, int,
591 const struct value_print_options *,
594 /* It was changed to this after 2.4.5. */
595 const char pascal_vtbl_ptr_name[] =
596 {'_', '_', 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', 't', 'y', 'p', 'e', 0};
598 /* Return truth value for assertion that TYPE is of the type
599 "pointer to virtual function". */
602 pascal_object_is_vtbl_ptr_type (struct type *type)
604 char *typename = type_name_no_tag (type);
606 return (typename != NULL
607 && strcmp (typename, pascal_vtbl_ptr_name) == 0);
610 /* Return truth value for the assertion that TYPE is of the type
611 "pointer to virtual function table". */
614 pascal_object_is_vtbl_member (struct type *type)
616 if (TYPE_CODE (type) == TYPE_CODE_PTR)
618 type = TYPE_TARGET_TYPE (type);
619 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
621 type = TYPE_TARGET_TYPE (type);
622 if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */
623 || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
625 /* Virtual functions tables are full of pointers
626 to virtual functions. */
627 return pascal_object_is_vtbl_ptr_type (type);
634 /* Mutually recursive subroutines of pascal_object_print_value and
635 c_val_print to print out a structure's fields:
636 pascal_object_print_value_fields and pascal_object_print_value.
638 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the
639 same meanings as in pascal_object_print_value and c_val_print.
641 DONT_PRINT is an array of baseclass types that we
642 should not print, or zero if called from top level. */
645 pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
646 CORE_ADDR address, struct ui_file *stream,
648 const struct value_print_options *options,
649 struct type **dont_print_vb,
650 int dont_print_statmem)
652 int i, len, n_baseclasses;
653 char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
655 CHECK_TYPEDEF (type);
657 fprintf_filtered (stream, "{");
658 len = TYPE_NFIELDS (type);
659 n_baseclasses = TYPE_N_BASECLASSES (type);
661 /* Print out baseclasses such that we don't print
662 duplicates of virtual baseclasses. */
663 if (n_baseclasses > 0)
664 pascal_object_print_value (type, valaddr, address, stream,
665 recurse + 1, options, dont_print_vb);
667 if (!len && n_baseclasses == 1)
668 fprintf_filtered (stream, "<No data fields>");
671 struct obstack tmp_obstack = dont_print_statmem_obstack;
674 if (dont_print_statmem == 0)
676 /* If we're at top level, carve out a completely fresh
677 chunk of the obstack and use that until this particular
678 invocation returns. */
679 obstack_finish (&dont_print_statmem_obstack);
682 for (i = n_baseclasses; i < len; i++)
684 /* If requested, skip printing of static fields. */
685 if (!options->pascal_static_field_print
686 && field_is_static (&TYPE_FIELD (type, i)))
689 fprintf_filtered (stream, ", ");
690 else if (n_baseclasses > 0)
694 fprintf_filtered (stream, "\n");
695 print_spaces_filtered (2 + 2 * recurse, stream);
696 fputs_filtered ("members of ", stream);
697 fputs_filtered (type_name_no_tag (type), stream);
698 fputs_filtered (": ", stream);
705 fprintf_filtered (stream, "\n");
706 print_spaces_filtered (2 + 2 * recurse, stream);
710 wrap_here (n_spaces (2 + 2 * recurse));
712 if (options->inspect_it)
714 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
715 fputs_filtered ("\"( ptr \"", stream);
717 fputs_filtered ("\"( nodef \"", stream);
718 if (field_is_static (&TYPE_FIELD (type, i)))
719 fputs_filtered ("static ", stream);
720 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
722 DMGL_PARAMS | DMGL_ANSI);
723 fputs_filtered ("\" \"", stream);
724 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
726 DMGL_PARAMS | DMGL_ANSI);
727 fputs_filtered ("\") \"", stream);
731 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
733 if (field_is_static (&TYPE_FIELD (type, i)))
734 fputs_filtered ("static ", stream);
735 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
737 DMGL_PARAMS | DMGL_ANSI);
738 annotate_field_name_end ();
739 fputs_filtered (" = ", stream);
740 annotate_field_value ();
743 if (!field_is_static (&TYPE_FIELD (type, i))
744 && TYPE_FIELD_PACKED (type, i))
748 /* Bitfields require special handling, especially due to byte
750 if (TYPE_FIELD_IGNORE (type, i))
752 fputs_filtered ("<optimized out or zero length>", stream);
756 struct value_print_options opts = *options;
757 v = value_from_longest (TYPE_FIELD_TYPE (type, i),
758 unpack_field_as_long (type, valaddr, i));
761 common_val_print (v, stream, recurse + 1, &opts,
767 if (TYPE_FIELD_IGNORE (type, i))
769 fputs_filtered ("<optimized out or zero length>", stream);
771 else if (field_is_static (&TYPE_FIELD (type, i)))
773 /* struct value *v = value_static_field (type, i); v4.17 specific */
775 v = value_from_longest (TYPE_FIELD_TYPE (type, i),
776 unpack_field_as_long (type, valaddr, i));
779 fputs_filtered ("<optimized out>", stream);
781 pascal_object_print_static_field (v, stream, recurse + 1,
786 struct value_print_options opts = *options;
788 /* val_print (TYPE_FIELD_TYPE (type, i),
789 valaddr + TYPE_FIELD_BITPOS (type, i) / 8,
790 address + TYPE_FIELD_BITPOS (type, i) / 8, 0,
791 stream, format, 0, recurse + 1, pretty); */
792 val_print (TYPE_FIELD_TYPE (type, i),
793 valaddr, TYPE_FIELD_BITPOS (type, i) / 8,
794 address + TYPE_FIELD_BITPOS (type, i) / 8,
795 stream, recurse + 1, &opts,
799 annotate_field_end ();
802 if (dont_print_statmem == 0)
804 /* Free the space used to deal with the printing
805 of the members from top level. */
806 obstack_free (&dont_print_statmem_obstack, last_dont_print);
807 dont_print_statmem_obstack = tmp_obstack;
812 fprintf_filtered (stream, "\n");
813 print_spaces_filtered (2 * recurse, stream);
816 fprintf_filtered (stream, "}");
819 /* Special val_print routine to avoid printing multiple copies of virtual
823 pascal_object_print_value (struct type *type, const gdb_byte *valaddr,
824 CORE_ADDR address, struct ui_file *stream,
826 const struct value_print_options *options,
827 struct type **dont_print_vb)
829 struct type **last_dont_print
830 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
831 struct obstack tmp_obstack = dont_print_vb_obstack;
832 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
834 if (dont_print_vb == 0)
836 /* If we're at top level, carve out a completely fresh
837 chunk of the obstack and use that until this particular
838 invocation returns. */
839 /* Bump up the high-water mark. Now alpha is omega. */
840 obstack_finish (&dont_print_vb_obstack);
843 for (i = 0; i < n_baseclasses; i++)
846 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
847 char *basename = type_name_no_tag (baseclass);
848 const gdb_byte *base_valaddr;
850 if (BASETYPE_VIA_VIRTUAL (type, i))
852 struct type **first_dont_print
853 = (struct type **) obstack_base (&dont_print_vb_obstack);
855 int j = (struct type **) obstack_next_free (&dont_print_vb_obstack)
859 if (baseclass == first_dont_print[j])
862 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
865 boffset = baseclass_offset (type, i, valaddr, address);
869 fprintf_filtered (stream, "\n");
870 print_spaces_filtered (2 * recurse, stream);
872 fputs_filtered ("<", stream);
873 /* Not sure what the best notation is in the case where there is no
876 fputs_filtered (basename ? basename : "", stream);
877 fputs_filtered ("> = ", stream);
879 /* The virtual base class pointer might have been clobbered by the
880 user program. Make sure that it still points to a valid memory
883 if (boffset != -1 && (boffset < 0 || boffset >= TYPE_LENGTH (type)))
885 /* FIXME (alloc): not safe is baseclass is really really big. */
886 gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
888 if (target_read_memory (address + boffset, buf,
889 TYPE_LENGTH (baseclass)) != 0)
893 base_valaddr = valaddr + boffset;
896 fprintf_filtered (stream, "<invalid address>");
898 pascal_object_print_value_fields (baseclass, base_valaddr, address + boffset,
899 stream, recurse, options,
900 (struct type **) obstack_base (&dont_print_vb_obstack),
902 fputs_filtered (", ", stream);
908 if (dont_print_vb == 0)
910 /* Free the space used to deal with the printing
911 of this type from top level. */
912 obstack_free (&dont_print_vb_obstack, last_dont_print);
913 /* Reset watermark so that we can continue protecting
914 ourselves from whatever we were protecting ourselves. */
915 dont_print_vb_obstack = tmp_obstack;
919 /* Print value of a static member.
920 To avoid infinite recursion when printing a class that contains
921 a static instance of the class, we keep the addresses of all printed
922 static member classes in an obstack and refuse to print them more
925 VAL contains the value to print, STREAM, RECURSE, and OPTIONS
926 have the same meanings as in c_val_print. */
929 pascal_object_print_static_field (struct value *val,
930 struct ui_file *stream,
932 const struct value_print_options *options)
934 struct type *type = value_type (val);
935 struct value_print_options opts;
937 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
939 CORE_ADDR *first_dont_print, addr;
943 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
944 i = (CORE_ADDR *) obstack_next_free (&dont_print_statmem_obstack)
949 if (value_address (val) == first_dont_print[i])
951 fputs_filtered ("<same as static member of an already seen type>",
957 addr = value_address (val);
958 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
961 CHECK_TYPEDEF (type);
962 pascal_object_print_value_fields (type, value_contents (val), addr,
963 stream, recurse, options, NULL, 1);
969 common_val_print (val, stream, recurse, &opts, current_language);
972 extern initialize_file_ftype _initialize_pascal_valprint; /* -Wmissing-prototypes */
975 _initialize_pascal_valprint (void)
977 add_setshow_boolean_cmd ("pascal_static-members", class_support,
978 &user_print_options.pascal_static_field_print, _("\
979 Set printing of pascal static members."), _("\
980 Show printing of pascal static members."), NULL,
982 show_pascal_static_field_print,
983 &setprintlist, &showprintlist);