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