gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / m2-typeprint.c
CommitLineData
c906108c 1/* Support for printing Modula 2 types for GDB, the GNU debugger.
b811d2c2 2 Copyright (C) 1986-2020 Free Software Foundation, Inc.
c906108c 3
c5aa993b
JM
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
a9762ec7 8 the Free Software Foundation; either version 3 of the License, or
c5aa993b
JM
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
a9762ec7 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
18
19#include "defs.h"
72019c9c 20#include "gdb_obstack.h"
c906108c
SS
21#include "bfd.h" /* Binary File Description */
22#include "symtab.h"
23#include "gdbtypes.h"
24#include "expression.h"
25#include "value.h"
26#include "gdbcore.h"
c906108c 27#include "m2-lang.h"
72019c9c
GM
28#include "target.h"
29#include "language.h"
30#include "demangle.h"
31#include "c-lang.h"
32#include "typeprint.h"
33#include "cp-abi.h"
7f6aba03 34#include "cli/cli-style.h"
c906108c 35
72019c9c
GM
36static void m2_print_bounds (struct type *type,
37 struct ui_file *stream, int show, int level,
38 int print_high);
39
79d43c61
TT
40static void m2_typedef (struct type *, struct ui_file *, int, int,
41 const struct type_print_options *);
42static void m2_array (struct type *, struct ui_file *, int, int,
43 const struct type_print_options *);
44static void m2_pointer (struct type *, struct ui_file *, int, int,
45 const struct type_print_options *);
46static void m2_ref (struct type *, struct ui_file *, int, int,
47 const struct type_print_options *);
48static void m2_procedure (struct type *, struct ui_file *, int, int,
49 const struct type_print_options *);
72019c9c
GM
50static void m2_union (struct type *, struct ui_file *);
51static void m2_enum (struct type *, struct ui_file *, int, int);
79d43c61
TT
52static void m2_range (struct type *, struct ui_file *, int, int,
53 const struct type_print_options *);
72019c9c
GM
54static void m2_type_name (struct type *type, struct ui_file *stream);
55static void m2_short_set (struct type *type, struct ui_file *stream,
56 int show, int level);
57static int m2_long_set (struct type *type, struct ui_file *stream,
79d43c61 58 int show, int level, const struct type_print_options *flags);
844781a1 59static int m2_unbounded_array (struct type *type, struct ui_file *stream,
79d43c61
TT
60 int show, int level,
61 const struct type_print_options *flags);
72019c9c 62static void m2_record_fields (struct type *type, struct ui_file *stream,
79d43c61 63 int show, int level, const struct type_print_options *flags);
72019c9c
GM
64static void m2_unknown (const char *s, struct type *type,
65 struct ui_file *stream, int show, int level);
66
67int m2_is_long_set (struct type *type);
68int m2_is_long_set_of_type (struct type *type, struct type **of_type);
844781a1 69int m2_is_unbounded_array (struct type *type);
72019c9c
GM
70
71
c906108c 72void
025bb325
MS
73m2_print_type (struct type *type, const char *varstring,
74 struct ui_file *stream,
79d43c61
TT
75 int show, int level,
76 const struct type_print_options *flags)
c906108c 77{
f168693b 78 type = check_typedef (type);
72019c9c
GM
79
80 QUIT;
81
82 wrap_here (" ");
83 if (type == NULL)
84 {
7f6aba03 85 fputs_styled (_("<type unknown>"), metadata_style.style (), stream);
72019c9c
GM
86 return;
87 }
88
78134374 89 switch (type->code ())
72019c9c
GM
90 {
91 case TYPE_CODE_SET:
92 m2_short_set(type, stream, show, level);
93 break;
94
95 case TYPE_CODE_STRUCT:
79d43c61
TT
96 if (m2_long_set (type, stream, show, level, flags)
97 || m2_unbounded_array (type, stream, show, level, flags))
72019c9c 98 break;
79d43c61 99 m2_record_fields (type, stream, show, level, flags);
72019c9c
GM
100 break;
101
102 case TYPE_CODE_TYPEDEF:
79d43c61 103 m2_typedef (type, stream, show, level, flags);
72019c9c
GM
104 break;
105
106 case TYPE_CODE_ARRAY:
79d43c61 107 m2_array (type, stream, show, level, flags);
72019c9c
GM
108 break;
109
110 case TYPE_CODE_PTR:
79d43c61 111 m2_pointer (type, stream, show, level, flags);
72019c9c
GM
112 break;
113
114 case TYPE_CODE_REF:
79d43c61 115 m2_ref (type, stream, show, level, flags);
72019c9c
GM
116 break;
117
72019c9c
GM
118 case TYPE_CODE_METHOD:
119 m2_unknown (_("method"), type, stream, show, level);
120 break;
121
122 case TYPE_CODE_FUNC:
79d43c61 123 m2_procedure (type, stream, show, level, flags);
72019c9c
GM
124 break;
125
126 case TYPE_CODE_UNION:
127 m2_union (type, stream);
128 break;
129
130 case TYPE_CODE_ENUM:
131 m2_enum (type, stream, show, level);
132 break;
133
134 case TYPE_CODE_VOID:
135 break;
136
137 case TYPE_CODE_UNDEF:
025bb325 138 /* i18n: Do not translate the "struct" part! */
72019c9c
GM
139 m2_unknown (_("undef"), type, stream, show, level);
140 break;
141
142 case TYPE_CODE_ERROR:
143 m2_unknown (_("error"), type, stream, show, level);
144 break;
145
146 case TYPE_CODE_RANGE:
79d43c61 147 m2_range (type, stream, show, level, flags);
72019c9c
GM
148 break;
149
72019c9c
GM
150 default:
151 m2_type_name (type, stream);
152 break;
153 }
154}
155
5c6ce71d
TT
156/* Print a typedef using M2 syntax. TYPE is the underlying type.
157 NEW_SYMBOL is the symbol naming the type. STREAM is the stream on
158 which to print. */
159
160void
161m2_print_typedef (struct type *type, struct symbol *new_symbol,
162 struct ui_file *stream)
163{
f168693b 164 type = check_typedef (type);
5c6ce71d 165 fprintf_filtered (stream, "TYPE ");
7d93a1e0
SM
166 if (!SYMBOL_TYPE (new_symbol)->name ()
167 || strcmp ((SYMBOL_TYPE (new_symbol))->name (),
987012b8
CB
168 new_symbol->linkage_name ()) != 0)
169 fprintf_filtered (stream, "%s = ", new_symbol->print_name ());
5c6ce71d
TT
170 else
171 fprintf_filtered (stream, "<builtin> = ");
172 type_print (type, "", stream, 0);
e1709896 173 fprintf_filtered (stream, ";");
5c6ce71d
TT
174}
175
844781a1 176/* m2_type_name - if a, type, has a name then print it. */
72019c9c
GM
177
178void
179m2_type_name (struct type *type, struct ui_file *stream)
180{
7d93a1e0
SM
181 if (type->name () != NULL)
182 fputs_filtered (type->name (), stream);
72019c9c
GM
183}
184
844781a1 185/* m2_range - displays a Modula-2 subrange type. */
72019c9c
GM
186
187void
188m2_range (struct type *type, struct ui_file *stream, int show,
79d43c61 189 int level, const struct type_print_options *flags)
72019c9c
GM
190{
191 if (TYPE_HIGH_BOUND (type) == TYPE_LOW_BOUND (type))
09e2d7c7
DE
192 {
193 /* FIXME: TYPE_TARGET_TYPE used to be TYPE_DOMAIN_TYPE but that was
194 wrong. Not sure if TYPE_TARGET_TYPE is correct though. */
195 m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
196 flags);
197 }
72019c9c
GM
198 else
199 {
200 struct type *target = TYPE_TARGET_TYPE (type);
201
202 fprintf_filtered (stream, "[");
203 print_type_scalar (target, TYPE_LOW_BOUND (type), stream);
204 fprintf_filtered (stream, "..");
205 print_type_scalar (target, TYPE_HIGH_BOUND (type), stream);
206 fprintf_filtered (stream, "]");
207 }
208}
209
210static void
211m2_typedef (struct type *type, struct ui_file *stream, int show,
79d43c61 212 int level, const struct type_print_options *flags)
72019c9c 213{
7d93a1e0 214 if (type->name () != NULL)
72019c9c 215 {
7d93a1e0 216 fputs_filtered (type->name (), stream);
72019c9c
GM
217 fputs_filtered (" = ", stream);
218 }
79d43c61 219 m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
72019c9c
GM
220}
221
844781a1 222/* m2_array - prints out a Modula-2 ARRAY ... OF type. */
72019c9c
GM
223
224static void m2_array (struct type *type, struct ui_file *stream,
79d43c61 225 int show, int level, const struct type_print_options *flags)
72019c9c
GM
226{
227 fprintf_filtered (stream, "ARRAY [");
d5d6fca5 228 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
d78df370 229 && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
72019c9c
GM
230 {
231 if (TYPE_INDEX_TYPE (type) != 0)
232 {
233 m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 0);
234 fprintf_filtered (stream, "..");
235 m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 1);
236 }
237 else
cc1defb1
KS
238 fputs_filtered (pulongest ((TYPE_LENGTH (type)
239 / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))),
240 stream);
72019c9c
GM
241 }
242 fprintf_filtered (stream, "] OF ");
79d43c61 243 m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
72019c9c
GM
244}
245
246static void
247m2_pointer (struct type *type, struct ui_file *stream, int show,
79d43c61 248 int level, const struct type_print_options *flags)
72019c9c
GM
249{
250 if (TYPE_CONST (type))
251 fprintf_filtered (stream, "[...] : ");
252 else
253 fprintf_filtered (stream, "POINTER TO ");
254
79d43c61 255 m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
72019c9c
GM
256}
257
258static void
259m2_ref (struct type *type, struct ui_file *stream, int show,
79d43c61 260 int level, const struct type_print_options *flags)
72019c9c
GM
261{
262 fprintf_filtered (stream, "VAR");
79d43c61 263 m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
72019c9c
GM
264}
265
266static void
267m2_unknown (const char *s, struct type *type, struct ui_file *stream,
268 int show, int level)
269{
270 fprintf_filtered (stream, "%s %s", s, _("is unknown"));
271}
272
273static void m2_union (struct type *type, struct ui_file *stream)
274{
275 fprintf_filtered (stream, "union");
276}
277
278static void
279m2_procedure (struct type *type, struct ui_file *stream,
79d43c61 280 int show, int level, const struct type_print_options *flags)
72019c9c
GM
281{
282 fprintf_filtered (stream, "PROCEDURE ");
283 m2_type_name (type, stream);
7022349d 284 if (TYPE_TARGET_TYPE (type) == NULL
78134374 285 || TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
72019c9c 286 {
1f704f76 287 int i, len = type->num_fields ();
72019c9c
GM
288
289 fprintf_filtered (stream, " (");
290 for (i = 0; i < len; i++)
291 {
292 if (i > 0)
293 {
294 fputs_filtered (", ", stream);
295 wrap_here (" ");
296 }
79d43c61 297 m2_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0, flags);
72019c9c 298 }
7022349d 299 fprintf_filtered (stream, ") : ");
72019c9c 300 if (TYPE_TARGET_TYPE (type) != NULL)
7022349d
PA
301 m2_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags);
302 else
303 type_print_unknown_return_type (stream);
72019c9c
GM
304 }
305}
306
307static void
308m2_print_bounds (struct type *type,
309 struct ui_file *stream, int show, int level,
310 int print_high)
311{
312 struct type *target = TYPE_TARGET_TYPE (type);
313
1f704f76 314 if (type->num_fields () == 0)
72019c9c
GM
315 return;
316
317 if (print_high)
318 print_type_scalar (target, TYPE_HIGH_BOUND (type), stream);
319 else
320 print_type_scalar (target, TYPE_LOW_BOUND (type), stream);
321}
322
323static void
324m2_short_set (struct type *type, struct ui_file *stream, int show, int level)
325{
326 fprintf_filtered(stream, "SET [");
327 m2_print_bounds (TYPE_INDEX_TYPE (type), stream,
328 show - 1, level, 0);
329
330 fprintf_filtered(stream, "..");
331 m2_print_bounds (TYPE_INDEX_TYPE (type), stream,
332 show - 1, level, 1);
333 fprintf_filtered(stream, "]");
334}
335
336int
337m2_is_long_set (struct type *type)
338{
025bb325
MS
339 LONGEST previous_high = 0; /* Unnecessary initialization
340 keeps gcc -Wall happy. */
72019c9c
GM
341 int len, i;
342 struct type *range;
343
78134374 344 if (type->code () == TYPE_CODE_STRUCT)
72019c9c
GM
345 {
346
844781a1
GM
347 /* check if all fields of the RECORD are consecutive sets. */
348
1f704f76 349 len = type->num_fields ();
72019c9c
GM
350 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
351 {
352 if (TYPE_FIELD_TYPE (type, i) == NULL)
353 return 0;
78134374 354 if (TYPE_FIELD_TYPE (type, i)->code () != TYPE_CODE_SET)
72019c9c
GM
355 return 0;
356 if (TYPE_FIELD_NAME (type, i) != NULL
357 && (strcmp (TYPE_FIELD_NAME (type, i), "") != 0))
358 return 0;
359 range = TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i));
360 if ((i > TYPE_N_BASECLASSES (type))
361 && previous_high + 1 != TYPE_LOW_BOUND (range))
362 return 0;
363 previous_high = TYPE_HIGH_BOUND (range);
364 }
365 return len>0;
366 }
367 return 0;
368}
369
844781a1
GM
370/* m2_get_discrete_bounds - a wrapper for get_discrete_bounds which
371 understands that CHARs might be signed.
372 This should be integrated into gdbtypes.c
373 inside get_discrete_bounds. */
72019c9c 374
2c0b251b 375static int
72019c9c
GM
376m2_get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp)
377{
f168693b 378 type = check_typedef (type);
78134374 379 switch (type->code ())
72019c9c
GM
380 {
381 case TYPE_CODE_CHAR:
382 if (TYPE_LENGTH (type) < sizeof (LONGEST))
383 {
384 if (!TYPE_UNSIGNED (type))
385 {
386 *lowp = -(1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1));
387 *highp = -*lowp - 1;
388 return 0;
389 }
390 }
391 /* fall through */
392 default:
393 return get_discrete_bounds (type, lowp, highp);
394 }
395}
396
844781a1
GM
397/* m2_is_long_set_of_type - returns TRUE if the long set was declared as
398 SET OF <oftype> of_type is assigned to the
399 subtype. */
72019c9c
GM
400
401int
402m2_is_long_set_of_type (struct type *type, struct type **of_type)
403{
404 int len, i;
405 struct type *range;
406 struct type *target;
407 LONGEST l1, l2;
408 LONGEST h1, h2;
409
78134374 410 if (type->code () == TYPE_CODE_STRUCT)
72019c9c 411 {
1f704f76 412 len = type->num_fields ();
72019c9c
GM
413 i = TYPE_N_BASECLASSES (type);
414 if (len == 0)
415 return 0;
416 range = TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i));
417 target = TYPE_TARGET_TYPE (range);
72019c9c
GM
418
419 l1 = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i)));
420 h1 = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, len-1)));
421 *of_type = target;
422 if (m2_get_discrete_bounds (target, &l2, &h2) >= 0)
423 return (l1 == l2 && h1 == h2);
424 error (_("long_set failed to find discrete bounds for its subtype"));
425 return 0;
426 }
427 error (_("expecting long_set"));
428 return 0;
429}
430
431static int
79d43c61
TT
432m2_long_set (struct type *type, struct ui_file *stream, int show, int level,
433 const struct type_print_options *flags)
72019c9c 434{
72019c9c
GM
435 struct type *of_type;
436 int i;
1f704f76 437 int len = type->num_fields ();
72019c9c
GM
438 LONGEST low;
439 LONGEST high;
440
441 if (m2_is_long_set (type))
442 {
7d93a1e0 443 if (type->name () != NULL)
72019c9c 444 {
7d93a1e0 445 fputs_filtered (type->name (), stream);
72019c9c
GM
446 if (show == 0)
447 return 1;
e86ca25f 448 fputs_filtered (" = ", stream);
72019c9c
GM
449 }
450
72019c9c
GM
451 if (get_long_set_bounds (type, &low, &high))
452 {
453 fprintf_filtered(stream, "SET OF ");
454 i = TYPE_N_BASECLASSES (type);
455 if (m2_is_long_set_of_type (type, &of_type))
79d43c61 456 m2_print_type (of_type, "", stream, show - 1, level, flags);
72019c9c
GM
457 else
458 {
459 fprintf_filtered(stream, "[");
460 m2_print_bounds (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i)),
461 stream, show - 1, level, 0);
462
463 fprintf_filtered(stream, "..");
464
465 m2_print_bounds (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, len-1)),
466 stream, show - 1, level, 1);
467 fprintf_filtered(stream, "]");
468 }
469 }
470 else
025bb325 471 /* i18n: Do not translate the "SET OF" part! */
72019c9c
GM
472 fprintf_filtered(stream, _("SET OF <unknown>"));
473
474 return 1;
475 }
476 return 0;
477}
478
844781a1
GM
479/* m2_is_unbounded_array - returns TRUE if, type, should be regarded
480 as a Modula-2 unbounded ARRAY type. */
481
482int
483m2_is_unbounded_array (struct type *type)
484{
78134374 485 if (type->code () == TYPE_CODE_STRUCT)
844781a1
GM
486 {
487 /*
488 * check if we have a structure with exactly two fields named
489 * _m2_contents and _m2_high. It also checks to see if the
490 * type of _m2_contents is a pointer. The TYPE_TARGET_TYPE
491 * of the pointer determines the unbounded ARRAY OF type.
492 */
1f704f76 493 if (type->num_fields () != 2)
844781a1
GM
494 return 0;
495 if (strcmp (TYPE_FIELD_NAME (type, 0), "_m2_contents") != 0)
496 return 0;
497 if (strcmp (TYPE_FIELD_NAME (type, 1), "_m2_high") != 0)
498 return 0;
78134374 499 if (TYPE_FIELD_TYPE (type, 0)->code () != TYPE_CODE_PTR)
844781a1
GM
500 return 0;
501 return 1;
502 }
503 return 0;
504}
505
506/* m2_unbounded_array - if the struct type matches a Modula-2 unbounded
507 parameter type then display the type as an
508 ARRAY OF type. Returns TRUE if an unbounded
509 array type was detected. */
510
511static int
512m2_unbounded_array (struct type *type, struct ui_file *stream, int show,
79d43c61 513 int level, const struct type_print_options *flags)
844781a1
GM
514{
515 if (m2_is_unbounded_array (type))
516 {
517 if (show > 0)
518 {
519 fputs_filtered ("ARRAY OF ", stream);
520 m2_print_type (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0)),
79d43c61 521 "", stream, 0, level, flags);
844781a1
GM
522 }
523 return 1;
524 }
525 return 0;
526}
527
72019c9c
GM
528void
529m2_record_fields (struct type *type, struct ui_file *stream, int show,
79d43c61 530 int level, const struct type_print_options *flags)
72019c9c 531{
844781a1 532 /* Print the tag if it exists. */
7d93a1e0 533 if (type->name () != NULL)
72019c9c 534 {
7d93a1e0 535 if (!startswith (type->name (), "$$"))
72019c9c 536 {
7d93a1e0 537 fputs_filtered (type->name (), stream);
72019c9c
GM
538 if (show > 0)
539 fprintf_filtered (stream, " = ");
540 }
541 }
542 wrap_here (" ");
543 if (show < 0)
544 {
78134374 545 if (type->code () == TYPE_CODE_STRUCT)
72019c9c 546 fprintf_filtered (stream, "RECORD ... END ");
78134374 547 else if (type->code () == TYPE_CODE_UNION)
72019c9c
GM
548 fprintf_filtered (stream, "CASE ... END ");
549 }
550 else if (show > 0)
551 {
5648af48 552 int i;
1f704f76 553 int len = type->num_fields ();
5648af48 554
78134374 555 if (type->code () == TYPE_CODE_STRUCT)
72019c9c 556 fprintf_filtered (stream, "RECORD\n");
78134374 557 else if (type->code () == TYPE_CODE_UNION)
025bb325 558 /* i18n: Do not translate "CASE" and "OF". */
72019c9c 559 fprintf_filtered (stream, _("CASE <variant> OF\n"));
72019c9c
GM
560
561 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
562 {
563 QUIT;
564
565 print_spaces_filtered (level + 4, stream);
3f0cbb04
TT
566 fputs_styled (TYPE_FIELD_NAME (type, i),
567 variable_name_style.style (), stream);
72019c9c
GM
568 fputs_filtered (" : ", stream);
569 m2_print_type (TYPE_FIELD_TYPE (type, i),
570 "",
79d43c61 571 stream, 0, level + 4, flags);
72019c9c
GM
572 if (TYPE_FIELD_PACKED (type, i))
573 {
574 /* It is a bitfield. This code does not attempt
575 to look at the bitpos and reconstruct filler,
576 unnamed fields. This would lead to misleading
577 results if the compiler does not put out fields
578 for such things (I don't know what it does). */
579 fprintf_filtered (stream, " : %d",
580 TYPE_FIELD_BITSIZE (type, i));
581 }
582 fprintf_filtered (stream, ";\n");
583 }
584
585 fprintfi_filtered (level, stream, "END ");
586 }
587}
588
589void
590m2_enum (struct type *type, struct ui_file *stream, int show, int level)
591{
b4aa388a
SP
592 LONGEST lastval;
593 int i, len;
c906108c 594
72019c9c
GM
595 if (show < 0)
596 {
597 /* If we just printed a tag name, no need to print anything else. */
7d93a1e0 598 if (type->name () == NULL)
72019c9c
GM
599 fprintf_filtered (stream, "(...)");
600 }
7d93a1e0 601 else if (show > 0 || type->name () == NULL)
72019c9c
GM
602 {
603 fprintf_filtered (stream, "(");
1f704f76 604 len = type->num_fields ();
72019c9c
GM
605 lastval = 0;
606 for (i = 0; i < len; i++)
607 {
608 QUIT;
609 if (i > 0)
610 fprintf_filtered (stream, ", ");
611 wrap_here (" ");
3f0cbb04
TT
612 fputs_styled (TYPE_FIELD_NAME (type, i),
613 variable_name_style.style (), stream);
14e75d8e 614 if (lastval != TYPE_FIELD_ENUMVAL (type, i))
72019c9c 615 {
14e75d8e
JK
616 fprintf_filtered (stream, " = %s",
617 plongest (TYPE_FIELD_ENUMVAL (type, i)));
618 lastval = TYPE_FIELD_ENUMVAL (type, i);
72019c9c
GM
619 }
620 lastval++;
621 }
622 fprintf_filtered (stream, ")");
623 }
c906108c 624}
This page took 1.699082 seconds and 4 git commands to generate.