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