Add $_memeq, $_regex, $_streq, $_strlen convenience functions.
[binutils-gdb.git] / gdb / python / py-type.c
1 /* Python interface to types.
2
3 Copyright (C) 2008-2012 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "value.h"
22 #include "exceptions.h"
23 #include "python-internal.h"
24 #include "charset.h"
25 #include "gdbtypes.h"
26 #include "cp-support.h"
27 #include "demangle.h"
28 #include "objfiles.h"
29 #include "language.h"
30 #include "vec.h"
31 #include "bcache.h"
32 #include "dwarf2loc.h"
33
34 typedef struct pyty_type_object
35 {
36 PyObject_HEAD
37 struct type *type;
38
39 /* If a Type object is associated with an objfile, it is kept on a
40 doubly-linked list, rooted in the objfile. This lets us copy the
41 underlying struct type when the objfile is deleted. */
42 struct pyty_type_object *prev;
43 struct pyty_type_object *next;
44 } type_object;
45
46 static PyTypeObject type_object_type;
47
48 /* A Field object. */
49 typedef struct pyty_field_object
50 {
51 PyObject_HEAD
52
53 /* Dictionary holding our attributes. */
54 PyObject *dict;
55 } field_object;
56
57 static PyTypeObject field_object_type;
58
59 /* A type iterator object. */
60 typedef struct {
61 PyObject_HEAD
62 /* The current field index. */
63 int field;
64 /* What to return. */
65 enum gdbpy_iter_kind kind;
66 /* Pointer back to the original source type object. */
67 struct pyty_type_object *source;
68 } typy_iterator_object;
69
70 static PyTypeObject type_iterator_object_type;
71
72 /* This is used to initialize various gdb.TYPE_ constants. */
73 struct pyty_code
74 {
75 /* The code. */
76 enum type_code code;
77 /* The name. */
78 const char *name;
79 };
80
81 /* Forward declarations. */
82 static PyObject *typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind);
83
84 #define ENTRY(X) { X, #X }
85
86 static struct pyty_code pyty_codes[] =
87 {
88 ENTRY (TYPE_CODE_PTR),
89 ENTRY (TYPE_CODE_ARRAY),
90 ENTRY (TYPE_CODE_STRUCT),
91 ENTRY (TYPE_CODE_UNION),
92 ENTRY (TYPE_CODE_ENUM),
93 ENTRY (TYPE_CODE_FLAGS),
94 ENTRY (TYPE_CODE_FUNC),
95 ENTRY (TYPE_CODE_INT),
96 ENTRY (TYPE_CODE_FLT),
97 ENTRY (TYPE_CODE_VOID),
98 ENTRY (TYPE_CODE_SET),
99 ENTRY (TYPE_CODE_RANGE),
100 ENTRY (TYPE_CODE_STRING),
101 ENTRY (TYPE_CODE_BITSTRING),
102 ENTRY (TYPE_CODE_ERROR),
103 ENTRY (TYPE_CODE_METHOD),
104 ENTRY (TYPE_CODE_METHODPTR),
105 ENTRY (TYPE_CODE_MEMBERPTR),
106 ENTRY (TYPE_CODE_REF),
107 ENTRY (TYPE_CODE_CHAR),
108 ENTRY (TYPE_CODE_BOOL),
109 ENTRY (TYPE_CODE_COMPLEX),
110 ENTRY (TYPE_CODE_TYPEDEF),
111 ENTRY (TYPE_CODE_NAMESPACE),
112 ENTRY (TYPE_CODE_DECFLOAT),
113 ENTRY (TYPE_CODE_INTERNAL_FUNCTION),
114 { TYPE_CODE_UNDEF, NULL }
115 };
116
117 \f
118
119 static void
120 field_dealloc (PyObject *obj)
121 {
122 field_object *f = (field_object *) obj;
123
124 Py_XDECREF (f->dict);
125 f->ob_type->tp_free (obj);
126 }
127
128 static PyObject *
129 field_new (void)
130 {
131 field_object *result = PyObject_New (field_object, &field_object_type);
132
133 if (result)
134 {
135 result->dict = PyDict_New ();
136 if (!result->dict)
137 {
138 Py_DECREF (result);
139 result = NULL;
140 }
141 }
142 return (PyObject *) result;
143 }
144
145 \f
146
147 /* Return the code for this type. */
148 static PyObject *
149 typy_get_code (PyObject *self, void *closure)
150 {
151 struct type *type = ((type_object *) self)->type;
152
153 return PyInt_FromLong (TYPE_CODE (type));
154 }
155
156 /* Helper function for typy_fields which converts a single field to a
157 gdb.Field object. Returns NULL on error. */
158
159 static PyObject *
160 convert_field (struct type *type, int field)
161 {
162 PyObject *result = field_new ();
163 PyObject *arg;
164
165 if (!result)
166 return NULL;
167
168 if (!field_is_static (&TYPE_FIELD (type, field)))
169 {
170 const char *attrstring;
171
172 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
173 {
174 arg = gdb_py_long_from_longest (TYPE_FIELD_ENUMVAL (type, field));
175 attrstring = "enumval";
176 }
177 else
178 {
179 arg = gdb_py_long_from_longest (TYPE_FIELD_BITPOS (type, field));
180 attrstring = "bitpos";
181 }
182
183 if (!arg)
184 goto fail;
185
186 /* At least python-2.4 had the second parameter non-const. */
187 if (PyObject_SetAttrString (result, (char *) attrstring, arg) < 0)
188 goto failarg;
189 }
190
191 if (TYPE_FIELD_NAME (type, field))
192 arg = PyString_FromString (TYPE_FIELD_NAME (type, field));
193 else
194 {
195 arg = Py_None;
196 Py_INCREF (arg);
197 }
198 if (!arg)
199 goto fail;
200 if (PyObject_SetAttrString (result, "name", arg) < 0)
201 goto failarg;
202
203 arg = TYPE_FIELD_ARTIFICIAL (type, field) ? Py_True : Py_False;
204 Py_INCREF (arg);
205 if (PyObject_SetAttrString (result, "artificial", arg) < 0)
206 goto failarg;
207
208 if (TYPE_CODE (type) == TYPE_CODE_CLASS)
209 arg = field < TYPE_N_BASECLASSES (type) ? Py_True : Py_False;
210 else
211 arg = Py_False;
212 Py_INCREF (arg);
213 if (PyObject_SetAttrString (result, "is_base_class", arg) < 0)
214 goto failarg;
215
216 arg = PyLong_FromLong (TYPE_FIELD_BITSIZE (type, field));
217 if (!arg)
218 goto fail;
219 if (PyObject_SetAttrString (result, "bitsize", arg) < 0)
220 goto failarg;
221
222 /* A field can have a NULL type in some situations. */
223 if (TYPE_FIELD_TYPE (type, field) == NULL)
224 {
225 arg = Py_None;
226 Py_INCREF (arg);
227 }
228 else
229 arg = type_to_type_object (TYPE_FIELD_TYPE (type, field));
230 if (!arg)
231 goto fail;
232 if (PyObject_SetAttrString (result, "type", arg) < 0)
233 goto failarg;
234
235 return result;
236
237 failarg:
238 Py_DECREF (arg);
239 fail:
240 Py_DECREF (result);
241 return NULL;
242 }
243
244 /* Helper function to return the name of a field, as a gdb.Field object.
245 If the field doesn't have a name, None is returned. */
246
247 static PyObject *
248 field_name (struct type *type, int field)
249 {
250 PyObject *result;
251
252 if (TYPE_FIELD_NAME (type, field))
253 result = PyString_FromString (TYPE_FIELD_NAME (type, field));
254 else
255 {
256 result = Py_None;
257 Py_INCREF (result);
258 }
259 return result;
260 }
261
262 /* Helper function for Type standard mapping methods. Returns a
263 Python object for field i of the type. "kind" specifies what to
264 return: the name of the field, a gdb.Field object corresponding to
265 the field, or a tuple consisting of field name and gdb.Field
266 object. */
267
268 static PyObject *
269 make_fielditem (struct type *type, int i, enum gdbpy_iter_kind kind)
270 {
271 PyObject *item = NULL, *key = NULL, *value = NULL;
272
273 switch (kind)
274 {
275 case iter_items:
276 key = field_name (type, i);
277 if (key == NULL)
278 goto fail;
279 value = convert_field (type, i);
280 if (value == NULL)
281 goto fail;
282 item = PyTuple_New (2);
283 if (item == NULL)
284 goto fail;
285 PyTuple_SET_ITEM (item, 0, key);
286 PyTuple_SET_ITEM (item, 1, value);
287 break;
288 case iter_keys:
289 item = field_name (type, i);
290 break;
291 case iter_values:
292 item = convert_field (type, i);
293 break;
294 }
295 return item;
296
297 fail:
298 Py_XDECREF (key);
299 Py_XDECREF (value);
300 Py_XDECREF (item);
301 return NULL;
302 }
303
304 /* Return a sequence of all field names, fields, or (name, field) pairs.
305 Each field is a gdb.Field object. */
306
307 static PyObject *
308 typy_fields_items (PyObject *self, enum gdbpy_iter_kind kind)
309 {
310 PyObject *py_type = self;
311 PyObject *result = NULL, *iter = NULL;
312 volatile struct gdb_exception except;
313 struct type *type = ((type_object *) py_type)->type;
314 struct type *checked_type = type;
315
316 TRY_CATCH (except, RETURN_MASK_ALL)
317 {
318 CHECK_TYPEDEF (checked_type);
319 }
320 GDB_PY_HANDLE_EXCEPTION (except);
321
322 if (checked_type != type)
323 py_type = type_to_type_object (checked_type);
324 iter = typy_make_iter (py_type, kind);
325 if (checked_type != type)
326 {
327 /* Need to wrap this in braces because Py_DECREF isn't wrapped
328 in a do{}while(0). */
329 Py_DECREF (py_type);
330 }
331 if (iter != NULL)
332 {
333 result = PySequence_List (iter);
334 Py_DECREF (iter);
335 }
336
337 return result;
338 }
339
340 /* Return a sequence of all fields. Each field is a gdb.Field object. */
341
342 static PyObject *
343 typy_values (PyObject *self, PyObject *args)
344 {
345 return typy_fields_items (self, iter_values);
346 }
347
348 /* Return a sequence of all fields. Each field is a gdb.Field object.
349 This method is similar to typy_values, except where the supplied
350 gdb.Type is an array, in which case it returns a list of one entry
351 which is a gdb.Field object for a range (the array bounds). */
352
353 static PyObject *
354 typy_fields (PyObject *self, PyObject *args)
355 {
356 struct type *type = ((type_object *) self)->type;
357 PyObject *r, *rl;
358
359 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
360 return typy_fields_items (self, iter_values);
361
362 /* Array type. Handle this as a special case because the common
363 machinery wants struct or union or enum types. Build a list of
364 one entry which is the range for the array. */
365 r = convert_field (type, 0);
366 if (r == NULL)
367 return NULL;
368
369 rl = Py_BuildValue ("[O]", r);
370 if (rl == NULL)
371 {
372 Py_DECREF (r);
373 }
374
375 return rl;
376 }
377
378 /* Return a sequence of all field names. Each field is a gdb.Field object. */
379
380 static PyObject *
381 typy_field_names (PyObject *self, PyObject *args)
382 {
383 return typy_fields_items (self, iter_keys);
384 }
385
386 /* Return a sequence of all (name, fields) pairs. Each field is a
387 gdb.Field object. */
388
389 static PyObject *
390 typy_items (PyObject *self, PyObject *args)
391 {
392 return typy_fields_items (self, iter_items);
393 }
394
395 /* Return the type's tag, or None. */
396 static PyObject *
397 typy_get_tag (PyObject *self, void *closure)
398 {
399 struct type *type = ((type_object *) self)->type;
400
401 if (!TYPE_TAG_NAME (type))
402 Py_RETURN_NONE;
403 return PyString_FromString (TYPE_TAG_NAME (type));
404 }
405
406 /* Return the type, stripped of typedefs. */
407 static PyObject *
408 typy_strip_typedefs (PyObject *self, PyObject *args)
409 {
410 struct type *type = ((type_object *) self)->type;
411 volatile struct gdb_exception except;
412
413 TRY_CATCH (except, RETURN_MASK_ALL)
414 {
415 type = check_typedef (type);
416 }
417 GDB_PY_HANDLE_EXCEPTION (except);
418
419 return type_to_type_object (check_typedef (type));
420 }
421
422 /* Strip typedefs and pointers/reference from a type. Then check that
423 it is a struct, union, or enum type. If not, raise TypeError. */
424
425 static struct type *
426 typy_get_composite (struct type *type)
427 {
428 volatile struct gdb_exception except;
429
430 for (;;)
431 {
432 TRY_CATCH (except, RETURN_MASK_ALL)
433 {
434 CHECK_TYPEDEF (type);
435 }
436 /* Don't use GDB_PY_HANDLE_EXCEPTION here because that returns
437 a (NULL) pointer of the wrong type. */
438 if (except.reason < 0)
439 {
440 gdbpy_convert_exception (except);
441 return NULL;
442 }
443
444 if (TYPE_CODE (type) != TYPE_CODE_PTR
445 && TYPE_CODE (type) != TYPE_CODE_REF)
446 break;
447 type = TYPE_TARGET_TYPE (type);
448 }
449
450 /* If this is not a struct, union, or enum type, raise TypeError
451 exception. */
452 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
453 && TYPE_CODE (type) != TYPE_CODE_UNION
454 && TYPE_CODE (type) != TYPE_CODE_ENUM)
455 {
456 PyErr_SetString (PyExc_TypeError,
457 "Type is not a structure, union, or enum type.");
458 return NULL;
459 }
460
461 return type;
462 }
463
464 /* Helper for typy_array and typy_vector. */
465
466 static PyObject *
467 typy_array_1 (PyObject *self, PyObject *args, int is_vector)
468 {
469 long n1, n2;
470 PyObject *n2_obj = NULL;
471 struct type *array = NULL;
472 struct type *type = ((type_object *) self)->type;
473 volatile struct gdb_exception except;
474
475 if (! PyArg_ParseTuple (args, "l|O", &n1, &n2_obj))
476 return NULL;
477
478 if (n2_obj)
479 {
480 if (!PyInt_Check (n2_obj))
481 {
482 PyErr_SetString (PyExc_RuntimeError,
483 _("Array bound must be an integer"));
484 return NULL;
485 }
486
487 if (! gdb_py_int_as_long (n2_obj, &n2))
488 return NULL;
489 }
490 else
491 {
492 n2 = n1;
493 n1 = 0;
494 }
495
496 if (n2 < n1)
497 {
498 PyErr_SetString (PyExc_ValueError,
499 _("Array length must not be negative"));
500 return NULL;
501 }
502
503 TRY_CATCH (except, RETURN_MASK_ALL)
504 {
505 array = lookup_array_range_type (type, n1, n2);
506 if (is_vector)
507 make_vector_type (array);
508 }
509 GDB_PY_HANDLE_EXCEPTION (except);
510
511 return type_to_type_object (array);
512 }
513
514 /* Return an array type. */
515
516 static PyObject *
517 typy_array (PyObject *self, PyObject *args)
518 {
519 return typy_array_1 (self, args, 0);
520 }
521
522 /* Return a vector type. */
523
524 static PyObject *
525 typy_vector (PyObject *self, PyObject *args)
526 {
527 return typy_array_1 (self, args, 1);
528 }
529
530 /* Return a Type object which represents a pointer to SELF. */
531 static PyObject *
532 typy_pointer (PyObject *self, PyObject *args)
533 {
534 struct type *type = ((type_object *) self)->type;
535 volatile struct gdb_exception except;
536
537 TRY_CATCH (except, RETURN_MASK_ALL)
538 {
539 type = lookup_pointer_type (type);
540 }
541 GDB_PY_HANDLE_EXCEPTION (except);
542
543 return type_to_type_object (type);
544 }
545
546 /* Return the range of a type represented by SELF. The return type is
547 a tuple. The first element of the tuple contains the low bound,
548 while the second element of the tuple contains the high bound. */
549 static PyObject *
550 typy_range (PyObject *self, PyObject *args)
551 {
552 struct type *type = ((type_object *) self)->type;
553 PyObject *result;
554 PyObject *low_bound = NULL, *high_bound = NULL;
555 /* Initialize these to appease GCC warnings. */
556 LONGEST low = 0, high = 0;
557
558 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
559 && TYPE_CODE (type) != TYPE_CODE_STRING
560 && TYPE_CODE (type) != TYPE_CODE_RANGE)
561 {
562 PyErr_SetString (PyExc_RuntimeError,
563 _("This type does not have a range."));
564 return NULL;
565 }
566
567 switch (TYPE_CODE (type))
568 {
569 case TYPE_CODE_ARRAY:
570 case TYPE_CODE_STRING:
571 low = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
572 high = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (type));
573 break;
574 case TYPE_CODE_RANGE:
575 low = TYPE_LOW_BOUND (type);
576 high = TYPE_HIGH_BOUND (type);
577 break;
578 }
579
580 low_bound = PyLong_FromLong (low);
581 if (!low_bound)
582 goto failarg;
583
584 high_bound = PyLong_FromLong (high);
585 if (!high_bound)
586 goto failarg;
587
588 result = PyTuple_New (2);
589 if (!result)
590 goto failarg;
591
592 if (PyTuple_SetItem (result, 0, low_bound) != 0)
593 {
594 Py_DECREF (result);
595 goto failarg;
596 }
597 if (PyTuple_SetItem (result, 1, high_bound) != 0)
598 {
599 Py_DECREF (high_bound);
600 Py_DECREF (result);
601 return NULL;
602 }
603 return result;
604
605 failarg:
606 Py_XDECREF (high_bound);
607 Py_XDECREF (low_bound);
608 return NULL;
609 }
610
611 /* Return a Type object which represents a reference to SELF. */
612 static PyObject *
613 typy_reference (PyObject *self, PyObject *args)
614 {
615 struct type *type = ((type_object *) self)->type;
616 volatile struct gdb_exception except;
617
618 TRY_CATCH (except, RETURN_MASK_ALL)
619 {
620 type = lookup_reference_type (type);
621 }
622 GDB_PY_HANDLE_EXCEPTION (except);
623
624 return type_to_type_object (type);
625 }
626
627 /* Return a Type object which represents the target type of SELF. */
628 static PyObject *
629 typy_target (PyObject *self, PyObject *args)
630 {
631 struct type *type = ((type_object *) self)->type;
632
633 if (!TYPE_TARGET_TYPE (type))
634 {
635 PyErr_SetString (PyExc_RuntimeError,
636 _("Type does not have a target."));
637 return NULL;
638 }
639
640 return type_to_type_object (TYPE_TARGET_TYPE (type));
641 }
642
643 /* Return a const-qualified type variant. */
644 static PyObject *
645 typy_const (PyObject *self, PyObject *args)
646 {
647 struct type *type = ((type_object *) self)->type;
648 volatile struct gdb_exception except;
649
650 TRY_CATCH (except, RETURN_MASK_ALL)
651 {
652 type = make_cv_type (1, 0, type, NULL);
653 }
654 GDB_PY_HANDLE_EXCEPTION (except);
655
656 return type_to_type_object (type);
657 }
658
659 /* Return a volatile-qualified type variant. */
660 static PyObject *
661 typy_volatile (PyObject *self, PyObject *args)
662 {
663 struct type *type = ((type_object *) self)->type;
664 volatile struct gdb_exception except;
665
666 TRY_CATCH (except, RETURN_MASK_ALL)
667 {
668 type = make_cv_type (0, 1, type, NULL);
669 }
670 GDB_PY_HANDLE_EXCEPTION (except);
671
672 return type_to_type_object (type);
673 }
674
675 /* Return an unqualified type variant. */
676 static PyObject *
677 typy_unqualified (PyObject *self, PyObject *args)
678 {
679 struct type *type = ((type_object *) self)->type;
680 volatile struct gdb_exception except;
681
682 TRY_CATCH (except, RETURN_MASK_ALL)
683 {
684 type = make_cv_type (0, 0, type, NULL);
685 }
686 GDB_PY_HANDLE_EXCEPTION (except);
687
688 return type_to_type_object (type);
689 }
690
691 /* Return the size of the type represented by SELF, in bytes. */
692 static PyObject *
693 typy_get_sizeof (PyObject *self, void *closure)
694 {
695 struct type *type = ((type_object *) self)->type;
696 volatile struct gdb_exception except;
697
698 TRY_CATCH (except, RETURN_MASK_ALL)
699 {
700 check_typedef (type);
701 }
702 /* Ignore exceptions. */
703
704 return gdb_py_long_from_longest (TYPE_LENGTH (type));
705 }
706
707 static struct type *
708 typy_lookup_typename (const char *type_name, const struct block *block)
709 {
710 struct type *type = NULL;
711 volatile struct gdb_exception except;
712
713 TRY_CATCH (except, RETURN_MASK_ALL)
714 {
715 if (!strncmp (type_name, "struct ", 7))
716 type = lookup_struct (type_name + 7, NULL);
717 else if (!strncmp (type_name, "union ", 6))
718 type = lookup_union (type_name + 6, NULL);
719 else if (!strncmp (type_name, "enum ", 5))
720 type = lookup_enum (type_name + 5, NULL);
721 else
722 type = lookup_typename (python_language, python_gdbarch,
723 type_name, block, 0);
724 }
725 if (except.reason < 0)
726 {
727 gdbpy_convert_exception (except);
728 return NULL;
729 }
730
731 return type;
732 }
733
734 static struct type *
735 typy_lookup_type (struct demangle_component *demangled,
736 const struct block *block)
737 {
738 struct type *type, *rtype = NULL;
739 char *type_name = NULL;
740 enum demangle_component_type demangled_type;
741 volatile struct gdb_exception except;
742
743 /* Save the type: typy_lookup_type() may (indirectly) overwrite
744 memory pointed by demangled. */
745 demangled_type = demangled->type;
746
747 if (demangled_type == DEMANGLE_COMPONENT_POINTER
748 || demangled_type == DEMANGLE_COMPONENT_REFERENCE
749 || demangled_type == DEMANGLE_COMPONENT_CONST
750 || demangled_type == DEMANGLE_COMPONENT_VOLATILE)
751 {
752 type = typy_lookup_type (demangled->u.s_binary.left, block);
753 if (! type)
754 return NULL;
755
756 TRY_CATCH (except, RETURN_MASK_ALL)
757 {
758 /* If the demangled_type matches with one of the types
759 below, run the corresponding function and save the type
760 to return later. We cannot just return here as we are in
761 an exception handler. */
762 switch (demangled_type)
763 {
764 case DEMANGLE_COMPONENT_REFERENCE:
765 rtype = lookup_reference_type (type);
766 break;
767 case DEMANGLE_COMPONENT_POINTER:
768 rtype = lookup_pointer_type (type);
769 break;
770 case DEMANGLE_COMPONENT_CONST:
771 rtype = make_cv_type (1, 0, type, NULL);
772 break;
773 case DEMANGLE_COMPONENT_VOLATILE:
774 rtype = make_cv_type (0, 1, type, NULL);
775 break;
776 }
777 }
778 if (except.reason < 0)
779 {
780 gdbpy_convert_exception (except);
781 return NULL;
782 }
783 }
784
785 /* If we have a type from the switch statement above, just return
786 that. */
787 if (rtype)
788 return rtype;
789
790 /* We don't have a type, so lookup the type. */
791 type_name = cp_comp_to_string (demangled, 10);
792 type = typy_lookup_typename (type_name, block);
793 xfree (type_name);
794
795 return type;
796 }
797
798 /* This is a helper function for typy_template_argument that is used
799 when the type does not have template symbols attached. It works by
800 parsing the type name. This happens with compilers, like older
801 versions of GCC, that do not emit DW_TAG_template_*. */
802
803 static PyObject *
804 typy_legacy_template_argument (struct type *type, const struct block *block,
805 int argno)
806 {
807 int i;
808 struct demangle_component *demangled;
809 struct demangle_parse_info *info = NULL;
810 const char *err;
811 struct type *argtype;
812 struct cleanup *cleanup;
813 volatile struct gdb_exception except;
814
815 if (TYPE_NAME (type) == NULL)
816 {
817 PyErr_SetString (PyExc_RuntimeError, _("Null type name."));
818 return NULL;
819 }
820
821 TRY_CATCH (except, RETURN_MASK_ALL)
822 {
823 /* Note -- this is not thread-safe. */
824 info = cp_demangled_name_to_comp (TYPE_NAME (type), &err);
825 }
826 GDB_PY_HANDLE_EXCEPTION (except);
827
828 if (! info)
829 {
830 PyErr_SetString (PyExc_RuntimeError, err);
831 return NULL;
832 }
833 demangled = info->tree;
834 cleanup = make_cleanup_cp_demangled_name_parse_free (info);
835
836 /* Strip off component names. */
837 while (demangled->type == DEMANGLE_COMPONENT_QUAL_NAME
838 || demangled->type == DEMANGLE_COMPONENT_LOCAL_NAME)
839 demangled = demangled->u.s_binary.right;
840
841 if (demangled->type != DEMANGLE_COMPONENT_TEMPLATE)
842 {
843 do_cleanups (cleanup);
844 PyErr_SetString (PyExc_RuntimeError, _("Type is not a template."));
845 return NULL;
846 }
847
848 /* Skip from the template to the arguments. */
849 demangled = demangled->u.s_binary.right;
850
851 for (i = 0; demangled && i < argno; ++i)
852 demangled = demangled->u.s_binary.right;
853
854 if (! demangled)
855 {
856 do_cleanups (cleanup);
857 PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
858 argno);
859 return NULL;
860 }
861
862 argtype = typy_lookup_type (demangled->u.s_binary.left, block);
863 do_cleanups (cleanup);
864 if (! argtype)
865 return NULL;
866
867 return type_to_type_object (argtype);
868 }
869
870 static PyObject *
871 typy_template_argument (PyObject *self, PyObject *args)
872 {
873 int argno;
874 struct type *type = ((type_object *) self)->type;
875 const struct block *block = NULL;
876 PyObject *block_obj = NULL;
877 struct symbol *sym;
878 struct value *val = NULL;
879 volatile struct gdb_exception except;
880
881 if (! PyArg_ParseTuple (args, "i|O", &argno, &block_obj))
882 return NULL;
883
884 if (block_obj)
885 {
886 block = block_object_to_block (block_obj);
887 if (! block)
888 {
889 PyErr_SetString (PyExc_RuntimeError,
890 _("Second argument must be block."));
891 return NULL;
892 }
893 }
894
895 TRY_CATCH (except, RETURN_MASK_ALL)
896 {
897 type = check_typedef (type);
898 if (TYPE_CODE (type) == TYPE_CODE_REF)
899 type = check_typedef (TYPE_TARGET_TYPE (type));
900 }
901 GDB_PY_HANDLE_EXCEPTION (except);
902
903 /* We might not have DW_TAG_template_*, so try to parse the type's
904 name. This is inefficient if we do not have a template type --
905 but that is going to wind up as an error anyhow. */
906 if (! TYPE_N_TEMPLATE_ARGUMENTS (type))
907 return typy_legacy_template_argument (type, block, argno);
908
909 if (argno >= TYPE_N_TEMPLATE_ARGUMENTS (type))
910 {
911 PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
912 argno);
913 return NULL;
914 }
915
916 sym = TYPE_TEMPLATE_ARGUMENT (type, argno);
917 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
918 return type_to_type_object (SYMBOL_TYPE (sym));
919 else if (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT)
920 {
921 PyErr_Format (PyExc_RuntimeError,
922 _("Template argument is optimized out"));
923 return NULL;
924 }
925
926 TRY_CATCH (except, RETURN_MASK_ALL)
927 {
928 val = value_of_variable (sym, block);
929 }
930 GDB_PY_HANDLE_EXCEPTION (except);
931
932 return value_to_value_object (val);
933 }
934
935 static PyObject *
936 typy_str (PyObject *self)
937 {
938 volatile struct gdb_exception except;
939 char *thetype = NULL;
940 long length = 0;
941 PyObject *result;
942
943 TRY_CATCH (except, RETURN_MASK_ALL)
944 {
945 struct cleanup *old_chain;
946 struct ui_file *stb;
947
948 stb = mem_fileopen ();
949 old_chain = make_cleanup_ui_file_delete (stb);
950
951 type_print (type_object_to_type (self), "", stb, -1);
952
953 thetype = ui_file_xstrdup (stb, &length);
954 do_cleanups (old_chain);
955 }
956 if (except.reason < 0)
957 {
958 xfree (thetype);
959 GDB_PY_HANDLE_EXCEPTION (except);
960 }
961
962 result = PyUnicode_Decode (thetype, length, host_charset (), NULL);
963 xfree (thetype);
964
965 return result;
966 }
967
968 /* An entry in the type-equality bcache. */
969
970 typedef struct type_equality_entry
971 {
972 struct type *type1, *type2;
973 } type_equality_entry_d;
974
975 DEF_VEC_O (type_equality_entry_d);
976
977 /* A helper function to compare two strings. Returns 1 if they are
978 the same, 0 otherwise. Handles NULLs properly. */
979
980 static int
981 compare_maybe_null_strings (const char *s, const char *t)
982 {
983 if (s == NULL && t != NULL)
984 return 0;
985 else if (s != NULL && t == NULL)
986 return 0;
987 else if (s == NULL && t== NULL)
988 return 1;
989 return strcmp (s, t) == 0;
990 }
991
992 /* A helper function for typy_richcompare that checks two types for
993 "deep" equality. Returns Py_EQ if the types are considered the
994 same, Py_NE otherwise. */
995
996 static int
997 check_types_equal (struct type *type1, struct type *type2,
998 VEC (type_equality_entry_d) **worklist)
999 {
1000 CHECK_TYPEDEF (type1);
1001 CHECK_TYPEDEF (type2);
1002
1003 if (type1 == type2)
1004 return Py_EQ;
1005
1006 if (TYPE_CODE (type1) != TYPE_CODE (type2)
1007 || TYPE_LENGTH (type1) != TYPE_LENGTH (type2)
1008 || TYPE_UNSIGNED (type1) != TYPE_UNSIGNED (type2)
1009 || TYPE_NOSIGN (type1) != TYPE_NOSIGN (type2)
1010 || TYPE_VARARGS (type1) != TYPE_VARARGS (type2)
1011 || TYPE_VECTOR (type1) != TYPE_VECTOR (type2)
1012 || TYPE_NOTTEXT (type1) != TYPE_NOTTEXT (type2)
1013 || TYPE_INSTANCE_FLAGS (type1) != TYPE_INSTANCE_FLAGS (type2)
1014 || TYPE_NFIELDS (type1) != TYPE_NFIELDS (type2))
1015 return Py_NE;
1016
1017 if (!compare_maybe_null_strings (TYPE_TAG_NAME (type1),
1018 TYPE_TAG_NAME (type2)))
1019 return Py_NE;
1020 if (!compare_maybe_null_strings (TYPE_NAME (type1), TYPE_NAME (type2)))
1021 return Py_NE;
1022
1023 if (TYPE_CODE (type1) == TYPE_CODE_RANGE)
1024 {
1025 if (memcmp (TYPE_RANGE_DATA (type1), TYPE_RANGE_DATA (type2),
1026 sizeof (*TYPE_RANGE_DATA (type1))) != 0)
1027 return Py_NE;
1028 }
1029 else
1030 {
1031 int i;
1032
1033 for (i = 0; i < TYPE_NFIELDS (type1); ++i)
1034 {
1035 const struct field *field1 = &TYPE_FIELD (type1, i);
1036 const struct field *field2 = &TYPE_FIELD (type2, i);
1037 struct type_equality_entry entry;
1038
1039 if (FIELD_ARTIFICIAL (*field1) != FIELD_ARTIFICIAL (*field2)
1040 || FIELD_BITSIZE (*field1) != FIELD_BITSIZE (*field2)
1041 || FIELD_LOC_KIND (*field1) != FIELD_LOC_KIND (*field2))
1042 return Py_NE;
1043 if (!compare_maybe_null_strings (FIELD_NAME (*field1),
1044 FIELD_NAME (*field2)))
1045 return Py_NE;
1046 switch (FIELD_LOC_KIND (*field1))
1047 {
1048 case FIELD_LOC_KIND_BITPOS:
1049 if (FIELD_BITPOS (*field1) != FIELD_BITPOS (*field2))
1050 return Py_NE;
1051 break;
1052 case FIELD_LOC_KIND_ENUMVAL:
1053 if (FIELD_ENUMVAL (*field1) != FIELD_ENUMVAL (*field2))
1054 return Py_NE;
1055 break;
1056 case FIELD_LOC_KIND_PHYSADDR:
1057 if (FIELD_STATIC_PHYSADDR (*field1)
1058 != FIELD_STATIC_PHYSADDR (*field2))
1059 return Py_NE;
1060 break;
1061 case FIELD_LOC_KIND_PHYSNAME:
1062 if (!compare_maybe_null_strings (FIELD_STATIC_PHYSNAME (*field1),
1063 FIELD_STATIC_PHYSNAME (*field2)))
1064 return Py_NE;
1065 break;
1066 case FIELD_LOC_KIND_DWARF_BLOCK:
1067 {
1068 struct dwarf2_locexpr_baton *block1, *block2;
1069
1070 block1 = FIELD_DWARF_BLOCK (*field1);
1071 block2 = FIELD_DWARF_BLOCK (*field2);
1072 if (block1->per_cu != block2->per_cu
1073 || block1->size != block2->size
1074 || memcmp (block1->data, block2->data, block1->size) != 0)
1075 return Py_NE;
1076 }
1077 break;
1078 default:
1079 internal_error (__FILE__, __LINE__, _("Unsupported field kind "
1080 "%d by check_types_equal"),
1081 FIELD_LOC_KIND (*field1));
1082 }
1083
1084 entry.type1 = FIELD_TYPE (*field1);
1085 entry.type2 = FIELD_TYPE (*field2);
1086 VEC_safe_push (type_equality_entry_d, *worklist, &entry);
1087 }
1088 }
1089
1090 if (TYPE_TARGET_TYPE (type1) != NULL)
1091 {
1092 struct type_equality_entry entry;
1093
1094 if (TYPE_TARGET_TYPE (type2) == NULL)
1095 return Py_NE;
1096
1097 entry.type1 = TYPE_TARGET_TYPE (type1);
1098 entry.type2 = TYPE_TARGET_TYPE (type2);
1099 VEC_safe_push (type_equality_entry_d, *worklist, &entry);
1100 }
1101 else if (TYPE_TARGET_TYPE (type2) != NULL)
1102 return Py_NE;
1103
1104 return Py_EQ;
1105 }
1106
1107 /* Check types on a worklist for equality. Returns Py_NE if any pair
1108 is not equal, Py_EQ if they are all considered equal. */
1109
1110 static int
1111 check_types_worklist (VEC (type_equality_entry_d) **worklist,
1112 struct bcache *cache)
1113 {
1114 while (!VEC_empty (type_equality_entry_d, *worklist))
1115 {
1116 struct type_equality_entry entry;
1117 int added;
1118
1119 entry = *VEC_last (type_equality_entry_d, *worklist);
1120 VEC_pop (type_equality_entry_d, *worklist);
1121
1122 /* If the type pair has already been visited, we know it is
1123 ok. */
1124 bcache_full (&entry, sizeof (entry), cache, &added);
1125 if (!added)
1126 continue;
1127
1128 if (check_types_equal (entry.type1, entry.type2, worklist) == Py_NE)
1129 return Py_NE;
1130 }
1131
1132 return Py_EQ;
1133 }
1134
1135 /* Implement the richcompare method. */
1136
1137 static PyObject *
1138 typy_richcompare (PyObject *self, PyObject *other, int op)
1139 {
1140 int result = Py_NE;
1141 struct type *type1 = type_object_to_type (self);
1142 struct type *type2 = type_object_to_type (other);
1143 volatile struct gdb_exception except;
1144
1145 /* We can only compare ourselves to another Type object, and only
1146 for equality or inequality. */
1147 if (type2 == NULL || (op != Py_EQ && op != Py_NE))
1148 {
1149 Py_INCREF (Py_NotImplemented);
1150 return Py_NotImplemented;
1151 }
1152
1153 if (type1 == type2)
1154 result = Py_EQ;
1155 else
1156 {
1157 struct bcache *cache;
1158 VEC (type_equality_entry_d) *worklist = NULL;
1159 struct type_equality_entry entry;
1160
1161 cache = bcache_xmalloc (NULL, NULL);
1162
1163 entry.type1 = type1;
1164 entry.type2 = type2;
1165 VEC_safe_push (type_equality_entry_d, worklist, &entry);
1166
1167 TRY_CATCH (except, RETURN_MASK_ALL)
1168 {
1169 result = check_types_worklist (&worklist, cache);
1170 }
1171 /* check_types_worklist calls several nested Python helper
1172 functions, some of which can raise a GDB Exception, so we
1173 just check and convert here. If there is a GDB exception, a
1174 comparison is not capable (or trusted), so exit. */
1175 bcache_xfree (cache);
1176 VEC_free (type_equality_entry_d, worklist);
1177 GDB_PY_HANDLE_EXCEPTION (except);
1178 }
1179
1180 if (op == result)
1181 Py_RETURN_TRUE;
1182 Py_RETURN_FALSE;
1183 }
1184
1185 \f
1186
1187 static const struct objfile_data *typy_objfile_data_key;
1188
1189 static void
1190 save_objfile_types (struct objfile *objfile, void *datum)
1191 {
1192 type_object *obj = datum;
1193 htab_t copied_types;
1194 struct cleanup *cleanup;
1195
1196 /* This prevents another thread from freeing the objects we're
1197 operating on. */
1198 cleanup = ensure_python_env (get_objfile_arch (objfile), current_language);
1199
1200 copied_types = create_copied_types_hash (objfile);
1201
1202 while (obj)
1203 {
1204 type_object *next = obj->next;
1205
1206 htab_empty (copied_types);
1207
1208 obj->type = copy_type_recursive (objfile, obj->type, copied_types);
1209
1210 obj->next = NULL;
1211 obj->prev = NULL;
1212
1213 obj = next;
1214 }
1215
1216 htab_delete (copied_types);
1217
1218 do_cleanups (cleanup);
1219 }
1220
1221 static void
1222 set_type (type_object *obj, struct type *type)
1223 {
1224 obj->type = type;
1225 obj->prev = NULL;
1226 if (type && TYPE_OBJFILE (type))
1227 {
1228 struct objfile *objfile = TYPE_OBJFILE (type);
1229
1230 obj->next = objfile_data (objfile, typy_objfile_data_key);
1231 if (obj->next)
1232 obj->next->prev = obj;
1233 set_objfile_data (objfile, typy_objfile_data_key, obj);
1234 }
1235 else
1236 obj->next = NULL;
1237 }
1238
1239 static void
1240 typy_dealloc (PyObject *obj)
1241 {
1242 type_object *type = (type_object *) obj;
1243
1244 if (type->prev)
1245 type->prev->next = type->next;
1246 else if (type->type && TYPE_OBJFILE (type->type))
1247 {
1248 /* Must reset head of list. */
1249 struct objfile *objfile = TYPE_OBJFILE (type->type);
1250
1251 if (objfile)
1252 set_objfile_data (objfile, typy_objfile_data_key, type->next);
1253 }
1254 if (type->next)
1255 type->next->prev = type->prev;
1256
1257 type->ob_type->tp_free (type);
1258 }
1259
1260 /* Return number of fields ("length" of the field dictionary). */
1261
1262 static Py_ssize_t
1263 typy_length (PyObject *self)
1264 {
1265 struct type *type = ((type_object *) self)->type;
1266
1267 type = typy_get_composite (type);
1268 if (type == NULL)
1269 return -1;
1270
1271 return TYPE_NFIELDS (type);
1272 }
1273
1274 /* Implements boolean evaluation of gdb.Type. Handle this like other
1275 Python objects that don't have a meaningful truth value -- all
1276 values are true. */
1277
1278 static int
1279 typy_nonzero (PyObject *self)
1280 {
1281 return 1;
1282 }
1283
1284 /* Return a gdb.Field object for the field named by the argument. */
1285
1286 static PyObject *
1287 typy_getitem (PyObject *self, PyObject *key)
1288 {
1289 struct type *type = ((type_object *) self)->type;
1290 char *field;
1291 int i;
1292
1293 field = python_string_to_host_string (key);
1294 if (field == NULL)
1295 return NULL;
1296
1297 /* We want just fields of this type, not of base types, so instead of
1298 using lookup_struct_elt_type, portions of that function are
1299 copied here. */
1300
1301 type = typy_get_composite (type);
1302 if (type == NULL)
1303 return NULL;
1304
1305 for (i = 0; i < TYPE_NFIELDS (type); i++)
1306 {
1307 const char *t_field_name = TYPE_FIELD_NAME (type, i);
1308
1309 if (t_field_name && (strcmp_iw (t_field_name, field) == 0))
1310 {
1311 return convert_field (type, i);
1312 }
1313 }
1314 PyErr_SetObject (PyExc_KeyError, key);
1315 return NULL;
1316 }
1317
1318 /* Implement the "get" method on the type object. This is the
1319 same as getitem if the key is present, but returns the supplied
1320 default value or None if the key is not found. */
1321
1322 static PyObject *
1323 typy_get (PyObject *self, PyObject *args)
1324 {
1325 PyObject *key, *defval = Py_None, *result;
1326
1327 if (!PyArg_UnpackTuple (args, "get", 1, 2, &key, &defval))
1328 return NULL;
1329
1330 result = typy_getitem (self, key);
1331 if (result != NULL)
1332 return result;
1333
1334 /* typy_getitem returned error status. If the exception is
1335 KeyError, clear the exception status and return the defval
1336 instead. Otherwise return the exception unchanged. */
1337 if (!PyErr_ExceptionMatches (PyExc_KeyError))
1338 return NULL;
1339
1340 PyErr_Clear ();
1341 Py_INCREF (defval);
1342 return defval;
1343 }
1344
1345 /* Implement the "has_key" method on the type object. */
1346
1347 static PyObject *
1348 typy_has_key (PyObject *self, PyObject *args)
1349 {
1350 struct type *type = ((type_object *) self)->type;
1351 const char *field;
1352 int i;
1353
1354 if (!PyArg_ParseTuple (args, "s", &field))
1355 return NULL;
1356
1357 /* We want just fields of this type, not of base types, so instead of
1358 using lookup_struct_elt_type, portions of that function are
1359 copied here. */
1360
1361 type = typy_get_composite (type);
1362 if (type == NULL)
1363 return NULL;
1364
1365 for (i = 0; i < TYPE_NFIELDS (type); i++)
1366 {
1367 const char *t_field_name = TYPE_FIELD_NAME (type, i);
1368
1369 if (t_field_name && (strcmp_iw (t_field_name, field) == 0))
1370 Py_RETURN_TRUE;
1371 }
1372 Py_RETURN_FALSE;
1373 }
1374
1375 /* Make an iterator object to iterate over keys, values, or items. */
1376
1377 static PyObject *
1378 typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind)
1379 {
1380 typy_iterator_object *typy_iter_obj;
1381
1382 /* Check that "self" is a structure or union type. */
1383 if (typy_get_composite (((type_object *) self)->type) == NULL)
1384 return NULL;
1385
1386 typy_iter_obj = PyObject_New (typy_iterator_object,
1387 &type_iterator_object_type);
1388 if (typy_iter_obj == NULL)
1389 return NULL;
1390
1391 typy_iter_obj->field = 0;
1392 typy_iter_obj->kind = kind;
1393 Py_INCREF (self);
1394 typy_iter_obj->source = (type_object *) self;
1395
1396 return (PyObject *) typy_iter_obj;
1397 }
1398
1399 /* iteritems() method. */
1400
1401 static PyObject *
1402 typy_iteritems (PyObject *self, PyObject *args)
1403 {
1404 return typy_make_iter (self, iter_items);
1405 }
1406
1407 /* iterkeys() method. */
1408
1409 static PyObject *
1410 typy_iterkeys (PyObject *self, PyObject *args)
1411 {
1412 return typy_make_iter (self, iter_keys);
1413 }
1414
1415 /* Iterating over the class, same as iterkeys except for the function
1416 signature. */
1417
1418 static PyObject *
1419 typy_iter (PyObject *self)
1420 {
1421 return typy_make_iter (self, iter_keys);
1422 }
1423
1424 /* itervalues() method. */
1425
1426 static PyObject *
1427 typy_itervalues (PyObject *self, PyObject *args)
1428 {
1429 return typy_make_iter (self, iter_values);
1430 }
1431
1432 /* Return a reference to the type iterator. */
1433
1434 static PyObject *
1435 typy_iterator_iter (PyObject *self)
1436 {
1437 Py_INCREF (self);
1438 return self;
1439 }
1440
1441 /* Return the next field in the iteration through the list of fields
1442 of the type. */
1443
1444 static PyObject *
1445 typy_iterator_iternext (PyObject *self)
1446 {
1447 typy_iterator_object *iter_obj = (typy_iterator_object *) self;
1448 struct type *type = iter_obj->source->type;
1449 PyObject *result;
1450
1451 if (iter_obj->field < TYPE_NFIELDS (type))
1452 {
1453 result = make_fielditem (type, iter_obj->field, iter_obj->kind);
1454 if (result != NULL)
1455 iter_obj->field++;
1456 return result;
1457 }
1458
1459 return NULL;
1460 }
1461
1462 static void
1463 typy_iterator_dealloc (PyObject *obj)
1464 {
1465 typy_iterator_object *iter_obj = (typy_iterator_object *) obj;
1466
1467 Py_DECREF (iter_obj->source);
1468 }
1469
1470 /* Create a new Type referring to TYPE. */
1471 PyObject *
1472 type_to_type_object (struct type *type)
1473 {
1474 type_object *type_obj;
1475
1476 type_obj = PyObject_New (type_object, &type_object_type);
1477 if (type_obj)
1478 set_type (type_obj, type);
1479
1480 return (PyObject *) type_obj;
1481 }
1482
1483 struct type *
1484 type_object_to_type (PyObject *obj)
1485 {
1486 if (! PyObject_TypeCheck (obj, &type_object_type))
1487 return NULL;
1488 return ((type_object *) obj)->type;
1489 }
1490
1491 \f
1492
1493 /* Implementation of gdb.lookup_type. */
1494 PyObject *
1495 gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw)
1496 {
1497 static char *keywords[] = { "name", "block", NULL };
1498 const char *type_name = NULL;
1499 struct type *type = NULL;
1500 PyObject *block_obj = NULL;
1501 const struct block *block = NULL;
1502
1503 if (! PyArg_ParseTupleAndKeywords (args, kw, "s|O", keywords,
1504 &type_name, &block_obj))
1505 return NULL;
1506
1507 if (block_obj)
1508 {
1509 block = block_object_to_block (block_obj);
1510 if (! block)
1511 {
1512 PyErr_SetString (PyExc_RuntimeError,
1513 _("'block' argument must be a Block."));
1514 return NULL;
1515 }
1516 }
1517
1518 type = typy_lookup_typename (type_name, block);
1519 if (! type)
1520 return NULL;
1521
1522 return (PyObject *) type_to_type_object (type);
1523 }
1524
1525 void
1526 gdbpy_initialize_types (void)
1527 {
1528 int i;
1529
1530 typy_objfile_data_key
1531 = register_objfile_data_with_cleanup (save_objfile_types, NULL);
1532
1533 if (PyType_Ready (&type_object_type) < 0)
1534 return;
1535 if (PyType_Ready (&field_object_type) < 0)
1536 return;
1537 if (PyType_Ready (&type_iterator_object_type) < 0)
1538 return;
1539
1540 for (i = 0; pyty_codes[i].name; ++i)
1541 {
1542 if (PyModule_AddIntConstant (gdb_module,
1543 /* Cast needed for Python 2.4. */
1544 (char *) pyty_codes[i].name,
1545 pyty_codes[i].code) < 0)
1546 return;
1547 }
1548
1549 Py_INCREF (&type_object_type);
1550 PyModule_AddObject (gdb_module, "Type", (PyObject *) &type_object_type);
1551
1552 Py_INCREF (&type_iterator_object_type);
1553 PyModule_AddObject (gdb_module, "TypeIterator",
1554 (PyObject *) &type_iterator_object_type);
1555
1556 Py_INCREF (&field_object_type);
1557 PyModule_AddObject (gdb_module, "Field", (PyObject *) &field_object_type);
1558 }
1559
1560 \f
1561
1562 static PyGetSetDef type_object_getset[] =
1563 {
1564 { "code", typy_get_code, NULL,
1565 "The code for this type.", NULL },
1566 { "sizeof", typy_get_sizeof, NULL,
1567 "The size of this type, in bytes.", NULL },
1568 { "tag", typy_get_tag, NULL,
1569 "The tag name for this type, or None.", NULL },
1570 { NULL }
1571 };
1572
1573 static PyMethodDef type_object_methods[] =
1574 {
1575 { "array", typy_array, METH_VARARGS,
1576 "array ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1577 Return a type which represents an array of objects of this type.\n\
1578 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1579 If LOW_BOUND is omitted, a value of zero is used." },
1580 { "vector", typy_vector, METH_VARARGS,
1581 "vector ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1582 Return a type which represents a vector of objects of this type.\n\
1583 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1584 If LOW_BOUND is omitted, a value of zero is used.\n\
1585 Vectors differ from arrays in that if the current language has C-style\n\
1586 arrays, vectors don't decay to a pointer to the first element.\n\
1587 They are first class values." },
1588 { "__contains__", typy_has_key, METH_VARARGS,
1589 "T.__contains__(k) -> True if T has a field named k, else False" },
1590 { "const", typy_const, METH_NOARGS,
1591 "const () -> Type\n\
1592 Return a const variant of this type." },
1593 { "fields", typy_fields, METH_NOARGS,
1594 "fields () -> list\n\
1595 Return a list holding all the fields of this type.\n\
1596 Each field is a gdb.Field object." },
1597 { "get", typy_get, METH_VARARGS,
1598 "T.get(k[,default]) -> returns field named k in T, if it exists;\n\
1599 otherwise returns default, if supplied, or None if not." },
1600 { "has_key", typy_has_key, METH_VARARGS,
1601 "T.has_key(k) -> True if T has a field named k, else False" },
1602 { "items", typy_items, METH_NOARGS,
1603 "items () -> list\n\
1604 Return a list of (name, field) pairs of this type.\n\
1605 Each field is a gdb.Field object." },
1606 { "iteritems", typy_iteritems, METH_NOARGS,
1607 "iteritems () -> an iterator over the (name, field)\n\
1608 pairs of this type. Each field is a gdb.Field object." },
1609 { "iterkeys", typy_iterkeys, METH_NOARGS,
1610 "iterkeys () -> an iterator over the field names of this type." },
1611 { "itervalues", typy_itervalues, METH_NOARGS,
1612 "itervalues () -> an iterator over the fields of this type.\n\
1613 Each field is a gdb.Field object." },
1614 { "keys", typy_field_names, METH_NOARGS,
1615 "keys () -> list\n\
1616 Return a list holding all the fields names of this type." },
1617 { "pointer", typy_pointer, METH_NOARGS,
1618 "pointer () -> Type\n\
1619 Return a type of pointer to this type." },
1620 { "range", typy_range, METH_NOARGS,
1621 "range () -> tuple\n\
1622 Return a tuple containing the lower and upper range for this type."},
1623 { "reference", typy_reference, METH_NOARGS,
1624 "reference () -> Type\n\
1625 Return a type of reference to this type." },
1626 { "strip_typedefs", typy_strip_typedefs, METH_NOARGS,
1627 "strip_typedefs () -> Type\n\
1628 Return a type formed by stripping this type of all typedefs."},
1629 { "target", typy_target, METH_NOARGS,
1630 "target () -> Type\n\
1631 Return the target type of this type." },
1632 { "template_argument", typy_template_argument, METH_VARARGS,
1633 "template_argument (arg, [block]) -> Type\n\
1634 Return the type of a template argument." },
1635 { "unqualified", typy_unqualified, METH_NOARGS,
1636 "unqualified () -> Type\n\
1637 Return a variant of this type without const or volatile attributes." },
1638 { "values", typy_values, METH_NOARGS,
1639 "values () -> list\n\
1640 Return a list holding all the fields of this type.\n\
1641 Each field is a gdb.Field object." },
1642 { "volatile", typy_volatile, METH_NOARGS,
1643 "volatile () -> Type\n\
1644 Return a volatile variant of this type" },
1645 { NULL }
1646 };
1647
1648 static PyNumberMethods type_object_as_number = {
1649 NULL, /* nb_add */
1650 NULL, /* nb_subtract */
1651 NULL, /* nb_multiply */
1652 NULL, /* nb_divide */
1653 NULL, /* nb_remainder */
1654 NULL, /* nb_divmod */
1655 NULL, /* nb_power */
1656 NULL, /* nb_negative */
1657 NULL, /* nb_positive */
1658 NULL, /* nb_absolute */
1659 typy_nonzero, /* nb_nonzero */
1660 NULL, /* nb_invert */
1661 NULL, /* nb_lshift */
1662 NULL, /* nb_rshift */
1663 NULL, /* nb_and */
1664 NULL, /* nb_xor */
1665 NULL, /* nb_or */
1666 NULL, /* nb_coerce */
1667 NULL, /* nb_int */
1668 NULL, /* nb_long */
1669 NULL, /* nb_float */
1670 NULL, /* nb_oct */
1671 NULL /* nb_hex */
1672 };
1673
1674 static PyMappingMethods typy_mapping = {
1675 typy_length,
1676 typy_getitem,
1677 NULL /* no "set" method */
1678 };
1679
1680 static PyTypeObject type_object_type =
1681 {
1682 PyObject_HEAD_INIT (NULL)
1683 0, /*ob_size*/
1684 "gdb.Type", /*tp_name*/
1685 sizeof (type_object), /*tp_basicsize*/
1686 0, /*tp_itemsize*/
1687 typy_dealloc, /*tp_dealloc*/
1688 0, /*tp_print*/
1689 0, /*tp_getattr*/
1690 0, /*tp_setattr*/
1691 0, /*tp_compare*/
1692 0, /*tp_repr*/
1693 &type_object_as_number, /*tp_as_number*/
1694 0, /*tp_as_sequence*/
1695 &typy_mapping, /*tp_as_mapping*/
1696 0, /*tp_hash */
1697 0, /*tp_call*/
1698 typy_str, /*tp_str*/
1699 0, /*tp_getattro*/
1700 0, /*tp_setattro*/
1701 0, /*tp_as_buffer*/
1702 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
1703 "GDB type object", /* tp_doc */
1704 0, /* tp_traverse */
1705 0, /* tp_clear */
1706 typy_richcompare, /* tp_richcompare */
1707 0, /* tp_weaklistoffset */
1708 typy_iter, /* tp_iter */
1709 0, /* tp_iternext */
1710 type_object_methods, /* tp_methods */
1711 0, /* tp_members */
1712 type_object_getset, /* tp_getset */
1713 0, /* tp_base */
1714 0, /* tp_dict */
1715 0, /* tp_descr_get */
1716 0, /* tp_descr_set */
1717 0, /* tp_dictoffset */
1718 0, /* tp_init */
1719 0, /* tp_alloc */
1720 0, /* tp_new */
1721 };
1722
1723 static PyGetSetDef field_object_getset[] =
1724 {
1725 { "__dict__", gdb_py_generic_dict, NULL,
1726 "The __dict__ for this field.", &field_object_type },
1727 { NULL }
1728 };
1729
1730 static PyTypeObject field_object_type =
1731 {
1732 PyObject_HEAD_INIT (NULL)
1733 0, /*ob_size*/
1734 "gdb.Field", /*tp_name*/
1735 sizeof (field_object), /*tp_basicsize*/
1736 0, /*tp_itemsize*/
1737 field_dealloc, /*tp_dealloc*/
1738 0, /*tp_print*/
1739 0, /*tp_getattr*/
1740 0, /*tp_setattr*/
1741 0, /*tp_compare*/
1742 0, /*tp_repr*/
1743 0, /*tp_as_number*/
1744 0, /*tp_as_sequence*/
1745 0, /*tp_as_mapping*/
1746 0, /*tp_hash */
1747 0, /*tp_call*/
1748 0, /*tp_str*/
1749 0, /*tp_getattro*/
1750 0, /*tp_setattro*/
1751 0, /*tp_as_buffer*/
1752 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
1753 "GDB field object", /* tp_doc */
1754 0, /* tp_traverse */
1755 0, /* tp_clear */
1756 0, /* tp_richcompare */
1757 0, /* tp_weaklistoffset */
1758 0, /* tp_iter */
1759 0, /* tp_iternext */
1760 0, /* tp_methods */
1761 0, /* tp_members */
1762 field_object_getset, /* tp_getset */
1763 0, /* tp_base */
1764 0, /* tp_dict */
1765 0, /* tp_descr_get */
1766 0, /* tp_descr_set */
1767 offsetof (field_object, dict), /* tp_dictoffset */
1768 0, /* tp_init */
1769 0, /* tp_alloc */
1770 0, /* tp_new */
1771 };
1772
1773 static PyTypeObject type_iterator_object_type = {
1774 PyObject_HEAD_INIT (NULL)
1775 0, /*ob_size*/
1776 "gdb.TypeIterator", /*tp_name*/
1777 sizeof (typy_iterator_object), /*tp_basicsize*/
1778 0, /*tp_itemsize*/
1779 typy_iterator_dealloc, /*tp_dealloc*/
1780 0, /*tp_print*/
1781 0, /*tp_getattr*/
1782 0, /*tp_setattr*/
1783 0, /*tp_compare*/
1784 0, /*tp_repr*/
1785 0, /*tp_as_number*/
1786 0, /*tp_as_sequence*/
1787 0, /*tp_as_mapping*/
1788 0, /*tp_hash */
1789 0, /*tp_call*/
1790 0, /*tp_str*/
1791 0, /*tp_getattro*/
1792 0, /*tp_setattro*/
1793 0, /*tp_as_buffer*/
1794 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
1795 "GDB type iterator object", /*tp_doc */
1796 0, /*tp_traverse */
1797 0, /*tp_clear */
1798 0, /*tp_richcompare */
1799 0, /*tp_weaklistoffset */
1800 typy_iterator_iter, /*tp_iter */
1801 typy_iterator_iternext, /*tp_iternext */
1802 0 /*tp_methods */
1803 };