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