1 /* Support for printing Pascal values for GDB, the GNU debugger.
3 Copyright (C) 2000-2013 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
20 /* This file is derived from c-valprint.c */
23 #include "gdb_obstack.h"
26 #include "expression.h"
33 #include "typeprint.h"
39 #include "cp-support.h"
40 #include "exceptions.h"
43 /* Decorations for Pascal. */
45 static const struct generic_val_print_decorations p_decorations
=
55 /* See val_print for a description of the various parameters of this
56 function; they are identical. */
59 pascal_val_print (struct type
*type
, const gdb_byte
*valaddr
,
60 int embedded_offset
, CORE_ADDR address
,
61 struct ui_file
*stream
, int recurse
,
62 const struct value
*original_value
,
63 const struct value_print_options
*options
)
65 struct gdbarch
*gdbarch
= get_type_arch (type
);
66 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
67 unsigned int i
= 0; /* Number of characters printed */
69 LONGEST low_bound
, high_bound
;
72 int length_pos
, length_size
, string_pos
;
73 struct type
*char_type
;
78 switch (TYPE_CODE (type
))
81 if (get_array_bounds (type
, &low_bound
, &high_bound
))
83 len
= high_bound
- low_bound
+ 1;
84 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
85 eltlen
= TYPE_LENGTH (elttype
);
86 if (options
->prettyprint_arrays
)
88 print_spaces_filtered (2 + 2 * recurse
, stream
);
90 /* If 's' format is used, try to print out as string.
91 If no format is given, print as string if element type
92 is of TYPE_CODE_CHAR and element size is 1,2 or 4. */
93 if (options
->format
== 's'
94 || ((eltlen
== 1 || eltlen
== 2 || eltlen
== 4)
95 && TYPE_CODE (elttype
) == TYPE_CODE_CHAR
96 && options
->format
== 0))
98 /* If requested, look for the first null char and only print
100 if (options
->stop_print_at_null
)
102 unsigned int temp_len
;
104 /* Look for a NULL char. */
106 extract_unsigned_integer (valaddr
+ embedded_offset
+
107 temp_len
* eltlen
, eltlen
,
109 && temp_len
< len
&& temp_len
< options
->print_max
;
114 LA_PRINT_STRING (stream
, TYPE_TARGET_TYPE (type
),
115 valaddr
+ embedded_offset
, len
, NULL
, 0,
121 fprintf_filtered (stream
, "{");
122 /* If this is a virtual function table, print the 0th
123 entry specially, and the rest of the members normally. */
124 if (pascal_object_is_vtbl_ptr_type (elttype
))
127 fprintf_filtered (stream
, "%d vtable entries", len
- 1);
133 val_print_array_elements (type
, valaddr
, embedded_offset
,
134 address
, stream
, recurse
,
135 original_value
, options
, i
);
136 fprintf_filtered (stream
, "}");
140 /* Array of unspecified length: treat like pointer to first elt. */
141 addr
= address
+ embedded_offset
;
142 goto print_unpacked_pointer
;
145 if (options
->format
&& options
->format
!= 's')
147 val_print_scalar_formatted (type
, valaddr
, embedded_offset
,
148 original_value
, options
, 0, stream
);
151 if (options
->vtblprint
&& pascal_object_is_vtbl_ptr_type (type
))
153 /* Print the unmangled name if desired. */
154 /* Print vtable entry - we only get here if we ARE using
155 -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */
156 /* Extract the address, assume that it is unsigned. */
157 addr
= extract_unsigned_integer (valaddr
+ embedded_offset
,
158 TYPE_LENGTH (type
), byte_order
);
159 print_address_demangle (options
, gdbarch
, addr
, stream
, demangle
);
162 check_typedef (TYPE_TARGET_TYPE (type
));
164 addr
= unpack_pointer (type
, valaddr
+ embedded_offset
);
165 print_unpacked_pointer
:
166 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
168 if (TYPE_CODE (elttype
) == TYPE_CODE_FUNC
)
170 /* Try to print what function it points to. */
171 print_address_demangle (options
, gdbarch
, addr
, stream
, demangle
);
175 if (options
->addressprint
&& options
->format
!= 's')
177 fputs_filtered (paddress (gdbarch
, addr
), stream
);
181 /* For a pointer to char or unsigned char, also print the string
182 pointed to, unless pointer is null. */
183 if (((TYPE_LENGTH (elttype
) == 1
184 && (TYPE_CODE (elttype
) == TYPE_CODE_INT
185 || TYPE_CODE (elttype
) == TYPE_CODE_CHAR
))
186 || ((TYPE_LENGTH (elttype
) == 2 || TYPE_LENGTH (elttype
) == 4)
187 && TYPE_CODE (elttype
) == TYPE_CODE_CHAR
))
188 && (options
->format
== 0 || options
->format
== 's')
192 fputs_filtered (" ", stream
);
193 /* No wide string yet. */
194 i
= val_print_string (elttype
, NULL
, addr
, -1, stream
, options
);
196 /* Also for pointers to pascal strings. */
197 /* Note: this is Free Pascal specific:
198 as GDB does not recognize stabs pascal strings
199 Pascal strings are mapped to records
200 with lowercase names PM. */
201 if (is_pascal_string_type (elttype
, &length_pos
, &length_size
,
202 &string_pos
, &char_type
, NULL
)
205 ULONGEST string_length
;
209 fputs_filtered (" ", stream
);
210 buffer
= xmalloc (length_size
);
211 read_memory (addr
+ length_pos
, buffer
, length_size
);
212 string_length
= extract_unsigned_integer (buffer
, length_size
,
215 i
= val_print_string (char_type
, NULL
,
216 addr
+ string_pos
, string_length
,
219 else if (pascal_object_is_vtbl_member (type
))
221 /* Print vtbl's nicely. */
222 CORE_ADDR vt_address
= unpack_pointer (type
,
223 valaddr
+ embedded_offset
);
224 struct bound_minimal_symbol msymbol
=
225 lookup_minimal_symbol_by_pc (vt_address
);
227 /* If 'symbol_print' is set, we did the work above. */
228 if (!options
->symbol_print
229 && (msymbol
.minsym
!= NULL
)
230 && (vt_address
== SYMBOL_VALUE_ADDRESS (msymbol
.minsym
)))
233 fputs_filtered (" ", stream
);
234 fputs_filtered ("<", stream
);
235 fputs_filtered (SYMBOL_PRINT_NAME (msymbol
.minsym
), stream
);
236 fputs_filtered (">", stream
);
239 if (vt_address
&& options
->vtblprint
)
241 struct value
*vt_val
;
242 struct symbol
*wsym
= (struct symbol
*) NULL
;
244 struct block
*block
= (struct block
*) NULL
;
245 struct field_of_this_result is_this_fld
;
248 fputs_filtered (" ", stream
);
250 if (msymbol
.minsym
!= NULL
)
251 wsym
= lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol
.minsym
),
253 VAR_DOMAIN
, &is_this_fld
);
257 wtype
= SYMBOL_TYPE (wsym
);
261 wtype
= TYPE_TARGET_TYPE (type
);
263 vt_val
= value_at (wtype
, vt_address
);
264 common_val_print (vt_val
, stream
, recurse
+ 1, options
,
268 fprintf_filtered (stream
, "\n");
269 print_spaces_filtered (2 + 2 * recurse
, stream
);
278 case TYPE_CODE_FLAGS
:
280 case TYPE_CODE_RANGE
:
284 case TYPE_CODE_ERROR
:
285 case TYPE_CODE_UNDEF
:
288 generic_val_print (type
, valaddr
, embedded_offset
, address
,
289 stream
, recurse
, original_value
, options
,
293 case TYPE_CODE_UNION
:
294 if (recurse
&& !options
->unionprint
)
296 fprintf_filtered (stream
, "{...}");
300 case TYPE_CODE_STRUCT
:
301 if (options
->vtblprint
&& pascal_object_is_vtbl_ptr_type (type
))
303 /* Print the unmangled name if desired. */
304 /* Print vtable entry - we only get here if NOT using
305 -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */
306 /* Extract the address, assume that it is unsigned. */
307 print_address_demangle
309 extract_unsigned_integer (valaddr
+ embedded_offset
310 + TYPE_FIELD_BITPOS (type
,
311 VTBL_FNADDR_OFFSET
) / 8,
312 TYPE_LENGTH (TYPE_FIELD_TYPE (type
,
313 VTBL_FNADDR_OFFSET
)),
319 if (is_pascal_string_type (type
, &length_pos
, &length_size
,
320 &string_pos
, &char_type
, NULL
))
322 len
= extract_unsigned_integer (valaddr
+ embedded_offset
323 + length_pos
, length_size
,
325 LA_PRINT_STRING (stream
, char_type
,
326 valaddr
+ embedded_offset
+ string_pos
,
327 len
, NULL
, 0, options
);
330 pascal_object_print_value_fields (type
, valaddr
, embedded_offset
,
331 address
, stream
, recurse
,
332 original_value
, options
,
338 elttype
= TYPE_INDEX_TYPE (type
);
339 CHECK_TYPEDEF (elttype
);
340 if (TYPE_STUB (elttype
))
342 fprintf_filtered (stream
, "<incomplete type>");
348 struct type
*range
= elttype
;
349 LONGEST low_bound
, high_bound
;
353 fputs_filtered ("[", stream
);
355 i
= get_discrete_bounds (range
, &low_bound
, &high_bound
);
356 if (low_bound
== 0 && high_bound
== -1 && TYPE_LENGTH (type
) > 0)
358 /* If we know the size of the set type, we can figure out the
361 high_bound
= TYPE_LENGTH (type
) * TARGET_CHAR_BIT
- 1;
362 TYPE_HIGH_BOUND (range
) = high_bound
;
367 fputs_filtered ("<error value>", stream
);
371 for (i
= low_bound
; i
<= high_bound
; i
++)
373 int element
= value_bit_index (type
,
374 valaddr
+ embedded_offset
, i
);
379 goto maybe_bad_bstring
;
384 fputs_filtered (", ", stream
);
385 print_type_scalar (range
, i
, stream
);
388 if (i
+ 1 <= high_bound
389 && value_bit_index (type
,
390 valaddr
+ embedded_offset
, ++i
))
394 fputs_filtered ("..", stream
);
395 while (i
+ 1 <= high_bound
396 && value_bit_index (type
,
397 valaddr
+ embedded_offset
,
400 print_type_scalar (range
, j
, stream
);
405 fputs_filtered ("]", stream
);
410 error (_("Invalid pascal type code %d in symbol table."),
417 pascal_value_print (struct value
*val
, struct ui_file
*stream
,
418 const struct value_print_options
*options
)
420 struct type
*type
= value_type (val
);
421 struct value_print_options opts
= *options
;
425 /* If it is a pointer, indicate what it points to.
427 Print type also if it is a reference.
429 Object pascal: if it is a member pointer, we will take care
430 of that when we print it. */
431 if (TYPE_CODE (type
) == TYPE_CODE_PTR
432 || TYPE_CODE (type
) == TYPE_CODE_REF
)
434 /* Hack: remove (char *) for char strings. Their
435 type is indicated by the quoted string anyway. */
436 if (TYPE_CODE (type
) == TYPE_CODE_PTR
437 && TYPE_NAME (type
) == NULL
438 && TYPE_NAME (TYPE_TARGET_TYPE (type
)) != NULL
439 && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type
)), "char") == 0)
445 fprintf_filtered (stream
, "(");
446 type_print (type
, "", stream
, -1);
447 fprintf_filtered (stream
, ") ");
450 common_val_print (val
, stream
, 0, &opts
, current_language
);
455 show_pascal_static_field_print (struct ui_file
*file
, int from_tty
,
456 struct cmd_list_element
*c
, const char *value
)
458 fprintf_filtered (file
, _("Printing of pascal static members is %s.\n"),
462 static struct obstack dont_print_vb_obstack
;
463 static struct obstack dont_print_statmem_obstack
;
465 static void pascal_object_print_static_field (struct value
*,
466 struct ui_file
*, int,
467 const struct value_print_options
*);
469 static void pascal_object_print_value (struct type
*, const gdb_byte
*,
471 CORE_ADDR
, struct ui_file
*, int,
472 const struct value
*,
473 const struct value_print_options
*,
476 /* It was changed to this after 2.4.5. */
477 const char pascal_vtbl_ptr_name
[] =
478 {'_', '_', 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', 't', 'y', 'p', 'e', 0};
480 /* Return truth value for assertion that TYPE is of the type
481 "pointer to virtual function". */
484 pascal_object_is_vtbl_ptr_type (struct type
*type
)
486 const char *typename
= type_name_no_tag (type
);
488 return (typename
!= NULL
489 && strcmp (typename
, pascal_vtbl_ptr_name
) == 0);
492 /* Return truth value for the assertion that TYPE is of the type
493 "pointer to virtual function table". */
496 pascal_object_is_vtbl_member (struct type
*type
)
498 if (TYPE_CODE (type
) == TYPE_CODE_PTR
)
500 type
= TYPE_TARGET_TYPE (type
);
501 if (TYPE_CODE (type
) == TYPE_CODE_ARRAY
)
503 type
= TYPE_TARGET_TYPE (type
);
504 if (TYPE_CODE (type
) == TYPE_CODE_STRUCT
/* If not using
506 || TYPE_CODE (type
) == TYPE_CODE_PTR
) /* If using thunks. */
508 /* Virtual functions tables are full of pointers
509 to virtual functions. */
510 return pascal_object_is_vtbl_ptr_type (type
);
517 /* Mutually recursive subroutines of pascal_object_print_value and
518 c_val_print to print out a structure's fields:
519 pascal_object_print_value_fields and pascal_object_print_value.
521 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the
522 same meanings as in pascal_object_print_value and c_val_print.
524 DONT_PRINT is an array of baseclass types that we
525 should not print, or zero if called from top level. */
528 pascal_object_print_value_fields (struct type
*type
, const gdb_byte
*valaddr
,
530 CORE_ADDR address
, struct ui_file
*stream
,
532 const struct value
*val
,
533 const struct value_print_options
*options
,
534 struct type
**dont_print_vb
,
535 int dont_print_statmem
)
537 int i
, len
, n_baseclasses
;
538 char *last_dont_print
= obstack_next_free (&dont_print_statmem_obstack
);
540 CHECK_TYPEDEF (type
);
542 fprintf_filtered (stream
, "{");
543 len
= TYPE_NFIELDS (type
);
544 n_baseclasses
= TYPE_N_BASECLASSES (type
);
546 /* Print out baseclasses such that we don't print
547 duplicates of virtual baseclasses. */
548 if (n_baseclasses
> 0)
549 pascal_object_print_value (type
, valaddr
, offset
, address
,
550 stream
, recurse
+ 1, val
,
551 options
, dont_print_vb
);
553 if (!len
&& n_baseclasses
== 1)
554 fprintf_filtered (stream
, "<No data fields>");
557 struct obstack tmp_obstack
= dont_print_statmem_obstack
;
560 if (dont_print_statmem
== 0)
562 /* If we're at top level, carve out a completely fresh
563 chunk of the obstack and use that until this particular
564 invocation returns. */
565 obstack_finish (&dont_print_statmem_obstack
);
568 for (i
= n_baseclasses
; i
< len
; i
++)
570 /* If requested, skip printing of static fields. */
571 if (!options
->pascal_static_field_print
572 && field_is_static (&TYPE_FIELD (type
, i
)))
575 fprintf_filtered (stream
, ", ");
576 else if (n_baseclasses
> 0)
580 fprintf_filtered (stream
, "\n");
581 print_spaces_filtered (2 + 2 * recurse
, stream
);
582 fputs_filtered ("members of ", stream
);
583 fputs_filtered (type_name_no_tag (type
), stream
);
584 fputs_filtered (": ", stream
);
591 fprintf_filtered (stream
, "\n");
592 print_spaces_filtered (2 + 2 * recurse
, stream
);
596 wrap_here (n_spaces (2 + 2 * recurse
));
599 annotate_field_begin (TYPE_FIELD_TYPE (type
, i
));
601 if (field_is_static (&TYPE_FIELD (type
, i
)))
602 fputs_filtered ("static ", stream
);
603 fprintf_symbol_filtered (stream
, TYPE_FIELD_NAME (type
, i
),
605 DMGL_PARAMS
| DMGL_ANSI
);
606 annotate_field_name_end ();
607 fputs_filtered (" = ", stream
);
608 annotate_field_value ();
610 if (!field_is_static (&TYPE_FIELD (type
, i
))
611 && TYPE_FIELD_PACKED (type
, i
))
615 /* Bitfields require special handling, especially due to byte
617 if (TYPE_FIELD_IGNORE (type
, i
))
619 fputs_filtered ("<optimized out or zero length>", stream
);
621 else if (value_bits_synthetic_pointer (val
,
622 TYPE_FIELD_BITPOS (type
,
624 TYPE_FIELD_BITSIZE (type
,
627 fputs_filtered (_("<synthetic pointer>"), stream
);
629 else if (!value_bits_valid (val
, TYPE_FIELD_BITPOS (type
, i
),
630 TYPE_FIELD_BITSIZE (type
, i
)))
632 val_print_optimized_out (stream
);
636 struct value_print_options opts
= *options
;
638 v
= value_field_bitfield (type
, i
, valaddr
, offset
, val
);
641 common_val_print (v
, stream
, recurse
+ 1, &opts
,
647 if (TYPE_FIELD_IGNORE (type
, i
))
649 fputs_filtered ("<optimized out or zero length>", stream
);
651 else if (field_is_static (&TYPE_FIELD (type
, i
)))
653 /* struct value *v = value_static_field (type, i);
657 v
= value_field_bitfield (type
, i
, valaddr
, offset
, val
);
660 val_print_optimized_out (stream
);
662 pascal_object_print_static_field (v
, stream
, recurse
+ 1,
667 struct value_print_options opts
= *options
;
670 /* val_print (TYPE_FIELD_TYPE (type, i),
671 valaddr + TYPE_FIELD_BITPOS (type, i) / 8,
672 address + TYPE_FIELD_BITPOS (type, i) / 8, 0,
673 stream, format, 0, recurse + 1, pretty); */
674 val_print (TYPE_FIELD_TYPE (type
, i
),
675 valaddr
, offset
+ TYPE_FIELD_BITPOS (type
, i
) / 8,
676 address
, stream
, recurse
+ 1, val
, &opts
,
680 annotate_field_end ();
683 if (dont_print_statmem
== 0)
685 /* Free the space used to deal with the printing
686 of the members from top level. */
687 obstack_free (&dont_print_statmem_obstack
, last_dont_print
);
688 dont_print_statmem_obstack
= tmp_obstack
;
693 fprintf_filtered (stream
, "\n");
694 print_spaces_filtered (2 * recurse
, stream
);
697 fprintf_filtered (stream
, "}");
700 /* Special val_print routine to avoid printing multiple copies of virtual
704 pascal_object_print_value (struct type
*type
, const gdb_byte
*valaddr
,
706 CORE_ADDR address
, struct ui_file
*stream
,
708 const struct value
*val
,
709 const struct value_print_options
*options
,
710 struct type
**dont_print_vb
)
712 struct type
**last_dont_print
713 = (struct type
**) obstack_next_free (&dont_print_vb_obstack
);
714 struct obstack tmp_obstack
= dont_print_vb_obstack
;
715 int i
, n_baseclasses
= TYPE_N_BASECLASSES (type
);
717 if (dont_print_vb
== 0)
719 /* If we're at top level, carve out a completely fresh
720 chunk of the obstack and use that until this particular
721 invocation returns. */
722 /* Bump up the high-water mark. Now alpha is omega. */
723 obstack_finish (&dont_print_vb_obstack
);
726 for (i
= 0; i
< n_baseclasses
; i
++)
729 struct type
*baseclass
= check_typedef (TYPE_BASECLASS (type
, i
));
730 const char *basename
= type_name_no_tag (baseclass
);
731 const gdb_byte
*base_valaddr
= NULL
;
733 volatile struct gdb_exception ex
;
736 if (BASETYPE_VIA_VIRTUAL (type
, i
))
738 struct type
**first_dont_print
739 = (struct type
**) obstack_base (&dont_print_vb_obstack
);
741 int j
= (struct type
**) obstack_next_free (&dont_print_vb_obstack
)
745 if (baseclass
== first_dont_print
[j
])
748 obstack_ptr_grow (&dont_print_vb_obstack
, baseclass
);
753 TRY_CATCH (ex
, RETURN_MASK_ERROR
)
755 boffset
= baseclass_offset (type
, i
, valaddr
, offset
, address
, val
);
757 if (ex
.reason
< 0 && ex
.error
== NOT_AVAILABLE_ERROR
)
759 else if (ex
.reason
< 0)
765 /* The virtual base class pointer might have been clobbered by the
766 user program. Make sure that it still points to a valid memory
769 if (boffset
< 0 || boffset
>= TYPE_LENGTH (type
))
772 struct cleanup
*back_to
;
774 buf
= xmalloc (TYPE_LENGTH (baseclass
));
775 back_to
= make_cleanup (xfree
, buf
);
778 if (target_read_memory (address
+ boffset
, buf
,
779 TYPE_LENGTH (baseclass
)) != 0)
781 address
= address
+ boffset
;
784 do_cleanups (back_to
);
787 base_valaddr
= valaddr
;
792 fprintf_filtered (stream
, "\n");
793 print_spaces_filtered (2 * recurse
, stream
);
795 fputs_filtered ("<", stream
);
796 /* Not sure what the best notation is in the case where there is no
799 fputs_filtered (basename
? basename
: "", stream
);
800 fputs_filtered ("> = ", stream
);
803 val_print_unavailable (stream
);
805 val_print_invalid_address (stream
);
807 pascal_object_print_value_fields (baseclass
, base_valaddr
,
808 thisoffset
+ boffset
, address
,
809 stream
, recurse
, val
, options
,
810 (struct type
**) obstack_base (&dont_print_vb_obstack
),
812 fputs_filtered (", ", stream
);
818 if (dont_print_vb
== 0)
820 /* Free the space used to deal with the printing
821 of this type from top level. */
822 obstack_free (&dont_print_vb_obstack
, last_dont_print
);
823 /* Reset watermark so that we can continue protecting
824 ourselves from whatever we were protecting ourselves. */
825 dont_print_vb_obstack
= tmp_obstack
;
829 /* Print value of a static member.
830 To avoid infinite recursion when printing a class that contains
831 a static instance of the class, we keep the addresses of all printed
832 static member classes in an obstack and refuse to print them more
835 VAL contains the value to print, STREAM, RECURSE, and OPTIONS
836 have the same meanings as in c_val_print. */
839 pascal_object_print_static_field (struct value
*val
,
840 struct ui_file
*stream
,
842 const struct value_print_options
*options
)
844 struct type
*type
= value_type (val
);
845 struct value_print_options opts
;
847 if (TYPE_CODE (type
) == TYPE_CODE_STRUCT
)
849 CORE_ADDR
*first_dont_print
, addr
;
853 = (CORE_ADDR
*) obstack_base (&dont_print_statmem_obstack
);
854 i
= (CORE_ADDR
*) obstack_next_free (&dont_print_statmem_obstack
)
859 if (value_address (val
) == first_dont_print
[i
])
862 <same as static member of an already seen type>",
868 addr
= value_address (val
);
869 obstack_grow (&dont_print_statmem_obstack
, (char *) &addr
,
872 CHECK_TYPEDEF (type
);
873 pascal_object_print_value_fields (type
,
874 value_contents_for_printing (val
),
875 value_embedded_offset (val
),
878 val
, options
, NULL
, 1);
884 common_val_print (val
, stream
, recurse
, &opts
, current_language
);
887 /* -Wmissing-prototypes */
888 extern initialize_file_ftype _initialize_pascal_valprint
;
891 _initialize_pascal_valprint (void)
893 add_setshow_boolean_cmd ("pascal_static-members", class_support
,
894 &user_print_options
.pascal_static_field_print
, _("\
895 Set printing of pascal static members."), _("\
896 Show printing of pascal static members."), NULL
,
898 show_pascal_static_field_print
,
899 &setprintlist
, &showprintlist
);