2011-11-04 Phil Muldoon <pmuldoon@redhat.com>
[binutils-gdb.git] / gdb / python / py-type.c
1 /* Python interface to types.
2
3 Copyright (C) 2008, 2009, 2010, 2011 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 arg = PyLong_FromLong (TYPE_FIELD_BITPOS (type, field));
171 if (!arg)
172 goto fail;
173
174 if (PyObject_SetAttrString (result, "bitpos", arg) < 0)
175 goto failarg;
176 }
177
178 if (TYPE_FIELD_NAME (type, field))
179 arg = PyString_FromString (TYPE_FIELD_NAME (type, field));
180 else
181 {
182 arg = Py_None;
183 Py_INCREF (arg);
184 }
185 if (!arg)
186 goto fail;
187 if (PyObject_SetAttrString (result, "name", arg) < 0)
188 goto failarg;
189
190 arg = TYPE_FIELD_ARTIFICIAL (type, field) ? Py_True : Py_False;
191 Py_INCREF (arg);
192 if (PyObject_SetAttrString (result, "artificial", arg) < 0)
193 goto failarg;
194
195 if (TYPE_CODE (type) == TYPE_CODE_CLASS)
196 arg = field < TYPE_N_BASECLASSES (type) ? Py_True : Py_False;
197 else
198 arg = Py_False;
199 Py_INCREF (arg);
200 if (PyObject_SetAttrString (result, "is_base_class", arg) < 0)
201 goto failarg;
202
203 arg = PyLong_FromLong (TYPE_FIELD_BITSIZE (type, field));
204 if (!arg)
205 goto fail;
206 if (PyObject_SetAttrString (result, "bitsize", arg) < 0)
207 goto failarg;
208
209 /* A field can have a NULL type in some situations. */
210 if (TYPE_FIELD_TYPE (type, field) == NULL)
211 {
212 arg = Py_None;
213 Py_INCREF (arg);
214 }
215 else
216 arg = type_to_type_object (TYPE_FIELD_TYPE (type, field));
217 if (!arg)
218 goto fail;
219 if (PyObject_SetAttrString (result, "type", arg) < 0)
220 goto failarg;
221
222 return result;
223
224 failarg:
225 Py_DECREF (arg);
226 fail:
227 Py_DECREF (result);
228 return NULL;
229 }
230
231 /* Helper function to return the name of a field, as a gdb.Field object.
232 If the field doesn't have a name, None is returned. */
233
234 static PyObject *
235 field_name (struct type *type, int field)
236 {
237 PyObject *result;
238
239 if (TYPE_FIELD_NAME (type, field))
240 result = PyString_FromString (TYPE_FIELD_NAME (type, field));
241 else
242 {
243 result = Py_None;
244 Py_INCREF (result);
245 }
246 return result;
247 }
248
249 /* Helper function for Type standard mapping methods. Returns a
250 Python object for field i of the type. "kind" specifies what to
251 return: the name of the field, a gdb.Field object corresponding to
252 the field, or a tuple consisting of field name and gdb.Field
253 object. */
254
255 static PyObject *
256 make_fielditem (struct type *type, int i, enum gdbpy_iter_kind kind)
257 {
258 PyObject *item = NULL, *key = NULL, *value = NULL;
259
260 switch (kind)
261 {
262 case iter_items:
263 key = field_name (type, i);
264 if (key == NULL)
265 goto fail;
266 value = convert_field (type, i);
267 if (value == NULL)
268 goto fail;
269 item = PyTuple_New (2);
270 if (item == NULL)
271 goto fail;
272 PyTuple_SET_ITEM (item, 0, key);
273 PyTuple_SET_ITEM (item, 1, value);
274 break;
275 case iter_keys:
276 item = field_name (type, i);
277 break;
278 case iter_values:
279 item = convert_field (type, i);
280 break;
281 }
282 return item;
283
284 fail:
285 Py_XDECREF (key);
286 Py_XDECREF (value);
287 Py_XDECREF (item);
288 return NULL;
289 }
290
291 /* Return a sequence of all field names, fields, or (name, field) pairs.
292 Each field is a gdb.Field object. */
293
294 static PyObject *
295 typy_fields_items (PyObject *self, enum gdbpy_iter_kind kind)
296 {
297 PyObject *result = NULL, *iter = NULL;
298
299 iter = typy_make_iter (self, kind);
300 if (iter == NULL)
301 return NULL;
302
303 result = PySequence_List (iter);
304 Py_DECREF (iter);
305 return result;
306 }
307
308 /* Return a sequence of all fields. Each field is a gdb.Field object. */
309
310 static PyObject *
311 typy_fields (PyObject *self, PyObject *args)
312 {
313 return typy_fields_items (self, iter_values);
314 }
315
316 /* Return a sequence of all field names. Each field is a gdb.Field object. */
317
318 static PyObject *
319 typy_field_names (PyObject *self, PyObject *args)
320 {
321 return typy_fields_items (self, iter_keys);
322 }
323
324 /* Return a sequence of all (name, fields) pairs. Each field is a
325 gdb.Field object. */
326
327 static PyObject *
328 typy_items (PyObject *self, PyObject *args)
329 {
330 return typy_fields_items (self, iter_items);
331 }
332
333 /* Return the type's tag, or None. */
334 static PyObject *
335 typy_get_tag (PyObject *self, void *closure)
336 {
337 struct type *type = ((type_object *) self)->type;
338
339 if (!TYPE_TAG_NAME (type))
340 Py_RETURN_NONE;
341 return PyString_FromString (TYPE_TAG_NAME (type));
342 }
343
344 /* Return the type, stripped of typedefs. */
345 static PyObject *
346 typy_strip_typedefs (PyObject *self, PyObject *args)
347 {
348 struct type *type = ((type_object *) self)->type;
349
350 return type_to_type_object (check_typedef (type));
351 }
352
353 /* Return an array type. */
354
355 static PyObject *
356 typy_array (PyObject *self, PyObject *args)
357 {
358 long n1, n2;
359 PyObject *n2_obj = NULL;
360 struct type *array = NULL;
361 struct type *type = ((type_object *) self)->type;
362 volatile struct gdb_exception except;
363
364 if (! PyArg_ParseTuple (args, "l|O", &n1, &n2_obj))
365 return NULL;
366
367 if (n2_obj)
368 {
369 if (!PyInt_Check (n2_obj))
370 {
371 PyErr_SetString (PyExc_RuntimeError,
372 _("Array bound must be an integer"));
373 return NULL;
374 }
375
376 if (! gdb_py_int_as_long (n2_obj, &n2))
377 return NULL;
378 }
379 else
380 {
381 n2 = n1;
382 n1 = 0;
383 }
384
385 if (n2 < n1)
386 {
387 PyErr_SetString (PyExc_ValueError,
388 _("Array length must not be negative"));
389 return NULL;
390 }
391
392 TRY_CATCH (except, RETURN_MASK_ALL)
393 {
394 array = lookup_array_range_type (type, n1, n2);
395 }
396 GDB_PY_HANDLE_EXCEPTION (except);
397
398 return type_to_type_object (array);
399 }
400
401 /* Return a Type object which represents a pointer to SELF. */
402 static PyObject *
403 typy_pointer (PyObject *self, PyObject *args)
404 {
405 struct type *type = ((type_object *) self)->type;
406 volatile struct gdb_exception except;
407
408 TRY_CATCH (except, RETURN_MASK_ALL)
409 {
410 type = lookup_pointer_type (type);
411 }
412 GDB_PY_HANDLE_EXCEPTION (except);
413
414 return type_to_type_object (type);
415 }
416
417 /* Return the range of a type represented by SELF. The return type is
418 a tuple. The first element of the tuple contains the low bound,
419 while the second element of the tuple contains the high bound. */
420 static PyObject *
421 typy_range (PyObject *self, PyObject *args)
422 {
423 struct type *type = ((type_object *) self)->type;
424 PyObject *result;
425 PyObject *low_bound = NULL, *high_bound = NULL;
426 /* Initialize these to appease GCC warnings. */
427 LONGEST low = 0, high = 0;
428
429 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
430 && TYPE_CODE (type) != TYPE_CODE_STRING
431 && TYPE_CODE (type) != TYPE_CODE_RANGE)
432 {
433 PyErr_SetString (PyExc_RuntimeError,
434 _("This type does not have a range."));
435 return NULL;
436 }
437
438 switch (TYPE_CODE (type))
439 {
440 case TYPE_CODE_ARRAY:
441 case TYPE_CODE_STRING:
442 low = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
443 high = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (type));
444 break;
445 case TYPE_CODE_RANGE:
446 low = TYPE_LOW_BOUND (type);
447 high = TYPE_HIGH_BOUND (type);
448 break;
449 }
450
451 low_bound = PyLong_FromLong (low);
452 if (!low_bound)
453 goto failarg;
454
455 high_bound = PyLong_FromLong (high);
456 if (!high_bound)
457 goto failarg;
458
459 result = PyTuple_New (2);
460 if (!result)
461 goto failarg;
462
463 if (PyTuple_SetItem (result, 0, low_bound) != 0)
464 {
465 Py_DECREF (result);
466 goto failarg;
467 }
468 if (PyTuple_SetItem (result, 1, high_bound) != 0)
469 {
470 Py_DECREF (high_bound);
471 Py_DECREF (result);
472 return NULL;
473 }
474 return result;
475
476 failarg:
477 Py_XDECREF (high_bound);
478 Py_XDECREF (low_bound);
479 return NULL;
480 }
481
482 /* Return a Type object which represents a reference to SELF. */
483 static PyObject *
484 typy_reference (PyObject *self, PyObject *args)
485 {
486 struct type *type = ((type_object *) self)->type;
487 volatile struct gdb_exception except;
488
489 TRY_CATCH (except, RETURN_MASK_ALL)
490 {
491 type = lookup_reference_type (type);
492 }
493 GDB_PY_HANDLE_EXCEPTION (except);
494
495 return type_to_type_object (type);
496 }
497
498 /* Return a Type object which represents the target type of SELF. */
499 static PyObject *
500 typy_target (PyObject *self, PyObject *args)
501 {
502 struct type *type = ((type_object *) self)->type;
503
504 if (!TYPE_TARGET_TYPE (type))
505 {
506 PyErr_SetString (PyExc_RuntimeError,
507 _("Type does not have a target."));
508 return NULL;
509 }
510
511 return type_to_type_object (TYPE_TARGET_TYPE (type));
512 }
513
514 /* Return a const-qualified type variant. */
515 static PyObject *
516 typy_const (PyObject *self, PyObject *args)
517 {
518 struct type *type = ((type_object *) self)->type;
519 volatile struct gdb_exception except;
520
521 TRY_CATCH (except, RETURN_MASK_ALL)
522 {
523 type = make_cv_type (1, 0, type, NULL);
524 }
525 GDB_PY_HANDLE_EXCEPTION (except);
526
527 return type_to_type_object (type);
528 }
529
530 /* Return a volatile-qualified type variant. */
531 static PyObject *
532 typy_volatile (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 = make_cv_type (0, 1, type, NULL);
540 }
541 GDB_PY_HANDLE_EXCEPTION (except);
542
543 return type_to_type_object (type);
544 }
545
546 /* Return an unqualified type variant. */
547 static PyObject *
548 typy_unqualified (PyObject *self, PyObject *args)
549 {
550 struct type *type = ((type_object *) self)->type;
551 volatile struct gdb_exception except;
552
553 TRY_CATCH (except, RETURN_MASK_ALL)
554 {
555 type = make_cv_type (0, 0, type, NULL);
556 }
557 GDB_PY_HANDLE_EXCEPTION (except);
558
559 return type_to_type_object (type);
560 }
561
562 /* Return the size of the type represented by SELF, in bytes. */
563 static PyObject *
564 typy_get_sizeof (PyObject *self, void *closure)
565 {
566 struct type *type = ((type_object *) self)->type;
567 volatile struct gdb_exception except;
568
569 TRY_CATCH (except, RETURN_MASK_ALL)
570 {
571 check_typedef (type);
572 }
573 /* Ignore exceptions. */
574
575 return PyLong_FromLong (TYPE_LENGTH (type));
576 }
577
578 static struct type *
579 typy_lookup_typename (const char *type_name, const struct block *block)
580 {
581 struct type *type = NULL;
582 volatile struct gdb_exception except;
583
584 TRY_CATCH (except, RETURN_MASK_ALL)
585 {
586 if (!strncmp (type_name, "struct ", 7))
587 type = lookup_struct (type_name + 7, NULL);
588 else if (!strncmp (type_name, "union ", 6))
589 type = lookup_union (type_name + 6, NULL);
590 else if (!strncmp (type_name, "enum ", 5))
591 type = lookup_enum (type_name + 5, NULL);
592 else
593 type = lookup_typename (python_language, python_gdbarch,
594 type_name, block, 0);
595 }
596 if (except.reason < 0)
597 {
598 gdbpy_convert_exception (except);
599 return NULL;
600 }
601
602 return type;
603 }
604
605 static struct type *
606 typy_lookup_type (struct demangle_component *demangled,
607 const struct block *block)
608 {
609 struct type *type, *rtype = NULL;
610 char *type_name = NULL;
611 enum demangle_component_type demangled_type;
612 volatile struct gdb_exception except;
613
614 /* Save the type: typy_lookup_type() may (indirectly) overwrite
615 memory pointed by demangled. */
616 demangled_type = demangled->type;
617
618 if (demangled_type == DEMANGLE_COMPONENT_POINTER
619 || demangled_type == DEMANGLE_COMPONENT_REFERENCE
620 || demangled_type == DEMANGLE_COMPONENT_CONST
621 || demangled_type == DEMANGLE_COMPONENT_VOLATILE)
622 {
623 type = typy_lookup_type (demangled->u.s_binary.left, block);
624 if (! type)
625 return NULL;
626
627 TRY_CATCH (except, RETURN_MASK_ALL)
628 {
629 /* If the demangled_type matches with one of the types
630 below, run the corresponding function and save the type
631 to return later. We cannot just return here as we are in
632 an exception handler. */
633 switch (demangled_type)
634 {
635 case DEMANGLE_COMPONENT_REFERENCE:
636 rtype = lookup_reference_type (type);
637 break;
638 case DEMANGLE_COMPONENT_POINTER:
639 rtype = lookup_pointer_type (type);
640 break;
641 case DEMANGLE_COMPONENT_CONST:
642 rtype = make_cv_type (1, 0, type, NULL);
643 break;
644 case DEMANGLE_COMPONENT_VOLATILE:
645 rtype = make_cv_type (0, 1, type, NULL);
646 break;
647 }
648 }
649 if (except.reason < 0)
650 {
651 gdbpy_convert_exception (except);
652 return NULL;
653 }
654 }
655
656 /* If we have a type from the switch statement above, just return
657 that. */
658 if (rtype)
659 return rtype;
660
661 /* We don't have a type, so lookup the type. */
662 type_name = cp_comp_to_string (demangled, 10);
663 type = typy_lookup_typename (type_name, block);
664 xfree (type_name);
665
666 return type;
667 }
668
669 /* This is a helper function for typy_template_argument that is used
670 when the type does not have template symbols attached. It works by
671 parsing the type name. This happens with compilers, like older
672 versions of GCC, that do not emit DW_TAG_template_*. */
673
674 static PyObject *
675 typy_legacy_template_argument (struct type *type, const struct block *block,
676 int argno)
677 {
678 int i;
679 struct demangle_component *demangled;
680 struct demangle_parse_info *info;
681 const char *err;
682 struct type *argtype;
683 struct cleanup *cleanup;
684
685 if (TYPE_NAME (type) == NULL)
686 {
687 PyErr_SetString (PyExc_RuntimeError, _("Null type name."));
688 return NULL;
689 }
690
691 /* Note -- this is not thread-safe. */
692 info = cp_demangled_name_to_comp (TYPE_NAME (type), &err);
693 if (! info)
694 {
695 PyErr_SetString (PyExc_RuntimeError, err);
696 return NULL;
697 }
698 demangled = info->tree;
699 cleanup = make_cleanup_cp_demangled_name_parse_free (info);
700
701 /* Strip off component names. */
702 while (demangled->type == DEMANGLE_COMPONENT_QUAL_NAME
703 || demangled->type == DEMANGLE_COMPONENT_LOCAL_NAME)
704 demangled = demangled->u.s_binary.right;
705
706 if (demangled->type != DEMANGLE_COMPONENT_TEMPLATE)
707 {
708 do_cleanups (cleanup);
709 PyErr_SetString (PyExc_RuntimeError, _("Type is not a template."));
710 return NULL;
711 }
712
713 /* Skip from the template to the arguments. */
714 demangled = demangled->u.s_binary.right;
715
716 for (i = 0; demangled && i < argno; ++i)
717 demangled = demangled->u.s_binary.right;
718
719 if (! demangled)
720 {
721 do_cleanups (cleanup);
722 PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
723 argno);
724 return NULL;
725 }
726
727 argtype = typy_lookup_type (demangled->u.s_binary.left, block);
728 do_cleanups (cleanup);
729 if (! argtype)
730 return NULL;
731
732 return type_to_type_object (argtype);
733 }
734
735 static PyObject *
736 typy_template_argument (PyObject *self, PyObject *args)
737 {
738 int argno;
739 struct type *type = ((type_object *) self)->type;
740 const struct block *block = NULL;
741 PyObject *block_obj = NULL;
742 struct symbol *sym;
743 struct value *val = NULL;
744 volatile struct gdb_exception except;
745
746 if (! PyArg_ParseTuple (args, "i|O", &argno, &block_obj))
747 return NULL;
748
749 if (block_obj)
750 {
751 block = block_object_to_block (block_obj);
752 if (! block)
753 {
754 PyErr_SetString (PyExc_RuntimeError,
755 _("Second argument must be block."));
756 return NULL;
757 }
758 }
759
760 TRY_CATCH (except, RETURN_MASK_ALL)
761 {
762 type = check_typedef (type);
763 if (TYPE_CODE (type) == TYPE_CODE_REF)
764 type = check_typedef (TYPE_TARGET_TYPE (type));
765 }
766 GDB_PY_HANDLE_EXCEPTION (except);
767
768 /* We might not have DW_TAG_template_*, so try to parse the type's
769 name. This is inefficient if we do not have a template type --
770 but that is going to wind up as an error anyhow. */
771 if (! TYPE_N_TEMPLATE_ARGUMENTS (type))
772 return typy_legacy_template_argument (type, block, argno);
773
774 if (argno >= TYPE_N_TEMPLATE_ARGUMENTS (type))
775 {
776 PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
777 argno);
778 return NULL;
779 }
780
781 sym = TYPE_TEMPLATE_ARGUMENT (type, argno);
782 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
783 return type_to_type_object (SYMBOL_TYPE (sym));
784 else if (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT)
785 {
786 PyErr_Format (PyExc_RuntimeError,
787 _("Template argument is optimized out"));
788 return NULL;
789 }
790
791 TRY_CATCH (except, RETURN_MASK_ALL)
792 {
793 val = value_of_variable (sym, block);
794 }
795 GDB_PY_HANDLE_EXCEPTION (except);
796
797 return value_to_value_object (val);
798 }
799
800 static PyObject *
801 typy_str (PyObject *self)
802 {
803 volatile struct gdb_exception except;
804 char *thetype = NULL;
805 long length = 0;
806 PyObject *result;
807
808 TRY_CATCH (except, RETURN_MASK_ALL)
809 {
810 struct cleanup *old_chain;
811 struct ui_file *stb;
812
813 stb = mem_fileopen ();
814 old_chain = make_cleanup_ui_file_delete (stb);
815
816 type_print (type_object_to_type (self), "", stb, -1);
817
818 thetype = ui_file_xstrdup (stb, &length);
819 do_cleanups (old_chain);
820 }
821 if (except.reason < 0)
822 {
823 xfree (thetype);
824 GDB_PY_HANDLE_EXCEPTION (except);
825 }
826
827 result = PyUnicode_Decode (thetype, length, host_charset (), NULL);
828 xfree (thetype);
829
830 return result;
831 }
832
833 /* An entry in the type-equality bcache. */
834
835 typedef struct type_equality_entry
836 {
837 struct type *type1, *type2;
838 } type_equality_entry_d;
839
840 DEF_VEC_O (type_equality_entry_d);
841
842 /* A helper function to compare two strings. Returns 1 if they are
843 the same, 0 otherwise. Handles NULLs properly. */
844
845 static int
846 compare_strings (const char *s, const char *t)
847 {
848 if (s == NULL && t != NULL)
849 return 0;
850 else if (s != NULL && t == NULL)
851 return 0;
852 else if (s == NULL && t== NULL)
853 return 1;
854 return strcmp (s, t) == 0;
855 }
856
857 /* A helper function for typy_richcompare that checks two types for
858 "deep" equality. Returns Py_EQ if the types are considered the
859 same, Py_NE otherwise. */
860
861 static int
862 check_types_equal (struct type *type1, struct type *type2,
863 VEC (type_equality_entry_d) **worklist)
864 {
865 CHECK_TYPEDEF (type1);
866 CHECK_TYPEDEF (type2);
867
868 if (type1 == type2)
869 return Py_EQ;
870
871 if (TYPE_CODE (type1) != TYPE_CODE (type2)
872 || TYPE_LENGTH (type1) != TYPE_LENGTH (type2)
873 || TYPE_UNSIGNED (type1) != TYPE_UNSIGNED (type2)
874 || TYPE_NOSIGN (type1) != TYPE_NOSIGN (type2)
875 || TYPE_VARARGS (type1) != TYPE_VARARGS (type2)
876 || TYPE_VECTOR (type1) != TYPE_VECTOR (type2)
877 || TYPE_NOTTEXT (type1) != TYPE_NOTTEXT (type2)
878 || TYPE_INSTANCE_FLAGS (type1) != TYPE_INSTANCE_FLAGS (type2)
879 || TYPE_NFIELDS (type1) != TYPE_NFIELDS (type2))
880 return Py_NE;
881
882 if (!compare_strings (TYPE_TAG_NAME (type1), TYPE_TAG_NAME (type2)))
883 return Py_NE;
884 if (!compare_strings (TYPE_NAME (type1), TYPE_NAME (type2)))
885 return Py_NE;
886
887 if (TYPE_CODE (type1) == TYPE_CODE_RANGE)
888 {
889 if (memcmp (TYPE_RANGE_DATA (type1), TYPE_RANGE_DATA (type2),
890 sizeof (*TYPE_RANGE_DATA (type1))) != 0)
891 return Py_NE;
892 }
893 else
894 {
895 int i;
896
897 for (i = 0; i < TYPE_NFIELDS (type1); ++i)
898 {
899 const struct field *field1 = &TYPE_FIELD (type1, i);
900 const struct field *field2 = &TYPE_FIELD (type2, i);
901 struct type_equality_entry entry;
902
903 if (FIELD_ARTIFICIAL (*field1) != FIELD_ARTIFICIAL (*field2)
904 || FIELD_BITSIZE (*field1) != FIELD_BITSIZE (*field2)
905 || FIELD_LOC_KIND (*field1) != FIELD_LOC_KIND (*field2))
906 return Py_NE;
907 if (!compare_strings (FIELD_NAME (*field1), FIELD_NAME (*field2)))
908 return Py_NE;
909 switch (FIELD_LOC_KIND (*field1))
910 {
911 case FIELD_LOC_KIND_BITPOS:
912 if (FIELD_BITPOS (*field1) != FIELD_BITPOS (*field2))
913 return Py_NE;
914 break;
915 case FIELD_LOC_KIND_PHYSADDR:
916 if (FIELD_STATIC_PHYSADDR (*field1)
917 != FIELD_STATIC_PHYSADDR (*field2))
918 return Py_NE;
919 break;
920 case FIELD_LOC_KIND_PHYSNAME:
921 if (!compare_strings (FIELD_STATIC_PHYSNAME (*field1),
922 FIELD_STATIC_PHYSNAME (*field2)))
923 return Py_NE;
924 break;
925 case FIELD_LOC_KIND_DWARF_BLOCK:
926 {
927 struct dwarf2_locexpr_baton *block1, *block2;
928
929 block1 = FIELD_DWARF_BLOCK (*field1);
930 block2 = FIELD_DWARF_BLOCK (*field2);
931 if (block1->per_cu != block2->per_cu
932 || block1->size != block2->size
933 || memcmp (block1->data, block2->data, block1->size) != 0)
934 return Py_NE;
935 }
936 break;
937 default:
938 internal_error (__FILE__, __LINE__, _("Unsupported field kind "
939 "%d by check_types_equal"),
940 FIELD_LOC_KIND (*field1));
941 }
942
943 entry.type1 = FIELD_TYPE (*field1);
944 entry.type2 = FIELD_TYPE (*field2);
945 VEC_safe_push (type_equality_entry_d, *worklist, &entry);
946 }
947 }
948
949 if (TYPE_TARGET_TYPE (type1) != NULL)
950 {
951 struct type_equality_entry entry;
952 int added;
953
954 if (TYPE_TARGET_TYPE (type2) == NULL)
955 return Py_NE;
956
957 entry.type1 = TYPE_TARGET_TYPE (type1);
958 entry.type2 = TYPE_TARGET_TYPE (type2);
959 VEC_safe_push (type_equality_entry_d, *worklist, &entry);
960 }
961 else if (TYPE_TARGET_TYPE (type2) != NULL)
962 return Py_NE;
963
964 return Py_EQ;
965 }
966
967 /* Check types on a worklist for equality. Returns Py_NE if any pair
968 is not equal, Py_EQ if they are all considered equal. */
969
970 static int
971 check_types_worklist (VEC (type_equality_entry_d) **worklist,
972 struct bcache *cache)
973 {
974 while (!VEC_empty (type_equality_entry_d, *worklist))
975 {
976 struct type_equality_entry entry;
977 int added;
978
979 entry = *VEC_last (type_equality_entry_d, *worklist);
980 VEC_pop (type_equality_entry_d, *worklist);
981
982 /* If the type pair has already been visited, we know it is
983 ok. */
984 bcache_full (&entry, sizeof (entry), cache, &added);
985 if (!added)
986 continue;
987
988 if (check_types_equal (entry.type1, entry.type2, worklist) == Py_NE)
989 return Py_NE;
990 }
991
992 return Py_EQ;
993 }
994
995 /* Implement the richcompare method. */
996
997 static PyObject *
998 typy_richcompare (PyObject *self, PyObject *other, int op)
999 {
1000 int result = Py_NE;
1001 struct type *type1 = type_object_to_type (self);
1002 struct type *type2 = type_object_to_type (other);
1003 volatile struct gdb_exception except;
1004
1005 /* We can only compare ourselves to another Type object, and only
1006 for equality or inequality. */
1007 if (type2 == NULL || (op != Py_EQ && op != Py_NE))
1008 {
1009 Py_INCREF (Py_NotImplemented);
1010 return Py_NotImplemented;
1011 }
1012
1013 if (type1 == type2)
1014 result = Py_EQ;
1015 else
1016 {
1017 struct bcache *cache;
1018 VEC (type_equality_entry_d) *worklist = NULL;
1019 struct type_equality_entry entry;
1020
1021 cache = bcache_xmalloc (NULL, NULL);
1022
1023 entry.type1 = type1;
1024 entry.type2 = type2;
1025 VEC_safe_push (type_equality_entry_d, worklist, &entry);
1026
1027 TRY_CATCH (except, RETURN_MASK_ALL)
1028 {
1029 result = check_types_worklist (&worklist, cache);
1030 }
1031 /* check_types_worklist calls several nested Python helper
1032 functions, some of which can raise a GDB Exception, so we
1033 just check and convert here. If there is a GDB exception, a
1034 comparison is not capable (or trusted), so exit. */
1035 bcache_xfree (cache);
1036 VEC_free (type_equality_entry_d, worklist);
1037 GDB_PY_HANDLE_EXCEPTION (except);
1038 }
1039
1040 if (op == result)
1041 Py_RETURN_TRUE;
1042 Py_RETURN_FALSE;
1043 }
1044
1045 \f
1046
1047 static const struct objfile_data *typy_objfile_data_key;
1048
1049 static void
1050 save_objfile_types (struct objfile *objfile, void *datum)
1051 {
1052 type_object *obj = datum;
1053 htab_t copied_types;
1054 struct cleanup *cleanup;
1055
1056 /* This prevents another thread from freeing the objects we're
1057 operating on. */
1058 cleanup = ensure_python_env (get_objfile_arch (objfile), current_language);
1059
1060 copied_types = create_copied_types_hash (objfile);
1061
1062 while (obj)
1063 {
1064 type_object *next = obj->next;
1065
1066 htab_empty (copied_types);
1067
1068 obj->type = copy_type_recursive (objfile, obj->type, copied_types);
1069
1070 obj->next = NULL;
1071 obj->prev = NULL;
1072
1073 obj = next;
1074 }
1075
1076 htab_delete (copied_types);
1077
1078 do_cleanups (cleanup);
1079 }
1080
1081 static void
1082 set_type (type_object *obj, struct type *type)
1083 {
1084 obj->type = type;
1085 obj->prev = NULL;
1086 if (type && TYPE_OBJFILE (type))
1087 {
1088 struct objfile *objfile = TYPE_OBJFILE (type);
1089
1090 obj->next = objfile_data (objfile, typy_objfile_data_key);
1091 if (obj->next)
1092 obj->next->prev = obj;
1093 set_objfile_data (objfile, typy_objfile_data_key, obj);
1094 }
1095 else
1096 obj->next = NULL;
1097 }
1098
1099 static void
1100 typy_dealloc (PyObject *obj)
1101 {
1102 type_object *type = (type_object *) obj;
1103
1104 if (type->prev)
1105 type->prev->next = type->next;
1106 else if (type->type && TYPE_OBJFILE (type->type))
1107 {
1108 /* Must reset head of list. */
1109 struct objfile *objfile = TYPE_OBJFILE (type->type);
1110
1111 if (objfile)
1112 set_objfile_data (objfile, typy_objfile_data_key, type->next);
1113 }
1114 if (type->next)
1115 type->next->prev = type->prev;
1116
1117 type->ob_type->tp_free (type);
1118 }
1119
1120 /* Return number of fields ("length" of the field dictionary). */
1121
1122 static Py_ssize_t
1123 typy_length (PyObject *self)
1124 {
1125 struct type *type = ((type_object *) self)->type;
1126
1127 return TYPE_NFIELDS (type);
1128 }
1129
1130 /* Return a gdb.Field object for the field named by the argument. */
1131
1132 static PyObject *
1133 typy_getitem (PyObject *self, PyObject *key)
1134 {
1135 struct type *type = ((type_object *) self)->type;
1136 char *field;
1137 int i;
1138 volatile struct gdb_exception except;
1139
1140 field = python_string_to_host_string (key);
1141 if (field == NULL)
1142 return NULL;
1143
1144 /* We want just fields of this type, not of base types, so instead of
1145 using lookup_struct_elt_type, portions of that function are
1146 copied here. */
1147
1148 for (;;)
1149 {
1150 TRY_CATCH (except, RETURN_MASK_ALL)
1151 {
1152 CHECK_TYPEDEF (type);
1153 }
1154 GDB_PY_HANDLE_EXCEPTION (except);
1155
1156 if (TYPE_CODE (type) != TYPE_CODE_PTR
1157 && TYPE_CODE (type) != TYPE_CODE_REF)
1158 break;
1159 type = TYPE_TARGET_TYPE (type);
1160 }
1161
1162 for (i = 0; i < TYPE_NFIELDS (type); i++)
1163 {
1164 char *t_field_name = TYPE_FIELD_NAME (type, i);
1165
1166 if (t_field_name && (strcmp_iw (t_field_name, field) == 0))
1167 {
1168 return convert_field (type, i);
1169 }
1170 }
1171 PyErr_SetObject (PyExc_KeyError, key);
1172 return NULL;
1173 }
1174
1175 /* Implement the "get" method on the type object. This is the
1176 same as getitem if the key is present, but returns the supplied
1177 default value or None if the key is not found. */
1178
1179 static PyObject *
1180 typy_get (PyObject *self, PyObject *args)
1181 {
1182 PyObject *key, *defval = Py_None, *result;
1183
1184 if (!PyArg_UnpackTuple (args, "get", 1, 2, &key, &defval))
1185 return NULL;
1186
1187 result = typy_getitem (self, key);
1188 if (result != NULL)
1189 return result;
1190
1191 /* typy_getitem returned error status. If the exception is
1192 KeyError, clear the exception status and return the defval
1193 instead. Otherwise return the exception unchanged. */
1194 if (!PyErr_ExceptionMatches (PyExc_KeyError))
1195 return NULL;
1196
1197 PyErr_Clear ();
1198 Py_INCREF (defval);
1199 return defval;
1200 }
1201
1202 /* Implement the "has_key" method on the type object. */
1203
1204 static PyObject *
1205 typy_has_key (PyObject *self, PyObject *args)
1206 {
1207 struct type *type = ((type_object *) self)->type;
1208 const char *field;
1209 int i;
1210 volatile struct gdb_exception except;
1211
1212 if (!PyArg_ParseTuple (args, "s", &field))
1213 return NULL;
1214
1215 /* We want just fields of this type, not of base types, so instead of
1216 using lookup_struct_elt_type, portions of that function are
1217 copied here. */
1218
1219 for (;;)
1220 {
1221 TRY_CATCH (except, RETURN_MASK_ALL)
1222 {
1223 CHECK_TYPEDEF (type);
1224 }
1225 GDB_PY_HANDLE_EXCEPTION (except);
1226 if (TYPE_CODE (type) != TYPE_CODE_PTR
1227 && TYPE_CODE (type) != TYPE_CODE_REF)
1228 break;
1229 type = TYPE_TARGET_TYPE (type);
1230 }
1231
1232 for (i = 0; i < TYPE_NFIELDS (type); i++)
1233 {
1234 char *t_field_name = TYPE_FIELD_NAME (type, i);
1235
1236 if (t_field_name && (strcmp_iw (t_field_name, field) == 0))
1237 Py_RETURN_TRUE;
1238 }
1239 Py_RETURN_FALSE;
1240 }
1241
1242 /* Make an iterator object to iterate over keys, values, or items. */
1243
1244 static PyObject *
1245 typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind)
1246 {
1247 typy_iterator_object *typy_iter_obj;
1248
1249 typy_iter_obj = PyObject_New (typy_iterator_object,
1250 &type_iterator_object_type);
1251 if (typy_iter_obj == NULL)
1252 return NULL;
1253
1254 typy_iter_obj->field = 0;
1255 typy_iter_obj->kind = kind;
1256 Py_INCREF (self);
1257 typy_iter_obj->source = (type_object *) self;
1258
1259 return (PyObject *) typy_iter_obj;
1260 }
1261
1262 /* iteritems() method. */
1263
1264 static PyObject *
1265 typy_iteritems (PyObject *self, PyObject *args)
1266 {
1267 return typy_make_iter (self, iter_items);
1268 }
1269
1270 /* iterkeys() method. */
1271
1272 static PyObject *
1273 typy_iterkeys (PyObject *self, PyObject *args)
1274 {
1275 return typy_make_iter (self, iter_keys);
1276 }
1277
1278 /* Iterating over the class, same as iterkeys except for the function
1279 signature. */
1280
1281 static PyObject *
1282 typy_iter (PyObject *self)
1283 {
1284 return typy_make_iter (self, iter_keys);
1285 }
1286
1287 /* itervalues() method. */
1288
1289 static PyObject *
1290 typy_itervalues (PyObject *self, PyObject *args)
1291 {
1292 return typy_make_iter (self, iter_values);
1293 }
1294
1295 /* Return a reference to the type iterator. */
1296
1297 static PyObject *
1298 typy_iterator_iter (PyObject *self)
1299 {
1300 Py_INCREF (self);
1301 return self;
1302 }
1303
1304 /* Return the next field in the iteration through the list of fields
1305 of the type. */
1306
1307 static PyObject *
1308 typy_iterator_iternext (PyObject *self)
1309 {
1310 typy_iterator_object *iter_obj = (typy_iterator_object *) self;
1311 struct type *type = iter_obj->source->type;
1312 int i;
1313 PyObject *result;
1314
1315 if (iter_obj->field < TYPE_NFIELDS (type))
1316 {
1317 result = make_fielditem (type, iter_obj->field, iter_obj->kind);
1318 if (result != NULL)
1319 iter_obj->field++;
1320 return result;
1321 }
1322
1323 return NULL;
1324 }
1325
1326 static void
1327 typy_iterator_dealloc (PyObject *obj)
1328 {
1329 typy_iterator_object *iter_obj = (typy_iterator_object *) obj;
1330
1331 Py_DECREF (iter_obj->source);
1332 }
1333
1334 /* Create a new Type referring to TYPE. */
1335 PyObject *
1336 type_to_type_object (struct type *type)
1337 {
1338 type_object *type_obj;
1339
1340 type_obj = PyObject_New (type_object, &type_object_type);
1341 if (type_obj)
1342 set_type (type_obj, type);
1343
1344 return (PyObject *) type_obj;
1345 }
1346
1347 struct type *
1348 type_object_to_type (PyObject *obj)
1349 {
1350 if (! PyObject_TypeCheck (obj, &type_object_type))
1351 return NULL;
1352 return ((type_object *) obj)->type;
1353 }
1354
1355 \f
1356
1357 /* Implementation of gdb.lookup_type. */
1358 PyObject *
1359 gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw)
1360 {
1361 static char *keywords[] = { "name", "block", NULL };
1362 const char *type_name = NULL;
1363 struct type *type = NULL;
1364 PyObject *block_obj = NULL;
1365 const struct block *block = NULL;
1366
1367 if (! PyArg_ParseTupleAndKeywords (args, kw, "s|O", keywords,
1368 &type_name, &block_obj))
1369 return NULL;
1370
1371 if (block_obj)
1372 {
1373 block = block_object_to_block (block_obj);
1374 if (! block)
1375 {
1376 PyErr_SetString (PyExc_RuntimeError,
1377 _("'block' argument must be a Block."));
1378 return NULL;
1379 }
1380 }
1381
1382 type = typy_lookup_typename (type_name, block);
1383 if (! type)
1384 return NULL;
1385
1386 return (PyObject *) type_to_type_object (type);
1387 }
1388
1389 void
1390 gdbpy_initialize_types (void)
1391 {
1392 int i;
1393
1394 typy_objfile_data_key
1395 = register_objfile_data_with_cleanup (save_objfile_types, NULL);
1396
1397 if (PyType_Ready (&type_object_type) < 0)
1398 return;
1399 if (PyType_Ready (&field_object_type) < 0)
1400 return;
1401 if (PyType_Ready (&type_iterator_object_type) < 0)
1402 return;
1403
1404 for (i = 0; pyty_codes[i].name; ++i)
1405 {
1406 if (PyModule_AddIntConstant (gdb_module,
1407 /* Cast needed for Python 2.4. */
1408 (char *) pyty_codes[i].name,
1409 pyty_codes[i].code) < 0)
1410 return;
1411 }
1412
1413 Py_INCREF (&type_object_type);
1414 PyModule_AddObject (gdb_module, "Type", (PyObject *) &type_object_type);
1415
1416 Py_INCREF (&type_iterator_object_type);
1417 PyModule_AddObject (gdb_module, "TypeIterator",
1418 (PyObject *) &type_iterator_object_type);
1419
1420 Py_INCREF (&field_object_type);
1421 PyModule_AddObject (gdb_module, "Field", (PyObject *) &field_object_type);
1422 }
1423
1424 \f
1425
1426 static PyGetSetDef type_object_getset[] =
1427 {
1428 { "code", typy_get_code, NULL,
1429 "The code for this type.", NULL },
1430 { "sizeof", typy_get_sizeof, NULL,
1431 "The size of this type, in bytes.", NULL },
1432 { "tag", typy_get_tag, NULL,
1433 "The tag name for this type, or None.", NULL },
1434 { NULL }
1435 };
1436
1437 static PyMethodDef type_object_methods[] =
1438 {
1439 { "array", typy_array, METH_VARARGS,
1440 "array (N) -> Type\n\
1441 Return a type which represents an array of N objects of this type." },
1442 { "__contains__", typy_has_key, METH_VARARGS,
1443 "T.__contains__(k) -> True if T has a field named k, else False" },
1444 { "const", typy_const, METH_NOARGS,
1445 "const () -> Type\n\
1446 Return a const variant of this type." },
1447 { "fields", typy_fields, METH_NOARGS,
1448 "fields () -> list\n\
1449 Return a list holding all the fields of this type.\n\
1450 Each field is a gdb.Field object." },
1451 { "get", typy_get, METH_VARARGS,
1452 "T.get(k[,default]) -> returns field named k in T, if it exists;\n\
1453 otherwise returns default, if supplied, or None if not." },
1454 { "has_key", typy_has_key, METH_VARARGS,
1455 "T.has_key(k) -> True if T has a field named k, else False" },
1456 { "items", typy_items, METH_NOARGS,
1457 "items () -> list\n\
1458 Return a list of (name, field) pairs of this type.\n\
1459 Each field is a gdb.Field object." },
1460 { "iteritems", typy_iteritems, METH_NOARGS,
1461 "iteritems () -> an iterator over the (name, field)\n\
1462 pairs of this type. Each field is a gdb.Field object." },
1463 { "iterkeys", typy_iterkeys, METH_NOARGS,
1464 "iterkeys () -> an iterator over the field names of this type." },
1465 { "itervalues", typy_itervalues, METH_NOARGS,
1466 "itervalues () -> an iterator over the fields of this type.\n\
1467 Each field is a gdb.Field object." },
1468 { "keys", typy_field_names, METH_NOARGS,
1469 "keys () -> list\n\
1470 Return a list holding all the fields names of this type." },
1471 { "pointer", typy_pointer, METH_NOARGS,
1472 "pointer () -> Type\n\
1473 Return a type of pointer to this type." },
1474 { "range", typy_range, METH_NOARGS,
1475 "range () -> tuple\n\
1476 Return a tuple containing the lower and upper range for this type."},
1477 { "reference", typy_reference, METH_NOARGS,
1478 "reference () -> Type\n\
1479 Return a type of reference to this type." },
1480 { "strip_typedefs", typy_strip_typedefs, METH_NOARGS,
1481 "strip_typedefs () -> Type\n\
1482 Return a type formed by stripping this type of all typedefs."},
1483 { "target", typy_target, METH_NOARGS,
1484 "target () -> Type\n\
1485 Return the target type of this type." },
1486 { "template_argument", typy_template_argument, METH_VARARGS,
1487 "template_argument (arg, [block]) -> Type\n\
1488 Return the type of a template argument." },
1489 { "unqualified", typy_unqualified, METH_NOARGS,
1490 "unqualified () -> Type\n\
1491 Return a variant of this type without const or volatile attributes." },
1492 { "values", typy_fields, METH_NOARGS,
1493 "values () -> list\n\
1494 Return a list holding all the fields of this type.\n\
1495 Each field is a gdb.Field object." },
1496 { "volatile", typy_volatile, METH_NOARGS,
1497 "volatile () -> Type\n\
1498 Return a volatile variant of this type" },
1499 { NULL }
1500 };
1501
1502 static PyMappingMethods typy_mapping = {
1503 typy_length,
1504 typy_getitem,
1505 NULL /* no "set" method */
1506 };
1507
1508 static PyTypeObject type_object_type =
1509 {
1510 PyObject_HEAD_INIT (NULL)
1511 0, /*ob_size*/
1512 "gdb.Type", /*tp_name*/
1513 sizeof (type_object), /*tp_basicsize*/
1514 0, /*tp_itemsize*/
1515 typy_dealloc, /*tp_dealloc*/
1516 0, /*tp_print*/
1517 0, /*tp_getattr*/
1518 0, /*tp_setattr*/
1519 0, /*tp_compare*/
1520 0, /*tp_repr*/
1521 0, /*tp_as_number*/
1522 0, /*tp_as_sequence*/
1523 &typy_mapping, /*tp_as_mapping*/
1524 0, /*tp_hash */
1525 0, /*tp_call*/
1526 typy_str, /*tp_str*/
1527 0, /*tp_getattro*/
1528 0, /*tp_setattro*/
1529 0, /*tp_as_buffer*/
1530 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
1531 "GDB type object", /* tp_doc */
1532 0, /* tp_traverse */
1533 0, /* tp_clear */
1534 typy_richcompare, /* tp_richcompare */
1535 0, /* tp_weaklistoffset */
1536 typy_iter, /* tp_iter */
1537 0, /* tp_iternext */
1538 type_object_methods, /* tp_methods */
1539 0, /* tp_members */
1540 type_object_getset, /* tp_getset */
1541 0, /* tp_base */
1542 0, /* tp_dict */
1543 0, /* tp_descr_get */
1544 0, /* tp_descr_set */
1545 0, /* tp_dictoffset */
1546 0, /* tp_init */
1547 0, /* tp_alloc */
1548 0, /* tp_new */
1549 };
1550
1551 static PyTypeObject field_object_type =
1552 {
1553 PyObject_HEAD_INIT (NULL)
1554 0, /*ob_size*/
1555 "gdb.Field", /*tp_name*/
1556 sizeof (field_object), /*tp_basicsize*/
1557 0, /*tp_itemsize*/
1558 field_dealloc, /*tp_dealloc*/
1559 0, /*tp_print*/
1560 0, /*tp_getattr*/
1561 0, /*tp_setattr*/
1562 0, /*tp_compare*/
1563 0, /*tp_repr*/
1564 0, /*tp_as_number*/
1565 0, /*tp_as_sequence*/
1566 0, /*tp_as_mapping*/
1567 0, /*tp_hash */
1568 0, /*tp_call*/
1569 0, /*tp_str*/
1570 0, /*tp_getattro*/
1571 0, /*tp_setattro*/
1572 0, /*tp_as_buffer*/
1573 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
1574 "GDB field object", /* tp_doc */
1575 0, /* tp_traverse */
1576 0, /* tp_clear */
1577 0, /* tp_richcompare */
1578 0, /* tp_weaklistoffset */
1579 0, /* tp_iter */
1580 0, /* tp_iternext */
1581 0, /* tp_methods */
1582 0, /* tp_members */
1583 0, /* tp_getset */
1584 0, /* tp_base */
1585 0, /* tp_dict */
1586 0, /* tp_descr_get */
1587 0, /* tp_descr_set */
1588 offsetof (field_object, dict), /* tp_dictoffset */
1589 0, /* tp_init */
1590 0, /* tp_alloc */
1591 0, /* tp_new */
1592 };
1593
1594 static PyTypeObject type_iterator_object_type = {
1595 PyObject_HEAD_INIT (NULL)
1596 0, /*ob_size*/
1597 "gdb.TypeIterator", /*tp_name*/
1598 sizeof (typy_iterator_object), /*tp_basicsize*/
1599 0, /*tp_itemsize*/
1600 typy_iterator_dealloc, /*tp_dealloc*/
1601 0, /*tp_print*/
1602 0, /*tp_getattr*/
1603 0, /*tp_setattr*/
1604 0, /*tp_compare*/
1605 0, /*tp_repr*/
1606 0, /*tp_as_number*/
1607 0, /*tp_as_sequence*/
1608 0, /*tp_as_mapping*/
1609 0, /*tp_hash */
1610 0, /*tp_call*/
1611 0, /*tp_str*/
1612 0, /*tp_getattro*/
1613 0, /*tp_setattro*/
1614 0, /*tp_as_buffer*/
1615 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
1616 "GDB type iterator object", /*tp_doc */
1617 0, /*tp_traverse */
1618 0, /*tp_clear */
1619 0, /*tp_richcompare */
1620 0, /*tp_weaklistoffset */
1621 typy_iterator_iter, /*tp_iter */
1622 typy_iterator_iternext, /*tp_iternext */
1623 0 /*tp_methods */
1624 };