Use struct bfd_seclet * rather than bfd_seclet_type in prototypes to
[deliverable/binutils-gdb.git] / gdb / gdbtypes.c
CommitLineData
1ab3bf1b
JG
1/* Support routines for manipulating internal types for GDB.
2 Copyright (C) 1992 Free Software Foundation, Inc.
3 Contributed by Cygnus Support, using pieces from other GDB modules.
4
5This file is part of GDB.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
1ab3bf1b 21#include "defs.h"
93fe4e33 22#include <string.h>
1ab3bf1b
JG
23#include "bfd.h"
24#include "symtab.h"
25#include "symfile.h"
5e2e79f8 26#include "objfiles.h"
1ab3bf1b
JG
27#include "gdbtypes.h"
28#include "expression.h"
29#include "language.h"
30#include "target.h"
31#include "value.h"
8f793aa5 32#include "demangle.h"
51b80b00 33#include "complaints.h"
1ab3bf1b
JG
34
35/* Alloc a new type structure and fill it with some defaults. If
36 OBJFILE is non-NULL, then allocate the space for the type structure
37 in that objfile's type_obstack. */
38
39struct type *
40alloc_type (objfile)
41 struct objfile *objfile;
42{
43 register struct type *type;
44
45 /* Alloc the structure and start off with all fields zeroed. */
46
47 if (objfile == NULL)
48 {
49 type = (struct type *) xmalloc (sizeof (struct type));
50 }
51 else
52 {
53 type = (struct type *) obstack_alloc (&objfile -> type_obstack,
54 sizeof (struct type));
55 }
dac9734e 56 memset ((char *) type, 0, sizeof (struct type));
1ab3bf1b
JG
57
58 /* Initialize the fields that might not be zero. */
59
60 TYPE_CODE (type) = TYPE_CODE_UNDEF;
61 TYPE_OBJFILE (type) = objfile;
62 TYPE_VPTR_FIELDNO (type) = -1;
63
64 return (type);
65}
66
ea1549b3
JG
67/* Lookup a pointer to a type TYPE. TYPEPTR, if nonzero, points
68 to a pointer to memory where the pointer type should be stored.
69 If *TYPEPTR is zero, update it to point to the pointer type we return.
70 We allocate new memory if needed. */
71
72struct type *
73make_pointer_type (type, typeptr)
74 struct type *type;
75 struct type **typeptr;
76{
77 register struct type *ntype; /* New type */
78 struct objfile *objfile;
79
80 ntype = TYPE_POINTER_TYPE (type);
81
82 if (ntype)
83 if (typeptr == 0)
84 return ntype; /* Don't care about alloc, and have new type. */
85 else if (*typeptr == 0)
86 {
87 *typeptr = ntype; /* Tracking alloc, and we have new type. */
88 return ntype;
89 }
90
91 if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */
92 {
93 ntype = alloc_type (TYPE_OBJFILE (type));
94 if (typeptr)
95 *typeptr = ntype;
96 }
97 else /* We have storage, but need to reset it. */
98 {
99 ntype = *typeptr;
100 objfile = TYPE_OBJFILE (ntype);
dac9734e 101 memset ((char *) ntype, 0, sizeof (struct type));
ea1549b3
JG
102 TYPE_OBJFILE (ntype) = objfile;
103 }
104
105 TYPE_TARGET_TYPE (ntype) = type;
106 TYPE_POINTER_TYPE (type) = ntype;
107
108 /* FIXME! Assume the machine has only one representation for pointers! */
109
110 TYPE_LENGTH (ntype) = TARGET_PTR_BIT / TARGET_CHAR_BIT;
111 TYPE_CODE (ntype) = TYPE_CODE_PTR;
112
113 /* pointers are unsigned */
114 TYPE_FLAGS (ntype) |= TYPE_FLAG_UNSIGNED;
115
116 if (!TYPE_POINTER_TYPE (type)) /* Remember it, if don't have one. */
117 TYPE_POINTER_TYPE (type) = ntype;
118
119 return ntype;
120}
121
1ab3bf1b
JG
122/* Given a type TYPE, return a type of pointers to that type.
123 May need to construct such a type if this is the first use. */
124
125struct type *
126lookup_pointer_type (type)
127 struct type *type;
128{
ea1549b3
JG
129 return make_pointer_type (type, (struct type **)0);
130}
131
132/* Lookup a C++ `reference' to a type TYPE. TYPEPTR, if nonzero, points
133 to a pointer to memory where the reference type should be stored.
134 If *TYPEPTR is zero, update it to point to the reference type we return.
135 We allocate new memory if needed. */
136
137struct type *
138make_reference_type (type, typeptr)
139 struct type *type;
140 struct type **typeptr;
141{
142 register struct type *ntype; /* New type */
143 struct objfile *objfile;
144
145 ntype = TYPE_REFERENCE_TYPE (type);
1ab3bf1b 146
ea1549b3
JG
147 if (ntype)
148 if (typeptr == 0)
149 return ntype; /* Don't care about alloc, and have new type. */
150 else if (*typeptr == 0)
151 {
152 *typeptr = ntype; /* Tracking alloc, and we have new type. */
153 return ntype;
154 }
155
156 if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */
157 {
158 ntype = alloc_type (TYPE_OBJFILE (type));
159 if (typeptr)
160 *typeptr = ntype;
161 }
162 else /* We have storage, but need to reset it. */
1ab3bf1b 163 {
ea1549b3
JG
164 ntype = *typeptr;
165 objfile = TYPE_OBJFILE (ntype);
dac9734e 166 memset ((char *) ntype, 0, sizeof (struct type));
ea1549b3 167 TYPE_OBJFILE (ntype) = objfile;
1ab3bf1b 168 }
ea1549b3
JG
169
170 TYPE_TARGET_TYPE (ntype) = type;
171 TYPE_REFERENCE_TYPE (type) = ntype;
172
173 /* FIXME! Assume the machine has only one representation for references,
174 and that it matches the (only) representation for pointers! */
175
176 TYPE_LENGTH (ntype) = TARGET_PTR_BIT / TARGET_CHAR_BIT;
177 TYPE_CODE (ntype) = TYPE_CODE_REF;
178
179 if (!TYPE_REFERENCE_TYPE (type)) /* Remember it, if don't have one. */
180 TYPE_REFERENCE_TYPE (type) = ntype;
181
182 return ntype;
1ab3bf1b
JG
183}
184
ea1549b3
JG
185/* Same as above, but caller doesn't care about memory allocation details. */
186
1ab3bf1b
JG
187struct type *
188lookup_reference_type (type)
189 struct type *type;
190{
ea1549b3
JG
191 return make_reference_type (type, (struct type **)0);
192}
193
194/* Lookup a function type that returns type TYPE. TYPEPTR, if nonzero, points
195 to a pointer to memory where the function type should be stored.
196 If *TYPEPTR is zero, update it to point to the function type we return.
197 We allocate new memory if needed. */
1ab3bf1b 198
ea1549b3
JG
199struct type *
200make_function_type (type, typeptr)
201 struct type *type;
202 struct type **typeptr;
203{
204 register struct type *ntype; /* New type */
205 struct objfile *objfile;
206
207 ntype = TYPE_FUNCTION_TYPE (type);
208
209 if (ntype)
210 if (typeptr == 0)
211 return ntype; /* Don't care about alloc, and have new type. */
212 else if (*typeptr == 0)
213 {
214 *typeptr = ntype; /* Tracking alloc, and we have new type. */
215 return ntype;
216 }
217
218 if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */
1ab3bf1b 219 {
ea1549b3
JG
220 ntype = alloc_type (TYPE_OBJFILE (type));
221 if (typeptr)
222 *typeptr = ntype;
1ab3bf1b 223 }
ea1549b3
JG
224 else /* We have storage, but need to reset it. */
225 {
226 ntype = *typeptr;
227 objfile = TYPE_OBJFILE (ntype);
dac9734e 228 memset ((char *) ntype, 0, sizeof (struct type));
ea1549b3
JG
229 TYPE_OBJFILE (ntype) = objfile;
230 }
231
232 TYPE_TARGET_TYPE (ntype) = type;
233 TYPE_FUNCTION_TYPE (type) = ntype;
234
235 TYPE_LENGTH (ntype) = 1;
236 TYPE_CODE (ntype) = TYPE_CODE_FUNC;
237
238 if (!TYPE_FUNCTION_TYPE (type)) /* Remember it, if don't have one. */
239 TYPE_FUNCTION_TYPE (type) = ntype;
240
241 return ntype;
1ab3bf1b
JG
242}
243
ea1549b3 244
1ab3bf1b
JG
245/* Given a type TYPE, return a type of functions that return that type.
246 May need to construct such a type if this is the first use. */
247
248struct type *
249lookup_function_type (type)
250 struct type *type;
251{
ea1549b3 252 return make_function_type (type, (struct type **)0);
1ab3bf1b
JG
253}
254
255/* Implement direct support for MEMBER_TYPE in GNU C++.
256 May need to construct such a type if this is the first use.
257 The TYPE is the type of the member. The DOMAIN is the type
258 of the aggregate that the member belongs to. */
259
260struct type *
261lookup_member_type (type, domain)
262 struct type *type;
263 struct type *domain;
264{
265 register struct type *mtype;
266
267 mtype = alloc_type (TYPE_OBJFILE (type));
268 smash_to_member_type (mtype, domain, type);
269 return (mtype);
270}
271
272/* Allocate a stub method whose return type is TYPE.
273 This apparently happens for speed of symbol reading, since parsing
274 out the arguments to the method is cpu-intensive, the way we are doing
275 it. So, we will fill in arguments later.
276 This always returns a fresh type. */
277
278struct type *
279allocate_stub_method (type)
280 struct type *type;
281{
282 struct type *mtype;
283
284 mtype = alloc_type (TYPE_OBJFILE (type));
285 TYPE_TARGET_TYPE (mtype) = type;
286 /* _DOMAIN_TYPE (mtype) = unknown yet */
287 /* _ARG_TYPES (mtype) = unknown yet */
288 TYPE_FLAGS (mtype) = TYPE_FLAG_STUB;
289 TYPE_CODE (mtype) = TYPE_CODE_METHOD;
290 TYPE_LENGTH (mtype) = 1;
291 return (mtype);
292}
293
a8a69e63
FF
294/* Create a range type using either a blank type supplied in RESULT_TYPE,
295 or creating a new type. Indices will be of type INDEX_TYPE, and will
296 range from LOW_BOUND to HIGH_BOUND, inclusive.
297
298 FIXME: Maybe we should check the TYPE_CODE of RESULT_TYPE to make
299 sure it is TYPE_CODE_UNDEF before we bash it into a range type? */
300
301struct type *
302create_range_type (result_type, index_type, low_bound, high_bound)
303 struct type *result_type;
304 struct type *index_type;
305 int low_bound;
306 int high_bound;
307{
308 if (result_type == NULL)
309 {
310 result_type = alloc_type (TYPE_OBJFILE (index_type));
311 }
312 TYPE_CODE (result_type) = TYPE_CODE_RANGE;
313 TYPE_TARGET_TYPE (result_type) = index_type;
314 TYPE_LENGTH (result_type) = TYPE_LENGTH (index_type);
315 TYPE_NFIELDS (result_type) = 2;
316 TYPE_FIELDS (result_type) = (struct field *)
317 TYPE_ALLOC (result_type, 2 * sizeof (struct field));
318 memset (TYPE_FIELDS (result_type), 0, 2 * sizeof (struct field));
319 TYPE_FIELD_BITPOS (result_type, 0) = low_bound;
320 TYPE_FIELD_BITPOS (result_type, 1) = high_bound;
321 TYPE_FIELD_TYPE (result_type, 0) = builtin_type_int; /* FIXME */
322 TYPE_FIELD_TYPE (result_type, 1) = builtin_type_int; /* FIXME */
323
324 return (result_type);
325}
326
327
85f0a848
FF
328/* Create an array type using either a blank type supplied in RESULT_TYPE,
329 or creating a new type. Elements will be of type ELEMENT_TYPE, the
a8a69e63 330 indices will be of type RANGE_TYPE.
1ab3bf1b 331
85f0a848
FF
332 FIXME: Maybe we should check the TYPE_CODE of RESULT_TYPE to make
333 sure it is TYPE_CODE_UNDEF before we bash it into an array type? */
1ab3bf1b
JG
334
335struct type *
a8a69e63 336create_array_type (result_type, element_type, range_type)
85f0a848 337 struct type *result_type;
1ab3bf1b 338 struct type *element_type;
a8a69e63 339 struct type *range_type;
1ab3bf1b 340{
a8a69e63
FF
341 int low_bound;
342 int high_bound;
1ab3bf1b 343
a8a69e63
FF
344 if (TYPE_CODE (range_type) != TYPE_CODE_RANGE)
345 {
346 /* FIXME: We only handle range types at the moment. Complain and
347 create a dummy range type to use. */
348 warning ("internal error: array index type must be a range type");
349 range_type = lookup_fundamental_type (TYPE_OBJFILE (range_type),
350 FT_INTEGER);
351 range_type = create_range_type ((struct type *) NULL, range_type, 0, 0);
352 }
85f0a848
FF
353 if (result_type == NULL)
354 {
355 result_type = alloc_type (TYPE_OBJFILE (element_type));
356 }
1ab3bf1b
JG
357 TYPE_CODE (result_type) = TYPE_CODE_ARRAY;
358 TYPE_TARGET_TYPE (result_type) = element_type;
a8a69e63
FF
359 low_bound = TYPE_FIELD_BITPOS (range_type, 0);
360 high_bound = TYPE_FIELD_BITPOS (range_type, 1);
85f0a848
FF
361 TYPE_LENGTH (result_type) =
362 TYPE_LENGTH (element_type) * (high_bound - low_bound + 1);
1ab3bf1b 363 TYPE_NFIELDS (result_type) = 1;
a8a69e63
FF
364 TYPE_FIELDS (result_type) =
365 (struct field *) TYPE_ALLOC (result_type, sizeof (struct field));
85f0a848 366 memset (TYPE_FIELDS (result_type), 0, sizeof (struct field));
8050a57b 367 TYPE_FIELD_TYPE (result_type, 0) = range_type;
1ab3bf1b
JG
368 TYPE_VPTR_FIELDNO (result_type) = -1;
369
370 return (result_type);
371}
372
373
374/* Smash TYPE to be a type of members of DOMAIN with type TO_TYPE.
375 A MEMBER is a wierd thing -- it amounts to a typed offset into
376 a struct, e.g. "an int at offset 8". A MEMBER TYPE doesn't
377 include the offset (that's the value of the MEMBER itself), but does
378 include the structure type into which it points (for some reason).
379
c2e4669f 380 When "smashing" the type, we preserve the objfile that the
1ab3bf1b 381 old type pointed to, since we aren't changing where the type is actually
c2e4669f 382 allocated. */
1ab3bf1b
JG
383
384void
385smash_to_member_type (type, domain, to_type)
386 struct type *type;
387 struct type *domain;
388 struct type *to_type;
389{
390 struct objfile *objfile;
391
392 objfile = TYPE_OBJFILE (type);
393
dac9734e 394 memset ((char *) type, 0, sizeof (struct type));
1ab3bf1b
JG
395 TYPE_OBJFILE (type) = objfile;
396 TYPE_TARGET_TYPE (type) = to_type;
397 TYPE_DOMAIN_TYPE (type) = domain;
398 TYPE_LENGTH (type) = 1; /* In practice, this is never needed. */
399 TYPE_CODE (type) = TYPE_CODE_MEMBER;
400}
401
402/* Smash TYPE to be a type of method of DOMAIN with type TO_TYPE.
403 METHOD just means `function that gets an extra "this" argument'.
404
c2e4669f 405 When "smashing" the type, we preserve the objfile that the
1ab3bf1b 406 old type pointed to, since we aren't changing where the type is actually
c2e4669f 407 allocated. */
1ab3bf1b
JG
408
409void
410smash_to_method_type (type, domain, to_type, args)
411 struct type *type;
412 struct type *domain;
413 struct type *to_type;
414 struct type **args;
415{
416 struct objfile *objfile;
417
418 objfile = TYPE_OBJFILE (type);
419
dac9734e 420 memset ((char *) type, 0, sizeof (struct type));
1ab3bf1b
JG
421 TYPE_OBJFILE (type) = objfile;
422 TYPE_TARGET_TYPE (type) = to_type;
423 TYPE_DOMAIN_TYPE (type) = domain;
424 TYPE_ARG_TYPES (type) = args;
425 TYPE_LENGTH (type) = 1; /* In practice, this is never needed. */
426 TYPE_CODE (type) = TYPE_CODE_METHOD;
427}
428
429/* Return a typename for a struct/union/enum type
430 without the tag qualifier. If the type has a NULL name,
431 NULL is returned. */
432
433char *
434type_name_no_tag (type)
435 register const struct type *type;
436{
437 register char *name;
438
439 if ((name = TYPE_NAME (type)) != NULL)
440 {
441 switch (TYPE_CODE (type))
442 {
443 case TYPE_CODE_STRUCT:
444 if(!strncmp (name, "struct ", 7))
445 {
446 name += 7;
447 }
448 break;
449 case TYPE_CODE_UNION:
450 if(!strncmp (name, "union ", 6))
451 {
452 name += 6;
453 }
454 break;
455 case TYPE_CODE_ENUM:
456 if(!strncmp (name, "enum ", 5))
457 {
458 name += 5;
459 }
460 break;
ac88ca20
JG
461 default: /* To avoid -Wall warnings */
462 break;
1ab3bf1b
JG
463 }
464 }
465 return (name);
466}
467
468/* Lookup a primitive type named NAME.
469 Return zero if NAME is not a primitive type.*/
470
471struct type *
472lookup_primitive_typename (name)
473 char *name;
474{
475 struct type ** const *p;
476
477 for (p = current_language -> la_builtin_type_vector; *p != NULL; p++)
478 {
2e4964ad 479 if (STREQ ((**p) -> name, name))
1ab3bf1b
JG
480 {
481 return (**p);
482 }
483 }
484 return (NULL);
485}
486
487/* Lookup a typedef or primitive type named NAME,
488 visible in lexical block BLOCK.
489 If NOERR is nonzero, return zero if NAME is not suitably defined. */
490
491struct type *
492lookup_typename (name, block, noerr)
493 char *name;
494 struct block *block;
495 int noerr;
496{
497 register struct symbol *sym;
498 register struct type *tmp;
499
500 sym = lookup_symbol (name, block, VAR_NAMESPACE, 0, (struct symtab **) NULL);
501 if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
502 {
503 tmp = lookup_primitive_typename (name);
504 if (tmp)
505 {
506 return (tmp);
507 }
508 else if (!tmp && noerr)
509 {
510 return (NULL);
511 }
512 else
513 {
514 error ("No type named %s.", name);
515 }
516 }
517 return (SYMBOL_TYPE (sym));
518}
519
520struct type *
521lookup_unsigned_typename (name)
522 char *name;
523{
524 char *uns = alloca (strlen (name) + 10);
525
526 strcpy (uns, "unsigned ");
527 strcpy (uns + 9, name);
528 return (lookup_typename (uns, (struct block *) NULL, 0));
529}
530
a252e715
PB
531struct type *
532lookup_signed_typename (name)
533 char *name;
534{
535 struct type *t;
536 char *uns = alloca (strlen (name) + 8);
537
538 strcpy (uns, "signed ");
539 strcpy (uns + 7, name);
540 t = lookup_typename (uns, (struct block *) NULL, 1);
541 /* If we don't find "signed FOO" just try again with plain "FOO". */
542 if (t != NULL)
543 return t;
544 return lookup_typename (name, (struct block *) NULL, 0);
545}
546
1ab3bf1b
JG
547/* Lookup a structure type named "struct NAME",
548 visible in lexical block BLOCK. */
549
550struct type *
551lookup_struct (name, block)
552 char *name;
553 struct block *block;
554{
555 register struct symbol *sym;
556
557 sym = lookup_symbol (name, block, STRUCT_NAMESPACE, 0,
558 (struct symtab **) NULL);
559
560 if (sym == NULL)
561 {
562 error ("No struct type named %s.", name);
563 }
2640f7e1
JG
564 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT)
565 {
566 error ("This context has class, union or enum %s, not a struct.", name);
567 }
568 return (SYMBOL_TYPE (sym));
1ab3bf1b
JG
569}
570
571/* Lookup a union type named "union NAME",
572 visible in lexical block BLOCK. */
573
574struct type *
575lookup_union (name, block)
576 char *name;
577 struct block *block;
578{
579 register struct symbol *sym;
580
581 sym = lookup_symbol (name, block, STRUCT_NAMESPACE, 0,
582 (struct symtab **) NULL);
583
584 if (sym == NULL)
585 {
586 error ("No union type named %s.", name);
587 }
2640f7e1
JG
588 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_UNION)
589 {
590 error ("This context has class, struct or enum %s, not a union.", name);
591 }
592 return (SYMBOL_TYPE (sym));
1ab3bf1b
JG
593}
594
595/* Lookup an enum type named "enum NAME",
596 visible in lexical block BLOCK. */
597
598struct type *
599lookup_enum (name, block)
600 char *name;
601 struct block *block;
602{
603 register struct symbol *sym;
604
605 sym = lookup_symbol (name, block, STRUCT_NAMESPACE, 0,
606 (struct symtab **) NULL);
607 if (sym == NULL)
608 {
609 error ("No enum type named %s.", name);
610 }
2640f7e1
JG
611 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_ENUM)
612 {
613 error ("This context has class, struct or union %s, not an enum.", name);
614 }
615 return (SYMBOL_TYPE (sym));
1ab3bf1b
JG
616}
617
618/* Lookup a template type named "template NAME<TYPE>",
619 visible in lexical block BLOCK. */
620
621struct type *
622lookup_template_type (name, type, block)
623 char *name;
624 struct type *type;
625 struct block *block;
626{
627 struct symbol *sym;
628 char *nam = (char*) alloca(strlen(name) + strlen(type->name) + 4);
629 strcpy (nam, name);
630 strcat (nam, "<");
631 strcat (nam, type->name);
632 strcat (nam, " >"); /* FIXME, extra space still introduced in gcc? */
633
634 sym = lookup_symbol (nam, block, VAR_NAMESPACE, 0, (struct symtab **)NULL);
635
636 if (sym == NULL)
637 {
638 error ("No template type named %s.", name);
639 }
640 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT)
641 {
642 error ("This context has class, union or enum %s, not a struct.", name);
643 }
644 return (SYMBOL_TYPE (sym));
645}
646
647/* Given a type TYPE, lookup the type of the component of type named
648 NAME.
649 If NOERR is nonzero, return zero if NAME is not suitably defined. */
650
651struct type *
652lookup_struct_elt_type (type, name, noerr)
653 struct type *type;
654 char *name;
655 int noerr;
656{
657 int i;
658
5c5b5d4b
PB
659 if (TYPE_CODE (type) == TYPE_CODE_PTR ||
660 TYPE_CODE (type) == TYPE_CODE_REF)
661 type = TYPE_TARGET_TYPE (type);
662
1ab3bf1b
JG
663 if (TYPE_CODE (type) != TYPE_CODE_STRUCT &&
664 TYPE_CODE (type) != TYPE_CODE_UNION)
665 {
666 target_terminal_ours ();
667 fflush (stdout);
668 fprintf (stderr, "Type ");
669 type_print (type, "", stderr, -1);
670 error (" is not a structure or union type.");
671 }
672
673 check_stub_type (type);
674
675 for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
676 {
677 char *t_field_name = TYPE_FIELD_NAME (type, i);
678
2e4964ad 679 if (t_field_name && STREQ (t_field_name, name))
1ab3bf1b
JG
680 {
681 return TYPE_FIELD_TYPE (type, i);
682 }
683 }
684
685 /* OK, it's not in this class. Recursively check the baseclasses. */
686 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
687 {
688 struct type *t;
689
690 t = lookup_struct_elt_type (TYPE_BASECLASS (type, i), name, 0);
691 if (t != NULL)
692 {
693 return t;
694 }
695 }
696
697 if (noerr)
698 {
699 return NULL;
700 }
701
702 target_terminal_ours ();
703 fflush (stdout);
704 fprintf (stderr, "Type ");
705 type_print (type, "", stderr, -1);
706 fprintf (stderr, " has no component named ");
707 fputs_filtered (name, stderr);
708 error (".");
709 return (struct type *)-1; /* For lint */
710}
711
712/* This function is really horrible, but to avoid it, there would need
713 to be more filling in of forward references. */
714
715void
716fill_in_vptr_fieldno (type)
717 struct type *type;
718{
719 if (TYPE_VPTR_FIELDNO (type) < 0)
720 {
721 int i;
722 for (i = 1; i < TYPE_N_BASECLASSES (type); i++)
723 {
724 fill_in_vptr_fieldno (TYPE_BASECLASS (type, i));
725 if (TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, i)) >= 0)
726 {
727 TYPE_VPTR_FIELDNO (type)
728 = TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, i));
729 TYPE_VPTR_BASETYPE (type)
730 = TYPE_VPTR_BASETYPE (TYPE_BASECLASS (type, i));
731 break;
732 }
733 }
734 }
735}
736
737/* Added by Bryan Boreham, Kewill, Sun Sep 17 18:07:17 1989.
738
739 If this is a stubbed struct (i.e. declared as struct foo *), see if
740 we can find a full definition in some other file. If so, copy this
741 definition, so we can use it in future. If not, set a flag so we
742 don't waste too much time in future. (FIXME, this doesn't seem
743 to be happening...)
744
745 This used to be coded as a macro, but I don't think it is called
746 often enough to merit such treatment.
747*/
748
749struct complaint stub_noname_complaint =
750 {"stub type has NULL name", 0, 0};
751
752void
753check_stub_type (type)
754 struct type *type;
755{
756 if (TYPE_FLAGS(type) & TYPE_FLAG_STUB)
757 {
758 char* name = type_name_no_tag (type);
759 struct symbol *sym;
760 if (name == NULL)
761 {
51b80b00 762 complain (&stub_noname_complaint);
1ab3bf1b
JG
763 return;
764 }
765 sym = lookup_symbol (name, 0, STRUCT_NAMESPACE, 0,
766 (struct symtab **) NULL);
767 if (sym)
768 {
93fe4e33 769 memcpy ((char *)type, (char *)SYMBOL_TYPE(sym), sizeof (struct type));
1ab3bf1b
JG
770 }
771 }
772}
773
774/* Ugly hack to convert method stubs into method types.
775
776 He ain't kiddin'. This demangles the name of the method into a string
777 including argument types, parses out each argument type, generates
778 a string casting a zero to that type, evaluates the string, and stuffs
779 the resulting type into an argtype vector!!! Then it knows the type
780 of the whole function (including argument types for overloading),
781 which info used to be in the stab's but was removed to hack back
782 the space required for them. */
783
784void
785check_stub_method (type, i, j)
786 struct type *type;
787 int i;
788 int j;
789{
790 struct fn_field *f;
791 char *mangled_name = gdb_mangle_name (type, i, j);
8050a57b
FF
792 char *demangled_name = cplus_demangle (mangled_name,
793 DMGL_PARAMS | DMGL_ANSI);
1ab3bf1b
JG
794 char *argtypetext, *p;
795 int depth = 0, argcount = 1;
796 struct type **argtypes;
797 struct type *mtype;
798
799 if (demangled_name == NULL)
800 {
801 error ("Internal: Cannot demangle mangled name `%s'.", mangled_name);
802 }
803
804 /* Now, read in the parameters that define this type. */
805 argtypetext = strchr (demangled_name, '(') + 1;
806 p = argtypetext;
807 while (*p)
808 {
809 if (*p == '(')
810 {
811 depth += 1;
812 }
813 else if (*p == ')')
814 {
815 depth -= 1;
816 }
817 else if (*p == ',' && depth == 0)
818 {
819 argcount += 1;
820 }
821
822 p += 1;
823 }
824
825 /* We need two more slots: one for the THIS pointer, and one for the
826 NULL [...] or void [end of arglist]. */
827
828 argtypes = (struct type **)
dac9734e 829 TYPE_ALLOC (type, (argcount + 2) * sizeof (struct type *));
1ab3bf1b
JG
830 p = argtypetext;
831 argtypes[0] = lookup_pointer_type (type);
832 argcount = 1;
833
834 if (*p != ')') /* () means no args, skip while */
835 {
836 depth = 0;
837 while (*p)
838 {
839 if (depth <= 0 && (*p == ',' || *p == ')'))
840 {
841 argtypes[argcount] =
842 parse_and_eval_type (argtypetext, p - argtypetext);
843 argcount += 1;
844 argtypetext = p + 1;
845 }
846
847 if (*p == '(')
848 {
849 depth += 1;
850 }
851 else if (*p == ')')
852 {
853 depth -= 1;
854 }
855
856 p += 1;
857 }
858 }
859
c0f1085b 860 if (p[-2] != '.') /* Not '...' */
1ab3bf1b 861 {
c0f1085b 862 argtypes[argcount] = builtin_type_void; /* List terminator */
1ab3bf1b
JG
863 }
864 else
865 {
c0f1085b 866 argtypes[argcount] = NULL; /* Ellist terminator */
1ab3bf1b
JG
867 }
868
869 free (demangled_name);
870
871 f = TYPE_FN_FIELDLIST1 (type, i);
872 TYPE_FN_FIELD_PHYSNAME (f, j) = mangled_name;
873
874 /* Now update the old "stub" type into a real type. */
875 mtype = TYPE_FN_FIELD_TYPE (f, j);
876 TYPE_DOMAIN_TYPE (mtype) = type;
877 TYPE_ARG_TYPES (mtype) = argtypes;
878 TYPE_FLAGS (mtype) &= ~TYPE_FLAG_STUB;
879 TYPE_FN_FIELD_STUB (f, j) = 0;
880}
881
0213d96f 882const struct cplus_struct_type cplus_struct_default;
1ab3bf1b
JG
883
884void
885allocate_cplus_struct_type (type)
886 struct type *type;
887{
888 if (!HAVE_CPLUS_STRUCT (type))
889 {
890 TYPE_CPLUS_SPECIFIC (type) = (struct cplus_struct_type *)
dac9734e 891 TYPE_ALLOC (type, sizeof (struct cplus_struct_type));
1ab3bf1b
JG
892 *(TYPE_CPLUS_SPECIFIC(type)) = cplus_struct_default;
893 }
894}
895
50e0dc41
FF
896/* Helper function to initialize the standard scalar types.
897
898 If NAME is non-NULL and OBJFILE is non-NULL, then we make a copy
899 of the string pointed to by name in the type_obstack for that objfile,
900 and initialize the type name to that copy. There are places (mipsread.c
901 in particular, where init_type is called with a NULL value for NAME). */
1ab3bf1b
JG
902
903struct type *
904init_type (code, length, flags, name, objfile)
905 enum type_code code;
906 int length;
907 int flags;
908 char *name;
909 struct objfile *objfile;
910{
911 register struct type *type;
912
913 type = alloc_type (objfile);
914 TYPE_CODE (type) = code;
915 TYPE_LENGTH (type) = length;
916 TYPE_FLAGS (type) |= flags;
50e0dc41
FF
917 if ((name != NULL) && (objfile != NULL))
918 {
919 TYPE_NAME (type) =
920 obsavestring (name, strlen (name), &objfile -> type_obstack);
921 }
922 else
923 {
924 TYPE_NAME (type) = name;
925 }
1ab3bf1b
JG
926
927 /* C++ fancies. */
928
929 if (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
930 {
931 INIT_CPLUS_SPECIFIC (type);
932 }
933 return (type);
934}
935
936/* Look up a fundamental type for the specified objfile.
937 May need to construct such a type if this is the first use.
938
939 Some object file formats (ELF, COFF, etc) do not define fundamental
940 types such as "int" or "double". Others (stabs for example), do
941 define fundamental types.
942
943 For the formats which don't provide fundamental types, gdb can create
bf229b4e
FF
944 such types, using defaults reasonable for the current language and
945 the current target machine.
946
947 NOTE: This routine is obsolescent. Each debugging format reader
948 should manage it's own fundamental types, either creating them from
949 suitable defaults or reading them from the debugging information,
950 whichever is appropriate. The DWARF reader has already been
951 fixed to do this. Once the other readers are fixed, this routine
952 will go away. Also note that fundamental types should be managed
953 on a compilation unit basis in a multi-language environment, not
954 on a linkage unit basis as is done here. */
955
1ab3bf1b
JG
956
957struct type *
958lookup_fundamental_type (objfile, typeid)
959 struct objfile *objfile;
960 int typeid;
961{
1ab3bf1b
JG
962 register struct type **typep;
963 register int nbytes;
964
965 if (typeid < 0 || typeid >= FT_NUM_MEMBERS)
966 {
967 error ("internal error - invalid fundamental type id %d", typeid);
968 }
bf229b4e
FF
969
970 /* If this is the first time we need a fundamental type for this objfile
971 then we need to initialize the vector of type pointers. */
972
973 if (objfile -> fundamental_types == NULL)
1ab3bf1b 974 {
bf229b4e
FF
975 nbytes = FT_NUM_MEMBERS * sizeof (struct type *);
976 objfile -> fundamental_types = (struct type **)
977 obstack_alloc (&objfile -> type_obstack, nbytes);
978 memset ((char *) objfile -> fundamental_types, 0, nbytes);
1ab3bf1b 979 }
bf229b4e
FF
980
981 /* Look for this particular type in the fundamental type vector. If one is
982 not found, create and install one appropriate for the current language. */
983
984 typep = objfile -> fundamental_types + typeid;
985 if (*typep == NULL)
986 {
987 *typep = create_fundamental_type (objfile, typeid);
988 }
989
990 return (*typep);
1ab3bf1b
JG
991}
992
0239d9b3
FF
993#if MAINTENANCE_CMDS
994
8050a57b
FF
995static void
996print_bit_vector (bits, nbits)
997 B_TYPE *bits;
998 int nbits;
0239d9b3 999{
8050a57b
FF
1000 int bitno;
1001
1002 for (bitno = 0; bitno < nbits; bitno++)
0239d9b3 1003 {
8050a57b
FF
1004 if ((bitno % 8) == 0)
1005 {
1006 puts_filtered (" ");
1007 }
1008 if (B_TST (bits, bitno))
1009 {
1010 printf_filtered ("1");
1011 }
1012 else
1013 {
1014 printf_filtered ("0");
1015 }
0239d9b3 1016 }
8050a57b
FF
1017}
1018
c0f1085b
FF
1019/* The args list is a strange beast. It is either terminated by a NULL
1020 pointer for varargs functions, or by a pointer to a TYPE_CODE_VOID
1021 type for normal fixed argcount functions. (FIXME someday)
1022 Also note the first arg should be the "this" pointer, we may not want to
1023 include it since we may get into a infinitely recursive situation. */
1024
1025static void
1026print_arg_types (args, spaces)
1027 struct type **args;
1028 int spaces;
1029{
1030 if (args != NULL)
1031 {
1032 while (*args != NULL)
1033 {
1034 recursive_dump_type (*args, spaces + 2);
1035 if ((*args++) -> code == TYPE_CODE_VOID)
1036 {
1037 break;
1038 }
1039 }
1040 }
1041}
1042
1043static void
1044dump_fn_fieldlists (type, spaces)
1045 struct type *type;
1046 int spaces;
1047{
1048 int method_idx;
1049 int overload_idx;
1050 struct fn_field *f;
1051
1052 printfi_filtered (spaces, "fn_fieldlists 0x%x\n",
1053 TYPE_FN_FIELDLISTS (type));
1054 for (method_idx = 0; method_idx < TYPE_NFN_FIELDS (type); method_idx++)
1055 {
1056 f = TYPE_FN_FIELDLIST1 (type, method_idx);
1057 printfi_filtered (spaces + 2, "[%d] name '%s' (0x%x) length %d\n",
1058 method_idx,
1059 TYPE_FN_FIELDLIST_NAME (type, method_idx),
1060 TYPE_FN_FIELDLIST_NAME (type, method_idx),
1061 TYPE_FN_FIELDLIST_LENGTH (type, method_idx));
1062 for (overload_idx = 0;
1063 overload_idx < TYPE_FN_FIELDLIST_LENGTH (type, method_idx);
1064 overload_idx++)
1065 {
1066 printfi_filtered (spaces + 4, "[%d] physname '%s' (0x%x)\n",
1067 overload_idx,
1068 TYPE_FN_FIELD_PHYSNAME (f, overload_idx),
1069 TYPE_FN_FIELD_PHYSNAME (f, overload_idx));
1070 printfi_filtered (spaces + 8, "type 0x%x\n",
1071 TYPE_FN_FIELD_TYPE (f, overload_idx));
1072 recursive_dump_type (TYPE_FN_FIELD_TYPE (f, overload_idx),
1073 spaces + 8 + 2);
1074 printfi_filtered (spaces + 8, "args 0x%x\n",
1075 TYPE_FN_FIELD_ARGS (f, overload_idx));
1076 print_arg_types (TYPE_FN_FIELD_ARGS (f, overload_idx), spaces);
1077 printfi_filtered (spaces + 8, "fcontext 0x%x\n",
1078 TYPE_FN_FIELD_FCONTEXT (f, overload_idx));
1079 printfi_filtered (spaces + 8, "is_const %d\n",
1080 TYPE_FN_FIELD_CONST (f, overload_idx));
1081 printfi_filtered (spaces + 8, "is_volatile %d\n",
1082 TYPE_FN_FIELD_VOLATILE (f, overload_idx));
1083 printfi_filtered (spaces + 8, "is_private %d\n",
1084 TYPE_FN_FIELD_PRIVATE (f, overload_idx));
1085 printfi_filtered (spaces + 8, "is_protected %d\n",
1086 TYPE_FN_FIELD_PROTECTED (f, overload_idx));
1087 printfi_filtered (spaces + 8, "is_stub %d\n",
1088 TYPE_FN_FIELD_STUB (f, overload_idx));
d07734e3 1089 printfi_filtered (spaces + 8, "voffset %u\n",
c0f1085b
FF
1090 TYPE_FN_FIELD_VOFFSET (f, overload_idx));
1091 }
1092 }
1093}
1094
8050a57b
FF
1095static void
1096print_cplus_stuff (type, spaces)
1097 struct type *type;
1098 int spaces;
1099{
c0f1085b 1100 printfi_filtered (spaces, "n_baseclasses %d\n",
8050a57b 1101 TYPE_N_BASECLASSES (type));
c0f1085b
FF
1102 printfi_filtered (spaces, "nfn_fields %d\n",
1103 TYPE_NFN_FIELDS (type));
1104 printfi_filtered (spaces, "nfn_fields_total %d\n",
1105 TYPE_NFN_FIELDS_TOTAL (type));
8050a57b 1106 if (TYPE_N_BASECLASSES (type) > 0)
0239d9b3 1107 {
d07734e3 1108 printfi_filtered (spaces, "virtual_field_bits (%d bits at *0x%x)",
8050a57b
FF
1109 TYPE_N_BASECLASSES (type),
1110 TYPE_FIELD_VIRTUAL_BITS (type));
1111 print_bit_vector (TYPE_FIELD_VIRTUAL_BITS (type),
1112 TYPE_N_BASECLASSES (type));
1113 puts_filtered ("\n");
0239d9b3 1114 }
8050a57b 1115 if (TYPE_NFIELDS (type) > 0)
0239d9b3 1116 {
8050a57b
FF
1117 if (TYPE_FIELD_PRIVATE_BITS (type) != NULL)
1118 {
d07734e3 1119 printfi_filtered (spaces, "private_field_bits (%d bits at *0x%x)",
8050a57b
FF
1120 TYPE_NFIELDS (type),
1121 TYPE_FIELD_PRIVATE_BITS (type));
1122 print_bit_vector (TYPE_FIELD_PRIVATE_BITS (type),
1123 TYPE_NFIELDS (type));
1124 puts_filtered ("\n");
1125 }
1126 if (TYPE_FIELD_PROTECTED_BITS (type) != NULL)
0239d9b3 1127 {
d07734e3 1128 printfi_filtered (spaces, "protected_field_bits (%d bits at *0x%x)",
8050a57b
FF
1129 TYPE_NFIELDS (type),
1130 TYPE_FIELD_PROTECTED_BITS (type));
1131 print_bit_vector (TYPE_FIELD_PROTECTED_BITS (type),
1132 TYPE_NFIELDS (type));
1133 puts_filtered ("\n");
0239d9b3
FF
1134 }
1135 }
c0f1085b
FF
1136 if (TYPE_NFN_FIELDS (type) > 0)
1137 {
1138 dump_fn_fieldlists (type, spaces);
1139 }
8050a57b
FF
1140}
1141
1142void
1143recursive_dump_type (type, spaces)
1144 struct type *type;
1145 int spaces;
1146{
1147 int idx;
0239d9b3 1148
c0f1085b
FF
1149 printfi_filtered (spaces, "type node 0x%x\n", type);
1150 printfi_filtered (spaces, "name '%s' (0x%x)\n", TYPE_NAME (type),
8050a57b 1151 TYPE_NAME (type) ? TYPE_NAME (type) : "<NULL>");
c0f1085b 1152 printfi_filtered (spaces, "code 0x%x ", TYPE_CODE (type));
8050a57b 1153 switch (TYPE_CODE (type))
0239d9b3 1154 {
8050a57b 1155 case TYPE_CODE_UNDEF:
c0f1085b 1156 printf_filtered ("(TYPE_CODE_UNDEF)");
8050a57b
FF
1157 break;
1158 case TYPE_CODE_PTR:
c0f1085b 1159 printf_filtered ("(TYPE_CODE_PTR)");
8050a57b
FF
1160 break;
1161 case TYPE_CODE_ARRAY:
c0f1085b 1162 printf_filtered ("(TYPE_CODE_ARRAY)");
8050a57b
FF
1163 break;
1164 case TYPE_CODE_STRUCT:
c0f1085b 1165 printf_filtered ("(TYPE_CODE_STRUCT)");
8050a57b
FF
1166 break;
1167 case TYPE_CODE_UNION:
c0f1085b 1168 printf_filtered ("(TYPE_CODE_UNION)");
8050a57b
FF
1169 break;
1170 case TYPE_CODE_ENUM:
c0f1085b 1171 printf_filtered ("(TYPE_CODE_ENUM)");
8050a57b
FF
1172 break;
1173 case TYPE_CODE_FUNC:
c0f1085b 1174 printf_filtered ("(TYPE_CODE_FUNC)");
8050a57b
FF
1175 break;
1176 case TYPE_CODE_INT:
c0f1085b 1177 printf_filtered ("(TYPE_CODE_INT)");
8050a57b
FF
1178 break;
1179 case TYPE_CODE_FLT:
c0f1085b 1180 printf_filtered ("(TYPE_CODE_FLT)");
8050a57b
FF
1181 break;
1182 case TYPE_CODE_VOID:
c0f1085b 1183 printf_filtered ("(TYPE_CODE_VOID)");
8050a57b
FF
1184 break;
1185 case TYPE_CODE_SET:
c0f1085b 1186 printf_filtered ("(TYPE_CODE_SET)");
8050a57b
FF
1187 break;
1188 case TYPE_CODE_RANGE:
c0f1085b 1189 printf_filtered ("(TYPE_CODE_RANGE)");
8050a57b
FF
1190 break;
1191 case TYPE_CODE_PASCAL_ARRAY:
c0f1085b 1192 printf_filtered ("(TYPE_CODE_PASCAL_ARRAY)");
8050a57b
FF
1193 break;
1194 case TYPE_CODE_ERROR:
c0f1085b 1195 printf_filtered ("(TYPE_CODE_ERROR)");
8050a57b
FF
1196 break;
1197 case TYPE_CODE_MEMBER:
c0f1085b 1198 printf_filtered ("(TYPE_CODE_MEMBER)");
8050a57b
FF
1199 break;
1200 case TYPE_CODE_METHOD:
c0f1085b 1201 printf_filtered ("(TYPE_CODE_METHOD)");
8050a57b
FF
1202 break;
1203 case TYPE_CODE_REF:
c0f1085b 1204 printf_filtered ("(TYPE_CODE_REF)");
8050a57b
FF
1205 break;
1206 case TYPE_CODE_CHAR:
c0f1085b 1207 printf_filtered ("(TYPE_CODE_CHAR)");
8050a57b
FF
1208 break;
1209 case TYPE_CODE_BOOL:
c0f1085b 1210 printf_filtered ("(TYPE_CODE_BOOL)");
8050a57b
FF
1211 break;
1212 default:
c0f1085b 1213 printf_filtered ("(UNKNOWN TYPE CODE)");
8050a57b 1214 break;
0239d9b3 1215 }
8050a57b 1216 puts_filtered ("\n");
c0f1085b
FF
1217 printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
1218 printfi_filtered (spaces, "objfile 0x%x\n", TYPE_OBJFILE (type));
1219 printfi_filtered (spaces, "target_type 0x%x\n", TYPE_TARGET_TYPE (type));
8050a57b
FF
1220 if (TYPE_TARGET_TYPE (type) != NULL)
1221 {
1222 recursive_dump_type (TYPE_TARGET_TYPE (type), spaces + 2);
1223 }
c0f1085b 1224 printfi_filtered (spaces, "pointer_type 0x%x\n",
8050a57b 1225 TYPE_POINTER_TYPE (type));
c0f1085b 1226 printfi_filtered (spaces, "reference_type 0x%x\n",
8050a57b 1227 TYPE_REFERENCE_TYPE (type));
c0f1085b 1228 printfi_filtered (spaces, "function_type 0x%x\n",
8050a57b 1229 TYPE_FUNCTION_TYPE (type));
c0f1085b 1230 printfi_filtered (spaces, "flags 0x%x", TYPE_FLAGS (type));
8050a57b
FF
1231 if (TYPE_FLAGS (type) & TYPE_FLAG_UNSIGNED)
1232 {
1233 puts_filtered (" TYPE_FLAG_UNSIGNED");
1234 }
1235 if (TYPE_FLAGS (type) & TYPE_FLAG_SIGNED)
1236 {
1237 puts_filtered (" TYPE_FLAG_SIGNED");
1238 }
1239 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
1240 {
1241 puts_filtered (" TYPE_FLAG_STUB");
1242 }
1243 puts_filtered ("\n");
c0f1085b 1244 printfi_filtered (spaces, "nfields %d 0x%x\n", TYPE_NFIELDS (type),
8050a57b
FF
1245 TYPE_FIELDS (type));
1246 for (idx = 0; idx < TYPE_NFIELDS (type); idx++)
1247 {
1248 printfi_filtered (spaces + 2,
c0f1085b 1249 "[%d] bitpos %d bitsize %d type 0x%x name '%s' (0x%x)\n",
8050a57b
FF
1250 idx, TYPE_FIELD_BITPOS (type, idx),
1251 TYPE_FIELD_BITSIZE (type, idx),
1252 TYPE_FIELD_TYPE (type, idx),
1253 TYPE_FIELD_NAME (type, idx),
1254 TYPE_FIELD_NAME (type, idx) != NULL
1255 ? TYPE_FIELD_NAME (type, idx)
1256 : "<NULL>");
1257 if (TYPE_FIELD_TYPE (type, idx) != NULL)
1258 {
1259 recursive_dump_type (TYPE_FIELD_TYPE (type, idx), spaces + 4);
1260 }
1261 }
c0f1085b 1262 printfi_filtered (spaces, "vptr_basetype 0x%x\n",
8050a57b
FF
1263 TYPE_VPTR_BASETYPE (type));
1264 if (TYPE_VPTR_BASETYPE (type) != NULL)
1265 {
1266 recursive_dump_type (TYPE_VPTR_BASETYPE (type), spaces + 2);
1267 }
c0f1085b 1268 printfi_filtered (spaces, "vptr_fieldno %d\n", TYPE_VPTR_FIELDNO (type));
8050a57b 1269 switch (TYPE_CODE (type))
0239d9b3
FF
1270 {
1271 case TYPE_CODE_METHOD:
1272 case TYPE_CODE_FUNC:
c0f1085b
FF
1273 printfi_filtered (spaces, "arg_types 0x%x\n", TYPE_ARG_TYPES (type));
1274 print_arg_types (TYPE_ARG_TYPES (type), spaces);
0239d9b3
FF
1275 break;
1276
1277 case TYPE_CODE_STRUCT:
d07734e3
FF
1278 printfi_filtered (spaces, "cplus_stuff 0x%x\n",
1279 TYPE_CPLUS_SPECIFIC (type));
8050a57b 1280 print_cplus_stuff (type, spaces);
0239d9b3 1281 break;
d07734e3
FF
1282
1283 default:
1284 /* We have to pick one of the union types to be able print and test
1285 the value. Pick cplus_struct_type, even though we know it isn't
1286 any particular one. */
1287 printfi_filtered (spaces, "type_specific 0x%x",
1288 TYPE_CPLUS_SPECIFIC (type));
1289 if (TYPE_CPLUS_SPECIFIC (type) != NULL)
1290 {
1291 printf_filtered (" (unknown data form)");
1292 }
1293 printf_filtered ("\n");
1294 break;
1295
0239d9b3
FF
1296 }
1297}
1298
1299#endif /* MAINTENANCE_CMDS */
This page took 0.106419 seconds and 4 git commands to generate.