Bump GDB's version number to 15.0.91.DATE-git.
[binutils-gdb.git] / gdb / p-valprint.c
blobbdb9524d969c962aa46d7c4482e1182c3c5cade6
1 /* Support for printing Pascal values for GDB, the GNU debugger.
3 Copyright (C) 2000-2024 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 */
22 #include "extract-store-integer.h"
23 #include "gdbsupport/gdb_obstack.h"
24 #include "symtab.h"
25 #include "gdbtypes.h"
26 #include "expression.h"
27 #include "value.h"
28 #include "command.h"
29 #include "cli/cli-cmds.h"
30 #include "gdbcore.h"
31 #include "demangle.h"
32 #include "valprint.h"
33 #include "typeprint.h"
34 #include "language.h"
35 #include "target.h"
36 #include "annotate.h"
37 #include "p-lang.h"
38 #include "cp-abi.h"
39 #include "cp-support.h"
40 #include "objfiles.h"
41 #include "gdbsupport/byte-vector.h"
42 #include "cli/cli-style.h"
45 static void pascal_object_print_value_fields (struct value *, struct ui_file *,
46 int,
47 const struct value_print_options *,
48 struct type **, int);
50 /* Decorations for Pascal. */
52 static const struct generic_val_print_decorations p_decorations =
54 "",
55 " + ",
56 " * I",
57 "true",
58 "false",
59 "void",
60 "{",
61 "}"
64 /* See p-lang.h. */
66 void
67 pascal_language::value_print_inner (struct value *val,
68 struct ui_file *stream, int recurse,
69 const struct value_print_options *options) const
72 struct type *type = check_typedef (val->type ());
73 struct gdbarch *gdbarch = type->arch ();
74 enum bfd_endian byte_order = type_byte_order (type);
75 unsigned int i = 0; /* Number of characters printed */
76 unsigned len;
77 struct type *elttype;
78 unsigned eltlen;
79 int length_pos, length_size, string_pos;
80 struct type *char_type;
81 CORE_ADDR addr;
82 int want_space = 0;
83 const gdb_byte *valaddr = val->contents_for_printing ().data ();
85 switch (type->code ())
87 case TYPE_CODE_ARRAY:
89 LONGEST low_bound, high_bound;
91 if (get_array_bounds (type, &low_bound, &high_bound))
93 len = high_bound - low_bound + 1;
94 elttype = check_typedef (type->target_type ());
95 eltlen = elttype->length ();
96 /* If 's' format is used, try to print out as string.
97 If no format is given, print as string if element type
98 is of TYPE_CODE_CHAR and element size is 1,2 or 4. */
99 if (options->format == 's'
100 || ((eltlen == 1 || eltlen == 2 || eltlen == 4)
101 && elttype->code () == TYPE_CODE_CHAR
102 && options->format == 0))
104 /* If requested, look for the first null char and only print
105 elements up to it. */
106 if (options->stop_print_at_null)
108 unsigned int print_max_chars
109 = get_print_max_chars (options);
110 unsigned int temp_len;
112 /* Look for a NULL char. */
113 for (temp_len = 0;
114 (extract_unsigned_integer
115 (valaddr + temp_len * eltlen, eltlen, byte_order)
116 && temp_len < len
117 && temp_len < print_max_chars);
118 temp_len++);
119 len = temp_len;
122 printstr (stream, type->target_type (), valaddr, len,
123 NULL, 0, options);
124 i = len;
126 else
128 gdb_printf (stream, "{");
129 /* If this is a virtual function table, print the 0th
130 entry specially, and the rest of the members normally. */
131 if (pascal_object_is_vtbl_ptr_type (elttype))
133 i = 1;
134 gdb_printf (stream, "%d vtable entries", len - 1);
136 else
138 i = 0;
140 value_print_array_elements (val, stream, recurse, options, i);
141 gdb_printf (stream, "}");
143 break;
145 /* Array of unspecified length: treat like pointer to first elt. */
146 addr = val->address ();
148 goto print_unpacked_pointer;
150 case TYPE_CODE_PTR:
151 if (options->format && options->format != 's')
153 value_print_scalar_formatted (val, options, 0, stream);
154 break;
156 if (options->vtblprint && pascal_object_is_vtbl_ptr_type (type))
158 /* Print the unmangled name if desired. */
159 /* Print vtable entry - we only get here if we ARE using
160 -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */
161 /* Extract the address, assume that it is unsigned. */
162 addr = extract_unsigned_integer (valaddr,
163 type->length (), byte_order);
164 print_address_demangle (options, gdbarch, addr, stream, demangle);
165 break;
167 check_typedef (type->target_type ());
169 addr = unpack_pointer (type, valaddr);
170 print_unpacked_pointer:
171 elttype = check_typedef (type->target_type ());
173 if (elttype->code () == TYPE_CODE_FUNC)
175 /* Try to print what function it points to. */
176 print_address_demangle (options, gdbarch, addr, stream, demangle);
177 return;
180 if (options->addressprint && options->format != 's')
182 gdb_puts (paddress (gdbarch, addr), stream);
183 want_space = 1;
186 /* For a pointer to char or unsigned char, also print the string
187 pointed to, unless pointer is null. */
188 if (((elttype->length () == 1
189 && (elttype->code () == TYPE_CODE_INT
190 || elttype->code () == TYPE_CODE_CHAR))
191 || ((elttype->length () == 2 || elttype->length () == 4)
192 && elttype->code () == TYPE_CODE_CHAR))
193 && (options->format == 0 || options->format == 's')
194 && addr != 0)
196 if (want_space)
197 gdb_puts (" ", stream);
198 /* No wide string yet. */
199 i = val_print_string (elttype, NULL, addr, -1, stream, options);
201 /* Also for pointers to pascal strings. */
202 /* Note: this is Free Pascal specific:
203 as GDB does not recognize stabs pascal strings
204 Pascal strings are mapped to records
205 with lowercase names PM. */
206 if (pascal_is_string_type (elttype, &length_pos, &length_size,
207 &string_pos, &char_type, NULL) > 0
208 && addr != 0)
210 ULONGEST string_length;
211 gdb_byte *buffer;
213 if (want_space)
214 gdb_puts (" ", stream);
215 buffer = (gdb_byte *) xmalloc (length_size);
216 read_memory (addr + length_pos, buffer, length_size);
217 string_length = extract_unsigned_integer (buffer, length_size,
218 byte_order);
219 xfree (buffer);
220 i = val_print_string (char_type, NULL,
221 addr + string_pos, string_length,
222 stream, options);
224 else if (pascal_object_is_vtbl_member (type))
226 /* Print vtbl's nicely. */
227 CORE_ADDR vt_address = unpack_pointer (type, valaddr);
228 struct bound_minimal_symbol msymbol =
229 lookup_minimal_symbol_by_pc (vt_address);
231 /* If 'symbol_print' is set, we did the work above. */
232 if (!options->symbol_print
233 && (msymbol.minsym != NULL)
234 && (vt_address == msymbol.value_address ()))
236 if (want_space)
237 gdb_puts (" ", stream);
238 gdb_puts ("<", stream);
239 gdb_puts (msymbol.minsym->print_name (), stream);
240 gdb_puts (">", stream);
241 want_space = 1;
243 if (vt_address && options->vtblprint)
245 struct value *vt_val;
246 struct symbol *wsym = NULL;
247 struct type *wtype;
249 if (want_space)
250 gdb_puts (" ", stream);
252 if (msymbol.minsym != NULL)
254 const char *search_name = msymbol.minsym->search_name ();
255 wsym = lookup_symbol_search_name (search_name, NULL,
256 SEARCH_VFT).symbol;
259 if (wsym)
261 wtype = wsym->type ();
263 else
265 wtype = type->target_type ();
267 vt_val = value_at (wtype, vt_address);
268 common_val_print (vt_val, stream, recurse + 1, options,
269 current_language);
270 if (options->prettyformat)
272 gdb_printf (stream, "\n");
273 print_spaces (2 + 2 * recurse, stream);
278 return;
280 case TYPE_CODE_REF:
281 case TYPE_CODE_ENUM:
282 case TYPE_CODE_FLAGS:
283 case TYPE_CODE_FUNC:
284 case TYPE_CODE_RANGE:
285 case TYPE_CODE_INT:
286 case TYPE_CODE_FLT:
287 case TYPE_CODE_VOID:
288 case TYPE_CODE_ERROR:
289 case TYPE_CODE_UNDEF:
290 case TYPE_CODE_BOOL:
291 case TYPE_CODE_CHAR:
292 generic_value_print (val, stream, recurse, options, &p_decorations);
293 break;
295 case TYPE_CODE_UNION:
296 if (recurse && !options->unionprint)
298 gdb_printf (stream, "{...}");
299 break;
301 [[fallthrough]];
302 case TYPE_CODE_STRUCT:
303 if (options->vtblprint && pascal_object_is_vtbl_ptr_type (type))
305 /* Print the unmangled name if desired. */
306 /* Print vtable entry - we only get here if NOT using
307 -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */
308 /* Extract the address, assume that it is unsigned. */
309 print_address_demangle
310 (options, gdbarch,
311 extract_unsigned_integer
312 (valaddr + type->field (VTBL_FNADDR_OFFSET).loc_bitpos () / 8,
313 type->field (VTBL_FNADDR_OFFSET).type ()->length (),
314 byte_order),
315 stream, demangle);
317 else
319 if (pascal_is_string_type (type, &length_pos, &length_size,
320 &string_pos, &char_type, NULL) > 0)
322 len = extract_unsigned_integer (valaddr + length_pos,
323 length_size, byte_order);
324 printstr (stream, char_type, valaddr + string_pos, len,
325 NULL, 0, options);
327 else
328 pascal_object_print_value_fields (val, stream, recurse,
329 options, NULL, 0);
331 break;
333 case TYPE_CODE_SET:
334 elttype = type->index_type ();
335 elttype = check_typedef (elttype);
336 if (elttype->is_stub ())
338 fprintf_styled (stream, metadata_style.style (), "<incomplete type>");
339 break;
341 else
343 struct type *range = elttype;
344 LONGEST low_bound, high_bound;
345 int need_comma = 0;
347 gdb_puts ("[", stream);
349 int bound_info = (get_discrete_bounds (range, &low_bound, &high_bound)
350 ? 0 : -1);
351 if (low_bound == 0 && high_bound == -1 && type->length () > 0)
353 /* If we know the size of the set type, we can figure out the
354 maximum value. */
355 bound_info = 0;
356 high_bound = type->length () * TARGET_CHAR_BIT - 1;
357 range->bounds ()->high.set_const_val (high_bound);
359 maybe_bad_bstring:
360 if (bound_info < 0)
362 fputs_styled ("<error value>", metadata_style.style (), stream);
363 goto done;
366 for (i = low_bound; i <= high_bound; i++)
368 int element = value_bit_index (type, valaddr, i);
370 if (element < 0)
372 i = element;
373 goto maybe_bad_bstring;
375 if (element)
377 if (need_comma)
378 gdb_puts (", ", stream);
379 print_type_scalar (range, i, stream);
380 need_comma = 1;
382 if (i + 1 <= high_bound
383 && value_bit_index (type, valaddr, ++i))
385 int j = i;
387 gdb_puts ("..", stream);
388 while (i + 1 <= high_bound
389 && value_bit_index (type, valaddr, ++i))
390 j = i;
391 print_type_scalar (range, j, stream);
395 done:
396 gdb_puts ("]", stream);
398 break;
400 default:
401 error (_("Invalid pascal type code %d in symbol table."),
402 type->code ());
407 void
408 pascal_language::value_print (struct value *val, struct ui_file *stream,
409 const struct value_print_options *options) const
411 struct type *type = val->type ();
412 struct value_print_options opts = *options;
414 opts.deref_ref = true;
416 /* If it is a pointer, indicate what it points to.
418 Print type also if it is a reference.
420 Object pascal: if it is a member pointer, we will take care
421 of that when we print it. */
422 if (type->code () == TYPE_CODE_PTR
423 || type->code () == TYPE_CODE_REF)
425 /* Hack: remove (char *) for char strings. Their
426 type is indicated by the quoted string anyway. */
427 if (type->code () == TYPE_CODE_PTR
428 && type->name () == NULL
429 && type->target_type ()->name () != NULL
430 && strcmp (type->target_type ()->name (), "char") == 0)
432 /* Print nothing. */
434 else
436 gdb_printf (stream, "(");
437 type_print (type, "", stream, -1);
438 gdb_printf (stream, ") ");
441 common_val_print (val, stream, 0, &opts, current_language);
445 static void
446 show_pascal_static_field_print (struct ui_file *file, int from_tty,
447 struct cmd_list_element *c, const char *value)
449 gdb_printf (file, _("Printing of pascal static members is %s.\n"),
450 value);
453 static struct obstack dont_print_vb_obstack;
454 static struct obstack dont_print_statmem_obstack;
456 static void pascal_object_print_static_field (struct value *,
457 struct ui_file *, int,
458 const struct value_print_options *);
460 static void pascal_object_print_value (struct value *, struct ui_file *, int,
461 const struct value_print_options *,
462 struct type **);
464 /* It was changed to this after 2.4.5. */
465 const char pascal_vtbl_ptr_name[] =
466 {'_', '_', 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', 't', 'y', 'p', 'e', 0};
468 /* Return truth value for assertion that TYPE is of the type
469 "pointer to virtual function". */
472 pascal_object_is_vtbl_ptr_type (struct type *type)
474 const char *type_name = type->name ();
476 return (type_name != NULL
477 && strcmp (type_name, pascal_vtbl_ptr_name) == 0);
480 /* Return truth value for the assertion that TYPE is of the type
481 "pointer to virtual function table". */
484 pascal_object_is_vtbl_member (struct type *type)
486 if (type->code () == TYPE_CODE_PTR)
488 type = type->target_type ();
489 if (type->code () == TYPE_CODE_ARRAY)
491 type = type->target_type ();
492 if (type->code () == TYPE_CODE_STRUCT /* If not using
493 thunks. */
494 || type->code () == TYPE_CODE_PTR) /* If using thunks. */
496 /* Virtual functions tables are full of pointers
497 to virtual functions. */
498 return pascal_object_is_vtbl_ptr_type (type);
502 return 0;
505 /* Helper function for print pascal objects.
507 VAL, STREAM, RECURSE, and OPTIONS have the same meanings as in
508 pascal_object_print_value and c_value_print.
510 DONT_PRINT is an array of baseclass types that we
511 should not print, or zero if called from top level. */
513 static void
514 pascal_object_print_value_fields (struct value *val, struct ui_file *stream,
515 int recurse,
516 const struct value_print_options *options,
517 struct type **dont_print_vb,
518 int dont_print_statmem)
520 int i, len, n_baseclasses;
521 char *last_dont_print
522 = (char *) obstack_next_free (&dont_print_statmem_obstack);
524 struct type *type = check_typedef (val->type ());
526 gdb_printf (stream, "{");
527 len = type->num_fields ();
528 n_baseclasses = TYPE_N_BASECLASSES (type);
530 /* Print out baseclasses such that we don't print
531 duplicates of virtual baseclasses. */
532 if (n_baseclasses > 0)
533 pascal_object_print_value (val, stream, recurse + 1,
534 options, dont_print_vb);
536 if (!len && n_baseclasses == 1)
537 fprintf_styled (stream, metadata_style.style (), "<No data fields>");
538 else
540 struct obstack tmp_obstack = dont_print_statmem_obstack;
541 int fields_seen = 0;
542 const gdb_byte *valaddr = val->contents_for_printing ().data ();
544 if (dont_print_statmem == 0)
546 /* If we're at top level, carve out a completely fresh
547 chunk of the obstack and use that until this particular
548 invocation returns. */
549 obstack_finish (&dont_print_statmem_obstack);
552 for (i = n_baseclasses; i < len; i++)
554 /* If requested, skip printing of static fields. */
555 if (!options->pascal_static_field_print
556 && type->field (i).is_static ())
557 continue;
558 if (fields_seen)
559 gdb_printf (stream, ", ");
560 else if (n_baseclasses > 0)
562 if (options->prettyformat)
564 gdb_printf (stream, "\n");
565 print_spaces (2 + 2 * recurse, stream);
566 gdb_puts ("members of ", stream);
567 gdb_puts (type->name (), stream);
568 gdb_puts (": ", stream);
571 fields_seen = 1;
573 if (options->prettyformat)
575 gdb_printf (stream, "\n");
576 print_spaces (2 + 2 * recurse, stream);
578 else
580 stream->wrap_here (2 + 2 * recurse);
583 annotate_field_begin (type->field (i).type ());
585 if (type->field (i).is_static ())
587 gdb_puts ("static ", stream);
588 fprintf_symbol (stream,
589 type->field (i).name (),
590 current_language->la_language,
591 DMGL_PARAMS | DMGL_ANSI);
593 else
594 fputs_styled (type->field (i).name (),
595 variable_name_style.style (), stream);
596 annotate_field_name_end ();
597 gdb_puts (" = ", stream);
598 annotate_field_value ();
600 if (!type->field (i).is_static ()
601 && type->field (i).is_packed ())
603 struct value *v;
605 /* Bitfields require special handling, especially due to byte
606 order problems. */
607 if (type->field (i).is_ignored ())
609 fputs_styled ("<optimized out or zero length>",
610 metadata_style.style (), stream);
612 else if (val->bits_synthetic_pointer
613 (type->field (i).loc_bitpos (),
614 type->field (i).bitsize ()))
616 fputs_styled (_("<synthetic pointer>"),
617 metadata_style.style (), stream);
619 else
621 struct value_print_options opts = *options;
623 v = value_field_bitfield (type, i, valaddr, 0, val);
625 opts.deref_ref = false;
626 common_val_print (v, stream, recurse + 1, &opts,
627 current_language);
630 else
632 if (type->field (i).is_ignored ())
634 fputs_styled ("<optimized out or zero length>",
635 metadata_style.style (), stream);
637 else if (type->field (i).is_static ())
639 /* struct value *v = value_static_field (type, i);
640 v4.17 specific. */
641 struct value *v;
643 v = value_field_bitfield (type, i, valaddr, 0, val);
645 if (v == NULL)
646 val_print_optimized_out (NULL, stream);
647 else
648 pascal_object_print_static_field (v, stream, recurse + 1,
649 options);
651 else
653 struct value_print_options opts = *options;
655 opts.deref_ref = false;
657 struct value *v = val->primitive_field (0, i,
658 val->type ());
659 common_val_print (v, stream, recurse + 1, &opts,
660 current_language);
663 annotate_field_end ();
666 if (dont_print_statmem == 0)
668 /* Free the space used to deal with the printing
669 of the members from top level. */
670 obstack_free (&dont_print_statmem_obstack, last_dont_print);
671 dont_print_statmem_obstack = tmp_obstack;
674 if (options->prettyformat)
676 gdb_printf (stream, "\n");
677 print_spaces (2 * recurse, stream);
680 gdb_printf (stream, "}");
683 /* Special val_print routine to avoid printing multiple copies of virtual
684 baseclasses. */
686 static void
687 pascal_object_print_value (struct value *val, struct ui_file *stream,
688 int recurse,
689 const struct value_print_options *options,
690 struct type **dont_print_vb)
692 struct type **last_dont_print
693 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
694 struct obstack tmp_obstack = dont_print_vb_obstack;
695 struct type *type = check_typedef (val->type ());
696 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
698 if (dont_print_vb == 0)
700 /* If we're at top level, carve out a completely fresh
701 chunk of the obstack and use that until this particular
702 invocation returns. */
703 /* Bump up the high-water mark. Now alpha is omega. */
704 obstack_finish (&dont_print_vb_obstack);
707 for (i = 0; i < n_baseclasses; i++)
709 LONGEST boffset = 0;
710 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
711 const char *basename = baseclass->name ();
712 int skip = 0;
714 if (BASETYPE_VIA_VIRTUAL (type, i))
716 struct type **first_dont_print
717 = (struct type **) obstack_base (&dont_print_vb_obstack);
719 int j = (struct type **) obstack_next_free (&dont_print_vb_obstack)
720 - first_dont_print;
722 while (--j >= 0)
723 if (baseclass == first_dont_print[j])
724 goto flush_it;
726 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
729 struct value *base_value;
732 base_value = val->primitive_field (0, i, type);
734 catch (const gdb_exception_error &ex)
736 base_value = nullptr;
737 if (ex.error == NOT_AVAILABLE_ERROR)
738 skip = -1;
739 else
740 skip = 1;
743 if (skip == 0)
745 /* The virtual base class pointer might have been clobbered by the
746 user program. Make sure that it still points to a valid memory
747 location. */
749 if (boffset < 0 || boffset >= type->length ())
751 CORE_ADDR address= val->address ();
752 gdb::byte_vector buf (baseclass->length ());
754 if (target_read_memory (address + boffset, buf.data (),
755 baseclass->length ()) != 0)
756 skip = 1;
757 base_value = value_from_contents_and_address (baseclass,
758 buf.data (),
759 address + boffset);
760 baseclass = base_value->type ();
761 boffset = 0;
765 if (options->prettyformat)
767 gdb_printf (stream, "\n");
768 print_spaces (2 * recurse, stream);
770 gdb_puts ("<", stream);
771 /* Not sure what the best notation is in the case where there is no
772 baseclass name. */
774 gdb_puts (basename ? basename : "", stream);
775 gdb_puts ("> = ", stream);
777 if (skip < 0)
778 val_print_unavailable (stream);
779 else if (skip > 0)
780 val_print_invalid_address (stream);
781 else
782 pascal_object_print_value_fields
783 (base_value, stream, recurse, options,
784 (struct type **) obstack_base (&dont_print_vb_obstack),
786 gdb_puts (", ", stream);
788 flush_it:
792 if (dont_print_vb == 0)
794 /* Free the space used to deal with the printing
795 of this type from top level. */
796 obstack_free (&dont_print_vb_obstack, last_dont_print);
797 /* Reset watermark so that we can continue protecting
798 ourselves from whatever we were protecting ourselves. */
799 dont_print_vb_obstack = tmp_obstack;
803 /* Print value of a static member.
804 To avoid infinite recursion when printing a class that contains
805 a static instance of the class, we keep the addresses of all printed
806 static member classes in an obstack and refuse to print them more
807 than once.
809 VAL contains the value to print, STREAM, RECURSE, and OPTIONS
810 have the same meanings as in c_val_print. */
812 static void
813 pascal_object_print_static_field (struct value *val,
814 struct ui_file *stream,
815 int recurse,
816 const struct value_print_options *options)
818 struct type *type = val->type ();
819 struct value_print_options opts;
821 if (val->entirely_optimized_out ())
823 val_print_optimized_out (val, stream);
824 return;
827 if (type->code () == TYPE_CODE_STRUCT)
829 CORE_ADDR *first_dont_print, addr;
830 int i;
832 first_dont_print
833 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
834 i = (CORE_ADDR *) obstack_next_free (&dont_print_statmem_obstack)
835 - first_dont_print;
837 while (--i >= 0)
839 if (val->address () == first_dont_print[i])
841 fputs_styled (_("\
842 <same as static member of an already seen type>"),
843 metadata_style.style (), stream);
844 return;
848 addr = val->address ();
849 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
850 sizeof (CORE_ADDR));
852 type = check_typedef (type);
853 pascal_object_print_value_fields (val, stream, recurse,
854 options, NULL, 1);
855 return;
858 opts = *options;
859 opts.deref_ref = false;
860 common_val_print (val, stream, recurse, &opts, current_language);
863 void _initialize_pascal_valprint ();
864 void
865 _initialize_pascal_valprint ()
867 add_setshow_boolean_cmd ("pascal_static-members", class_support,
868 &user_print_options.pascal_static_field_print, _("\
869 Set printing of pascal static members."), _("\
870 Show printing of pascal static members."), NULL,
871 NULL,
872 show_pascal_static_field_print,
873 &setprintlist, &showprintlist);