]> Git Repo - binutils.git/blob - gdb/python/py-type.c
229fde37efec9ccd547bf4e7a3e9accab71c0b52
[binutils.git] / gdb / python / py-type.c
1 /* Python interface to types.
2
3    Copyright (C) 2008-2020 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 typedef struct pyty_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 pyty_type_object *prev;
40   struct pyty_type_object *next;
41 } type_object;
42
43 extern PyTypeObject type_object_type
44     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("type_object");
45
46 /* A Field object.  */
47 typedef struct pyty_field_object
48 {
49   PyObject_HEAD
50
51   /* Dictionary holding our attributes.  */
52   PyObject *dict;
53 } field_object;
54
55 extern PyTypeObject field_object_type
56     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("field_object");
57
58 /* A type iterator object.  */
59 typedef struct {
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   struct pyty_type_object *source;
67 } typy_iterator_object;
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 PyInt_FromLong (type->code ());
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.reset (PyLong_FromLong (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 (type);
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_FUNC)
475     {
476       PyErr_SetString (PyExc_TypeError,
477                        "Type is not a structure, union, enum, or function type.");
478       return NULL;
479     }
480
481   return type;
482 }
483
484 /* Helper for typy_array and typy_vector.  */
485
486 static PyObject *
487 typy_array_1 (PyObject *self, PyObject *args, int is_vector)
488 {
489   long n1, n2;
490   PyObject *n2_obj = NULL;
491   struct type *array = NULL;
492   struct type *type = ((type_object *) self)->type;
493
494   if (! PyArg_ParseTuple (args, "l|O", &n1, &n2_obj))
495     return NULL;
496
497   if (n2_obj)
498     {
499       if (!PyInt_Check (n2_obj))
500         {
501           PyErr_SetString (PyExc_RuntimeError,
502                            _("Array bound must be an integer"));
503           return NULL;
504         }
505
506       if (! gdb_py_int_as_long (n2_obj, &n2))
507         return NULL;
508     }
509   else
510     {
511       n2 = n1;
512       n1 = 0;
513     }
514
515   if (n2 < n1 - 1) /* Note: An empty array has n2 == n1 - 1.  */
516     {
517       PyErr_SetString (PyExc_ValueError,
518                        _("Array length must not be negative"));
519       return NULL;
520     }
521
522   try
523     {
524       array = lookup_array_range_type (type, n1, n2);
525       if (is_vector)
526         make_vector_type (array);
527     }
528   catch (const gdb_exception &except)
529     {
530       GDB_PY_HANDLE_EXCEPTION (except);
531     }
532
533   return type_to_type_object (array);
534 }
535
536 /* Return an array type.  */
537
538 static PyObject *
539 typy_array (PyObject *self, PyObject *args)
540 {
541   return typy_array_1 (self, args, 0);
542 }
543
544 /* Return a vector type.  */
545
546 static PyObject *
547 typy_vector (PyObject *self, PyObject *args)
548 {
549   return typy_array_1 (self, args, 1);
550 }
551
552 /* Return a Type object which represents a pointer to SELF.  */
553 static PyObject *
554 typy_pointer (PyObject *self, PyObject *args)
555 {
556   struct type *type = ((type_object *) self)->type;
557
558   try
559     {
560       type = lookup_pointer_type (type);
561     }
562   catch (const gdb_exception &except)
563     {
564       GDB_PY_HANDLE_EXCEPTION (except);
565     }
566
567   return type_to_type_object (type);
568 }
569
570 /* Return the range of a type represented by SELF.  The return type is
571    a tuple.  The first element of the tuple contains the low bound,
572    while the second element of the tuple contains the high bound.  */
573 static PyObject *
574 typy_range (PyObject *self, PyObject *args)
575 {
576   struct type *type = ((type_object *) self)->type;
577   /* Initialize these to appease GCC warnings.  */
578   LONGEST low = 0, high = 0;
579
580   if (type->code () != TYPE_CODE_ARRAY
581       && type->code () != TYPE_CODE_STRING
582       && type->code () != TYPE_CODE_RANGE)
583     {
584       PyErr_SetString (PyExc_RuntimeError,
585                        _("This type does not have a range."));
586       return NULL;
587     }
588
589   switch (type->code ())
590     {
591     case TYPE_CODE_ARRAY:
592     case TYPE_CODE_STRING:
593     case TYPE_CODE_RANGE:
594       low = type->bounds ()->low.const_val ();
595       high = type->bounds ()->high.const_val ();;
596       break;
597     }
598
599   gdbpy_ref<> low_bound (PyLong_FromLong (low));
600   if (low_bound == NULL)
601     return NULL;
602
603   gdbpy_ref<> high_bound (PyLong_FromLong (high));
604   if (high_bound == NULL)
605     return NULL;
606
607   gdbpy_ref<> result (PyTuple_New (2));
608   if (result == NULL)
609     return NULL;
610
611   if (PyTuple_SetItem (result.get (), 0, low_bound.release ()) != 0
612       || PyTuple_SetItem (result.get (), 1, high_bound.release ()) != 0)
613     return NULL;
614   return result.release ();
615 }
616
617 /* Return a Type object which represents a reference to SELF.  */
618 static PyObject *
619 typy_reference (PyObject *self, PyObject *args)
620 {
621   struct type *type = ((type_object *) self)->type;
622
623   try
624     {
625       type = lookup_lvalue_reference_type (type);
626     }
627   catch (const gdb_exception &except)
628     {
629       GDB_PY_HANDLE_EXCEPTION (except);
630     }
631
632   return type_to_type_object (type);
633 }
634
635 /* Return a Type object which represents the target type of SELF.  */
636 static PyObject *
637 typy_target (PyObject *self, PyObject *args)
638 {
639   struct type *type = ((type_object *) self)->type;
640
641   if (!TYPE_TARGET_TYPE (type))
642     {
643       PyErr_SetString (PyExc_RuntimeError,
644                        _("Type does not have a target."));
645       return NULL;
646     }
647
648   return type_to_type_object (TYPE_TARGET_TYPE (type));
649 }
650
651 /* Return a const-qualified type variant.  */
652 static PyObject *
653 typy_const (PyObject *self, PyObject *args)
654 {
655   struct type *type = ((type_object *) self)->type;
656
657   try
658     {
659       type = make_cv_type (1, 0, type, NULL);
660     }
661   catch (const gdb_exception &except)
662     {
663       GDB_PY_HANDLE_EXCEPTION (except);
664     }
665
666   return type_to_type_object (type);
667 }
668
669 /* Return a volatile-qualified type variant.  */
670 static PyObject *
671 typy_volatile (PyObject *self, PyObject *args)
672 {
673   struct type *type = ((type_object *) self)->type;
674
675   try
676     {
677       type = make_cv_type (0, 1, type, NULL);
678     }
679   catch (const gdb_exception &except)
680     {
681       GDB_PY_HANDLE_EXCEPTION (except);
682     }
683
684   return type_to_type_object (type);
685 }
686
687 /* Return an unqualified type variant.  */
688 static PyObject *
689 typy_unqualified (PyObject *self, PyObject *args)
690 {
691   struct type *type = ((type_object *) self)->type;
692
693   try
694     {
695       type = make_cv_type (0, 0, type, NULL);
696     }
697   catch (const gdb_exception &except)
698     {
699       GDB_PY_HANDLE_EXCEPTION (except);
700     }
701
702   return type_to_type_object (type);
703 }
704
705 /* Return the size of the type represented by SELF, in bytes.  */
706 static PyObject *
707 typy_get_sizeof (PyObject *self, void *closure)
708 {
709   struct type *type = ((type_object *) self)->type;
710
711   bool size_varies = false;
712   try
713     {
714       check_typedef (type);
715
716       size_varies = TYPE_HAS_DYNAMIC_LENGTH (type);
717     }
718   catch (const gdb_exception &except)
719     {
720     }
721
722   /* Ignore exceptions.  */
723
724   if (size_varies)
725     Py_RETURN_NONE;
726   return gdb_py_object_from_longest (TYPE_LENGTH (type)).release ();
727 }
728
729 /* Return the alignment of the type represented by SELF, in bytes.  */
730 static PyObject *
731 typy_get_alignof (PyObject *self, void *closure)
732 {
733   struct type *type = ((type_object *) self)->type;
734
735   ULONGEST align = 0;
736   try
737     {
738       align = type_align (type);
739     }
740   catch (const gdb_exception &except)
741     {
742       align = 0;
743     }
744
745   /* Ignore exceptions.  */
746
747   return gdb_py_object_from_ulongest (align).release ();
748 }
749
750 /* Return whether or not the type is dynamic.  */
751 static PyObject *
752 typy_get_dynamic (PyObject *self, void *closure)
753 {
754   struct type *type = ((type_object *) self)->type;
755
756   bool result = false;
757   try
758     {
759       result = is_dynamic_type (type);
760     }
761   catch (const gdb_exception &except)
762     {
763       /* Ignore exceptions.  */
764     }
765
766   if (result)
767     Py_RETURN_TRUE;
768   Py_RETURN_FALSE;
769 }
770
771 static struct type *
772 typy_lookup_typename (const char *type_name, const struct block *block)
773 {
774   struct type *type = NULL;
775
776   try
777     {
778       if (startswith (type_name, "struct "))
779         type = lookup_struct (type_name + 7, NULL);
780       else if (startswith (type_name, "union "))
781         type = lookup_union (type_name + 6, NULL);
782       else if (startswith (type_name, "enum "))
783         type = lookup_enum (type_name + 5, NULL);
784       else
785         type = lookup_typename (python_language,
786                                 type_name, block, 0);
787     }
788   catch (const gdb_exception &except)
789     {
790       GDB_PY_HANDLE_EXCEPTION (except);
791     }
792
793   return type;
794 }
795
796 static struct type *
797 typy_lookup_type (struct demangle_component *demangled,
798                   const struct block *block)
799 {
800   struct type *type, *rtype = NULL;
801   enum demangle_component_type demangled_type;
802
803   /* Save the type: typy_lookup_type() may (indirectly) overwrite
804      memory pointed by demangled.  */
805   demangled_type = demangled->type;
806
807   if (demangled_type == DEMANGLE_COMPONENT_POINTER
808       || demangled_type == DEMANGLE_COMPONENT_REFERENCE
809       || demangled_type == DEMANGLE_COMPONENT_RVALUE_REFERENCE
810       || demangled_type == DEMANGLE_COMPONENT_CONST
811       || demangled_type == DEMANGLE_COMPONENT_VOLATILE)
812     {
813       type = typy_lookup_type (demangled->u.s_binary.left, block);
814       if (! type)
815         return NULL;
816
817       try
818         {
819           /* If the demangled_type matches with one of the types
820              below, run the corresponding function and save the type
821              to return later.  We cannot just return here as we are in
822              an exception handler.  */
823           switch (demangled_type)
824             {
825             case DEMANGLE_COMPONENT_REFERENCE:
826               rtype = lookup_lvalue_reference_type (type);
827               break;
828             case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
829               rtype = lookup_rvalue_reference_type (type);
830               break;
831             case DEMANGLE_COMPONENT_POINTER:
832               rtype = lookup_pointer_type (type);
833               break;
834             case DEMANGLE_COMPONENT_CONST:
835               rtype = make_cv_type (1, 0, type, NULL);
836               break;
837             case DEMANGLE_COMPONENT_VOLATILE:
838               rtype = make_cv_type (0, 1, type, NULL);
839               break;
840             }
841         }
842       catch (const gdb_exception &except)
843         {
844           GDB_PY_HANDLE_EXCEPTION (except);
845         }
846     }
847
848   /* If we have a type from the switch statement above, just return
849      that.  */
850   if (rtype)
851     return rtype;
852
853   /* We don't have a type, so lookup the type.  */
854   gdb::unique_xmalloc_ptr<char> type_name = cp_comp_to_string (demangled, 10);
855   return typy_lookup_typename (type_name.get (), block);
856 }
857
858 /* This is a helper function for typy_template_argument that is used
859    when the type does not have template symbols attached.  It works by
860    parsing the type name.  This happens with compilers, like older
861    versions of GCC, that do not emit DW_TAG_template_*.  */
862
863 static PyObject *
864 typy_legacy_template_argument (struct type *type, const struct block *block,
865                                int argno)
866 {
867   int i;
868   struct demangle_component *demangled;
869   std::unique_ptr<demangle_parse_info> info;
870   std::string err;
871   struct type *argtype;
872
873   if (type->name () == NULL)
874     {
875       PyErr_SetString (PyExc_RuntimeError, _("Null type name."));
876       return NULL;
877     }
878
879   try
880     {
881       /* Note -- this is not thread-safe.  */
882       info = cp_demangled_name_to_comp (type->name (), &err);
883     }
884   catch (const gdb_exception &except)
885     {
886       GDB_PY_HANDLE_EXCEPTION (except);
887     }
888
889   if (! info)
890     {
891       PyErr_SetString (PyExc_RuntimeError, err.c_str ());
892       return NULL;
893     }
894   demangled = info->tree;
895
896   /* Strip off component names.  */
897   while (demangled->type == DEMANGLE_COMPONENT_QUAL_NAME
898          || demangled->type == DEMANGLE_COMPONENT_LOCAL_NAME)
899     demangled = demangled->u.s_binary.right;
900
901   if (demangled->type != DEMANGLE_COMPONENT_TEMPLATE)
902     {
903       PyErr_SetString (PyExc_RuntimeError, _("Type is not a template."));
904       return NULL;
905     }
906
907   /* Skip from the template to the arguments.  */
908   demangled = demangled->u.s_binary.right;
909
910   for (i = 0; demangled && i < argno; ++i)
911     demangled = demangled->u.s_binary.right;
912
913   if (! demangled)
914     {
915       PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
916                     argno);
917       return NULL;
918     }
919
920   argtype = typy_lookup_type (demangled->u.s_binary.left, block);
921   if (! argtype)
922     return NULL;
923
924   return type_to_type_object (argtype);
925 }
926
927 static PyObject *
928 typy_template_argument (PyObject *self, PyObject *args)
929 {
930   int argno;
931   struct type *type = ((type_object *) self)->type;
932   const struct block *block = NULL;
933   PyObject *block_obj = NULL;
934   struct symbol *sym;
935   struct value *val = NULL;
936
937   if (! PyArg_ParseTuple (args, "i|O", &argno, &block_obj))
938     return NULL;
939
940   if (argno < 0)
941     {
942       PyErr_SetString (PyExc_RuntimeError,
943                        _("Template argument number must be non-negative"));
944       return NULL;
945     }
946
947   if (block_obj)
948     {
949       block = block_object_to_block (block_obj);
950       if (! block)
951         {
952           PyErr_SetString (PyExc_RuntimeError,
953                            _("Second argument must be block."));
954           return NULL;
955         }
956     }
957
958   try
959     {
960       type = check_typedef (type);
961       if (TYPE_IS_REFERENCE (type))
962         type = check_typedef (TYPE_TARGET_TYPE (type));
963     }
964   catch (const gdb_exception &except)
965     {
966       GDB_PY_HANDLE_EXCEPTION (except);
967     }
968
969   /* We might not have DW_TAG_template_*, so try to parse the type's
970      name.  This is inefficient if we do not have a template type --
971      but that is going to wind up as an error anyhow.  */
972   if (! TYPE_N_TEMPLATE_ARGUMENTS (type))
973     return typy_legacy_template_argument (type, block, argno);
974
975   if (argno >= TYPE_N_TEMPLATE_ARGUMENTS (type))
976     {
977       PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
978                     argno);
979       return NULL;
980     }
981
982   sym = TYPE_TEMPLATE_ARGUMENT (type, argno);
983   if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
984     return type_to_type_object (SYMBOL_TYPE (sym));
985   else if (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT)
986     {
987       PyErr_Format (PyExc_RuntimeError,
988                     _("Template argument is optimized out"));
989       return NULL;
990     }
991
992   try
993     {
994       val = value_of_variable (sym, block);
995     }
996   catch (const gdb_exception &except)
997     {
998       GDB_PY_HANDLE_EXCEPTION (except);
999     }
1000
1001   return value_to_value_object (val);
1002 }
1003
1004 static PyObject *
1005 typy_str (PyObject *self)
1006 {
1007   string_file thetype;
1008
1009   try
1010     {
1011       LA_PRINT_TYPE (type_object_to_type (self), "", &thetype, -1, 0,
1012                      &type_print_raw_options);
1013     }
1014   catch (const gdb_exception &except)
1015     {
1016       GDB_PY_HANDLE_EXCEPTION (except);
1017     }
1018
1019   return PyUnicode_Decode (thetype.c_str (), thetype.size (),
1020                            host_charset (), NULL);
1021 }
1022
1023 /* Implement the richcompare method.  */
1024
1025 static PyObject *
1026 typy_richcompare (PyObject *self, PyObject *other, int op)
1027 {
1028   bool result = false;
1029   struct type *type1 = type_object_to_type (self);
1030   struct type *type2 = type_object_to_type (other);
1031
1032   /* We can only compare ourselves to another Type object, and only
1033      for equality or inequality.  */
1034   if (type2 == NULL || (op != Py_EQ && op != Py_NE))
1035     {
1036       Py_INCREF (Py_NotImplemented);
1037       return Py_NotImplemented;
1038     }
1039
1040   if (type1 == type2)
1041     result = true;
1042   else
1043     {
1044       try
1045         {
1046           result = types_deeply_equal (type1, type2);
1047         }
1048       catch (const gdb_exception &except)
1049         {
1050           /* If there is a GDB exception, a comparison is not capable
1051              (or trusted), so exit.  */
1052           GDB_PY_HANDLE_EXCEPTION (except);
1053         }
1054     }
1055
1056   if (op == (result ? Py_EQ : Py_NE))
1057     Py_RETURN_TRUE;
1058   Py_RETURN_FALSE;
1059 }
1060
1061 \f
1062
1063 static const struct objfile_data *typy_objfile_data_key;
1064
1065 static void
1066 save_objfile_types (struct objfile *objfile, void *datum)
1067 {
1068   type_object *obj = (type_object *) datum;
1069   htab_t copied_types;
1070
1071   if (!gdb_python_initialized)
1072     return;
1073
1074   /* This prevents another thread from freeing the objects we're
1075      operating on.  */
1076   gdbpy_enter enter_py (objfile->arch (), current_language);
1077
1078   copied_types = create_copied_types_hash (objfile);
1079
1080   while (obj)
1081     {
1082       type_object *next = obj->next;
1083
1084       htab_empty (copied_types);
1085
1086       obj->type = copy_type_recursive (objfile, obj->type, copied_types);
1087
1088       obj->next = NULL;
1089       obj->prev = NULL;
1090
1091       obj = next;
1092     }
1093
1094   htab_delete (copied_types);
1095 }
1096
1097 static void
1098 set_type (type_object *obj, struct type *type)
1099 {
1100   obj->type = type;
1101   obj->prev = NULL;
1102   if (type && TYPE_OBJFILE (type))
1103     {
1104       struct objfile *objfile = TYPE_OBJFILE (type);
1105
1106       obj->next = ((struct pyty_type_object *)
1107                    objfile_data (objfile, typy_objfile_data_key));
1108       if (obj->next)
1109         obj->next->prev = obj;
1110       set_objfile_data (objfile, typy_objfile_data_key, obj);
1111     }
1112   else
1113     obj->next = NULL;
1114 }
1115
1116 static void
1117 typy_dealloc (PyObject *obj)
1118 {
1119   type_object *type = (type_object *) obj;
1120
1121   if (type->prev)
1122     type->prev->next = type->next;
1123   else if (type->type && TYPE_OBJFILE (type->type))
1124     {
1125       /* Must reset head of list.  */
1126       struct objfile *objfile = TYPE_OBJFILE (type->type);
1127
1128       if (objfile)
1129         set_objfile_data (objfile, typy_objfile_data_key, type->next);
1130     }
1131   if (type->next)
1132     type->next->prev = type->prev;
1133
1134   Py_TYPE (type)->tp_free (type);
1135 }
1136
1137 /* Return number of fields ("length" of the field dictionary).  */
1138
1139 static Py_ssize_t
1140 typy_length (PyObject *self)
1141 {
1142   struct type *type = ((type_object *) self)->type;
1143
1144   type = typy_get_composite (type);
1145   if (type == NULL)
1146     return -1;
1147
1148   return type->num_fields ();
1149 }
1150
1151 /* Implements boolean evaluation of gdb.Type.  Handle this like other
1152    Python objects that don't have a meaningful truth value -- all
1153    values are true.  */
1154
1155 static int
1156 typy_nonzero (PyObject *self)
1157 {
1158   return 1;
1159 }
1160
1161 /* Return optimized out value of this type.  */
1162
1163 static PyObject *
1164 typy_optimized_out (PyObject *self, PyObject *args)
1165 {
1166   struct type *type = ((type_object *) self)->type;
1167
1168   return value_to_value_object (allocate_optimized_out_value (type));
1169 }
1170
1171 /* Return a gdb.Field object for the field named by the argument.  */
1172
1173 static PyObject *
1174 typy_getitem (PyObject *self, PyObject *key)
1175 {
1176   struct type *type = ((type_object *) self)->type;
1177   int i;
1178
1179   gdb::unique_xmalloc_ptr<char> field = python_string_to_host_string (key);
1180   if (field == NULL)
1181     return NULL;
1182
1183   /* We want just fields of this type, not of base types, so instead of
1184      using lookup_struct_elt_type, portions of that function are
1185      copied here.  */
1186
1187   type = typy_get_composite (type);
1188   if (type == NULL)
1189     return NULL;
1190
1191   for (i = 0; i < type->num_fields (); i++)
1192     {
1193       const char *t_field_name = TYPE_FIELD_NAME (type, i);
1194
1195       if (t_field_name && (strcmp_iw (t_field_name, field.get ()) == 0))
1196         return convert_field (type, i).release ();
1197     }
1198   PyErr_SetObject (PyExc_KeyError, key);
1199   return NULL;
1200 }
1201
1202 /* Implement the "get" method on the type object.  This is the
1203    same as getitem if the key is present, but returns the supplied
1204    default value or None if the key is not found.  */
1205
1206 static PyObject *
1207 typy_get (PyObject *self, PyObject *args)
1208 {
1209   PyObject *key, *defval = Py_None, *result;
1210
1211   if (!PyArg_UnpackTuple (args, "get", 1, 2, &key, &defval))
1212     return NULL;
1213
1214   result = typy_getitem (self, key);
1215   if (result != NULL)
1216     return result;
1217
1218   /* typy_getitem returned error status.  If the exception is
1219      KeyError, clear the exception status and return the defval
1220      instead.  Otherwise return the exception unchanged.  */
1221   if (!PyErr_ExceptionMatches (PyExc_KeyError))
1222     return NULL;
1223
1224   PyErr_Clear ();
1225   Py_INCREF (defval);
1226   return defval;
1227 }
1228
1229 /* Implement the "has_key" method on the type object.  */
1230
1231 static PyObject *
1232 typy_has_key (PyObject *self, PyObject *args)
1233 {
1234   struct type *type = ((type_object *) self)->type;
1235   const char *field;
1236   int i;
1237
1238   if (!PyArg_ParseTuple (args, "s", &field))
1239     return NULL;
1240
1241   /* We want just fields of this type, not of base types, so instead of
1242      using lookup_struct_elt_type, portions of that function are
1243      copied here.  */
1244
1245   type = typy_get_composite (type);
1246   if (type == NULL)
1247     return NULL;
1248
1249   for (i = 0; i < type->num_fields (); i++)
1250     {
1251       const char *t_field_name = TYPE_FIELD_NAME (type, i);
1252
1253       if (t_field_name && (strcmp_iw (t_field_name, field) == 0))
1254         Py_RETURN_TRUE;
1255     }
1256   Py_RETURN_FALSE;
1257 }
1258
1259 /* Make an iterator object to iterate over keys, values, or items.  */
1260
1261 static PyObject *
1262 typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind)
1263 {
1264   typy_iterator_object *typy_iter_obj;
1265
1266   /* Check that "self" is a structure or union type.  */
1267   if (typy_get_composite (((type_object *) self)->type) == NULL)
1268     return NULL;
1269
1270   typy_iter_obj = PyObject_New (typy_iterator_object,
1271                                 &type_iterator_object_type);
1272   if (typy_iter_obj == NULL)
1273       return NULL;
1274
1275   typy_iter_obj->field = 0;
1276   typy_iter_obj->kind = kind;
1277   Py_INCREF (self);
1278   typy_iter_obj->source = (type_object *) self;
1279
1280   return (PyObject *) typy_iter_obj;
1281 }
1282
1283 /* iteritems() method.  */
1284
1285 static PyObject *
1286 typy_iteritems (PyObject *self, PyObject *args)
1287 {
1288   return typy_make_iter (self, iter_items);
1289 }
1290
1291 /* iterkeys() method.  */
1292
1293 static PyObject *
1294 typy_iterkeys (PyObject *self, PyObject *args)
1295 {
1296   return typy_make_iter (self, iter_keys);
1297 }
1298
1299 /* Iterating over the class, same as iterkeys except for the function
1300    signature.  */
1301
1302 static PyObject *
1303 typy_iter (PyObject *self)
1304 {
1305   return typy_make_iter (self, iter_keys);
1306 }
1307
1308 /* itervalues() method.  */
1309
1310 static PyObject *
1311 typy_itervalues (PyObject *self, PyObject *args)
1312 {
1313   return typy_make_iter (self, iter_values);
1314 }
1315
1316 /* Return a reference to the type iterator.  */
1317
1318 static PyObject *
1319 typy_iterator_iter (PyObject *self)
1320 {
1321   Py_INCREF (self);
1322   return self;
1323 }
1324
1325 /* Return the next field in the iteration through the list of fields
1326    of the type.  */
1327
1328 static PyObject *
1329 typy_iterator_iternext (PyObject *self)
1330 {
1331   typy_iterator_object *iter_obj = (typy_iterator_object *) self;
1332   struct type *type = iter_obj->source->type;
1333
1334   if (iter_obj->field < type->num_fields ())
1335     {
1336       gdbpy_ref<> result = make_fielditem (type, iter_obj->field,
1337                                            iter_obj->kind);
1338       if (result != NULL)
1339         iter_obj->field++;
1340       return result.release ();
1341     }
1342
1343   return NULL;
1344 }
1345
1346 static void
1347 typy_iterator_dealloc (PyObject *obj)
1348 {
1349   typy_iterator_object *iter_obj = (typy_iterator_object *) obj;
1350
1351   Py_DECREF (iter_obj->source);
1352   Py_TYPE (obj)->tp_free (obj);
1353 }
1354
1355 /* Create a new Type referring to TYPE.  */
1356 PyObject *
1357 type_to_type_object (struct type *type)
1358 {
1359   type_object *type_obj;
1360
1361   try
1362     {
1363       /* Try not to let stub types leak out to Python.  */
1364       if (type->is_stub ())
1365         type = check_typedef (type);
1366     }
1367   catch (...)
1368     {
1369       /* Just ignore failures in check_typedef.  */
1370     }
1371
1372   type_obj = PyObject_New (type_object, &type_object_type);
1373   if (type_obj)
1374     set_type (type_obj, type);
1375
1376   return (PyObject *) type_obj;
1377 }
1378
1379 struct type *
1380 type_object_to_type (PyObject *obj)
1381 {
1382   if (! PyObject_TypeCheck (obj, &type_object_type))
1383     return NULL;
1384   return ((type_object *) obj)->type;
1385 }
1386
1387 \f
1388
1389 /* Implementation of gdb.lookup_type.  */
1390 PyObject *
1391 gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw)
1392 {
1393   static const char *keywords[] = { "name", "block", NULL };
1394   const char *type_name = NULL;
1395   struct type *type = NULL;
1396   PyObject *block_obj = NULL;
1397   const struct block *block = NULL;
1398
1399   if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O", keywords,
1400                                         &type_name, &block_obj))
1401     return NULL;
1402
1403   if (block_obj)
1404     {
1405       block = block_object_to_block (block_obj);
1406       if (! block)
1407         {
1408           PyErr_SetString (PyExc_RuntimeError,
1409                            _("'block' argument must be a Block."));
1410           return NULL;
1411         }
1412     }
1413
1414   type = typy_lookup_typename (type_name, block);
1415   if (! type)
1416     return NULL;
1417
1418   return type_to_type_object (type);
1419 }
1420
1421 int
1422 gdbpy_initialize_types (void)
1423 {
1424   int i;
1425
1426   typy_objfile_data_key
1427     = register_objfile_data_with_cleanup (save_objfile_types, NULL);
1428
1429   if (PyType_Ready (&type_object_type) < 0)
1430     return -1;
1431   if (PyType_Ready (&field_object_type) < 0)
1432     return -1;
1433   if (PyType_Ready (&type_iterator_object_type) < 0)
1434     return -1;
1435
1436   for (i = 0; pyty_codes[i].name; ++i)
1437     {
1438       if (PyModule_AddIntConstant (gdb_module, pyty_codes[i].name,
1439                                    pyty_codes[i].code) < 0)
1440         return -1;
1441     }
1442
1443   if (gdb_pymodule_addobject (gdb_module, "Type",
1444                               (PyObject *) &type_object_type) < 0)
1445     return -1;
1446
1447   if (gdb_pymodule_addobject (gdb_module, "TypeIterator",
1448                               (PyObject *) &type_iterator_object_type) < 0)
1449     return -1;
1450
1451   return gdb_pymodule_addobject (gdb_module, "Field",
1452                                  (PyObject *) &field_object_type);
1453 }
1454
1455 \f
1456
1457 static gdb_PyGetSetDef type_object_getset[] =
1458 {
1459   { "alignof", typy_get_alignof, NULL,
1460     "The alignment of this type, in bytes.", NULL },
1461   { "code", typy_get_code, NULL,
1462     "The code for this type.", NULL },
1463   { "dynamic", typy_get_dynamic, NULL,
1464     "Whether this type is dynamic.", NULL },
1465   { "name", typy_get_name, NULL,
1466     "The name for this type, or None.", NULL },
1467   { "sizeof", typy_get_sizeof, NULL,
1468     "The size of this type, in bytes.", NULL },
1469   { "tag", typy_get_tag, NULL,
1470     "The tag name for this type, or None.", NULL },
1471   { "objfile", typy_get_objfile, NULL,
1472     "The objfile this type was defined in, or None.", NULL },
1473   { NULL }
1474 };
1475
1476 static PyMethodDef type_object_methods[] =
1477 {
1478   { "array", typy_array, METH_VARARGS,
1479     "array ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1480 Return a type which represents an array of objects of this type.\n\
1481 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1482 If LOW_BOUND is omitted, a value of zero is used." },
1483   { "vector", typy_vector, METH_VARARGS,
1484     "vector ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1485 Return a type which represents a vector of objects of this type.\n\
1486 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1487 If LOW_BOUND is omitted, a value of zero is used.\n\
1488 Vectors differ from arrays in that if the current language has C-style\n\
1489 arrays, vectors don't decay to a pointer to the first element.\n\
1490 They are first class values." },
1491    { "__contains__", typy_has_key, METH_VARARGS,
1492      "T.__contains__(k) -> True if T has a field named k, else False" },
1493   { "const", typy_const, METH_NOARGS,
1494     "const () -> Type\n\
1495 Return a const variant of this type." },
1496   { "optimized_out", typy_optimized_out, METH_NOARGS,
1497     "optimized_out() -> Value\n\
1498 Return optimized out value of this type." },
1499   { "fields", typy_fields, METH_NOARGS,
1500     "fields () -> list\n\
1501 Return a list holding all the fields of this type.\n\
1502 Each field is a gdb.Field object." },
1503   { "get", typy_get, METH_VARARGS,
1504     "T.get(k[,default]) -> returns field named k in T, if it exists;\n\
1505 otherwise returns default, if supplied, or None if not." },
1506   { "has_key", typy_has_key, METH_VARARGS,
1507     "T.has_key(k) -> True if T has a field named k, else False" },
1508   { "items", typy_items, METH_NOARGS,
1509     "items () -> list\n\
1510 Return a list of (name, field) pairs of this type.\n\
1511 Each field is a gdb.Field object." },
1512   { "iteritems", typy_iteritems, METH_NOARGS,
1513     "iteritems () -> an iterator over the (name, field)\n\
1514 pairs of this type.  Each field is a gdb.Field object." },
1515   { "iterkeys", typy_iterkeys, METH_NOARGS,
1516     "iterkeys () -> an iterator over the field names of this type." },
1517   { "itervalues", typy_itervalues, METH_NOARGS,
1518     "itervalues () -> an iterator over the fields of this type.\n\
1519 Each field is a gdb.Field object." },
1520   { "keys", typy_field_names, METH_NOARGS,
1521     "keys () -> list\n\
1522 Return a list holding all the fields names of this type." },
1523   { "pointer", typy_pointer, METH_NOARGS,
1524     "pointer () -> Type\n\
1525 Return a type of pointer to this type." },
1526   { "range", typy_range, METH_NOARGS,
1527     "range () -> tuple\n\
1528 Return a tuple containing the lower and upper range for this type."},
1529   { "reference", typy_reference, METH_NOARGS,
1530     "reference () -> Type\n\
1531 Return a type of reference to this type." },
1532   { "strip_typedefs", typy_strip_typedefs, METH_NOARGS,
1533     "strip_typedefs () -> Type\n\
1534 Return a type formed by stripping this type of all typedefs."},
1535   { "target", typy_target, METH_NOARGS,
1536     "target () -> Type\n\
1537 Return the target type of this type." },
1538   { "template_argument", typy_template_argument, METH_VARARGS,
1539     "template_argument (arg, [block]) -> Type\n\
1540 Return the type of a template argument." },
1541   { "unqualified", typy_unqualified, METH_NOARGS,
1542     "unqualified () -> Type\n\
1543 Return a variant of this type without const or volatile attributes." },
1544   { "values", typy_values, METH_NOARGS,
1545     "values () -> list\n\
1546 Return a list holding all the fields of this type.\n\
1547 Each field is a gdb.Field object." },
1548   { "volatile", typy_volatile, METH_NOARGS,
1549     "volatile () -> Type\n\
1550 Return a volatile variant of this type" },
1551   { NULL }
1552 };
1553
1554 static PyNumberMethods type_object_as_number = {
1555   NULL,                       /* nb_add */
1556   NULL,                       /* nb_subtract */
1557   NULL,                       /* nb_multiply */
1558 #ifndef IS_PY3K
1559   NULL,                       /* nb_divide */
1560 #endif
1561   NULL,                       /* nb_remainder */
1562   NULL,                       /* nb_divmod */
1563   NULL,                       /* nb_power */
1564   NULL,                       /* nb_negative */
1565   NULL,                       /* nb_positive */
1566   NULL,                       /* nb_absolute */
1567   typy_nonzero,               /* nb_nonzero */
1568   NULL,                       /* nb_invert */
1569   NULL,                       /* nb_lshift */
1570   NULL,                       /* nb_rshift */
1571   NULL,                       /* nb_and */
1572   NULL,                       /* nb_xor */
1573   NULL,                       /* nb_or */
1574 #ifdef IS_PY3K
1575   NULL,                       /* nb_int */
1576   NULL,                       /* reserved */
1577 #else
1578   NULL,                       /* nb_coerce */
1579   NULL,                       /* nb_int */
1580   NULL,                       /* nb_long */
1581 #endif
1582   NULL,                       /* nb_float */
1583 #ifndef IS_PY3K
1584   NULL,                       /* nb_oct */
1585   NULL                        /* nb_hex */
1586 #endif
1587 };
1588
1589 static PyMappingMethods typy_mapping = {
1590   typy_length,
1591   typy_getitem,
1592   NULL                            /* no "set" method */
1593 };
1594
1595 PyTypeObject type_object_type =
1596 {
1597   PyVarObject_HEAD_INIT (NULL, 0)
1598   "gdb.Type",                     /*tp_name*/
1599   sizeof (type_object),           /*tp_basicsize*/
1600   0,                              /*tp_itemsize*/
1601   typy_dealloc,                   /*tp_dealloc*/
1602   0,                              /*tp_print*/
1603   0,                              /*tp_getattr*/
1604   0,                              /*tp_setattr*/
1605   0,                              /*tp_compare*/
1606   0,                              /*tp_repr*/
1607   &type_object_as_number,         /*tp_as_number*/
1608   0,                              /*tp_as_sequence*/
1609   &typy_mapping,                  /*tp_as_mapping*/
1610   0,                              /*tp_hash */
1611   0,                              /*tp_call*/
1612   typy_str,                       /*tp_str*/
1613   0,                              /*tp_getattro*/
1614   0,                              /*tp_setattro*/
1615   0,                              /*tp_as_buffer*/
1616   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER,  /*tp_flags*/
1617   "GDB type object",              /* tp_doc */
1618   0,                              /* tp_traverse */
1619   0,                              /* tp_clear */
1620   typy_richcompare,               /* tp_richcompare */
1621   0,                              /* tp_weaklistoffset */
1622   typy_iter,                      /* tp_iter */
1623   0,                              /* tp_iternext */
1624   type_object_methods,            /* tp_methods */
1625   0,                              /* tp_members */
1626   type_object_getset,             /* tp_getset */
1627   0,                              /* tp_base */
1628   0,                              /* tp_dict */
1629   0,                              /* tp_descr_get */
1630   0,                              /* tp_descr_set */
1631   0,                              /* tp_dictoffset */
1632   0,                              /* tp_init */
1633   0,                              /* tp_alloc */
1634   0,                              /* tp_new */
1635 };
1636
1637 static gdb_PyGetSetDef field_object_getset[] =
1638 {
1639   { "__dict__", gdb_py_generic_dict, NULL,
1640     "The __dict__ for this field.", &field_object_type },
1641   { NULL }
1642 };
1643
1644 PyTypeObject field_object_type =
1645 {
1646   PyVarObject_HEAD_INIT (NULL, 0)
1647   "gdb.Field",                    /*tp_name*/
1648   sizeof (field_object),          /*tp_basicsize*/
1649   0,                              /*tp_itemsize*/
1650   field_dealloc,                  /*tp_dealloc*/
1651   0,                              /*tp_print*/
1652   0,                              /*tp_getattr*/
1653   0,                              /*tp_setattr*/
1654   0,                              /*tp_compare*/
1655   0,                              /*tp_repr*/
1656   0,                              /*tp_as_number*/
1657   0,                              /*tp_as_sequence*/
1658   0,                              /*tp_as_mapping*/
1659   0,                              /*tp_hash */
1660   0,                              /*tp_call*/
1661   0,                              /*tp_str*/
1662   0,                              /*tp_getattro*/
1663   0,                              /*tp_setattro*/
1664   0,                              /*tp_as_buffer*/
1665   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER,  /*tp_flags*/
1666   "GDB field object",             /* tp_doc */
1667   0,                              /* tp_traverse */
1668   0,                              /* tp_clear */
1669   0,                              /* tp_richcompare */
1670   0,                              /* tp_weaklistoffset */
1671   0,                              /* tp_iter */
1672   0,                              /* tp_iternext */
1673   0,                              /* tp_methods */
1674   0,                              /* tp_members */
1675   field_object_getset,            /* tp_getset */
1676   0,                              /* tp_base */
1677   0,                              /* tp_dict */
1678   0,                              /* tp_descr_get */
1679   0,                              /* tp_descr_set */
1680   offsetof (field_object, dict),  /* tp_dictoffset */
1681   0,                              /* tp_init */
1682   0,                              /* tp_alloc */
1683   0,                              /* tp_new */
1684 };
1685
1686 PyTypeObject type_iterator_object_type = {
1687   PyVarObject_HEAD_INIT (NULL, 0)
1688   "gdb.TypeIterator",             /*tp_name*/
1689   sizeof (typy_iterator_object),  /*tp_basicsize*/
1690   0,                              /*tp_itemsize*/
1691   typy_iterator_dealloc,          /*tp_dealloc*/
1692   0,                              /*tp_print*/
1693   0,                              /*tp_getattr*/
1694   0,                              /*tp_setattr*/
1695   0,                              /*tp_compare*/
1696   0,                              /*tp_repr*/
1697   0,                              /*tp_as_number*/
1698   0,                              /*tp_as_sequence*/
1699   0,                              /*tp_as_mapping*/
1700   0,                              /*tp_hash */
1701   0,                              /*tp_call*/
1702   0,                              /*tp_str*/
1703   0,                              /*tp_getattro*/
1704   0,                              /*tp_setattro*/
1705   0,                              /*tp_as_buffer*/
1706   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER,  /*tp_flags*/
1707   "GDB type iterator object",     /*tp_doc */
1708   0,                              /*tp_traverse */
1709   0,                              /*tp_clear */
1710   0,                              /*tp_richcompare */
1711   0,                              /*tp_weaklistoffset */
1712   typy_iterator_iter,             /*tp_iter */
1713   typy_iterator_iternext,         /*tp_iternext */
1714   0                               /*tp_methods */
1715 };
This page took 0.114503 seconds and 2 git commands to generate.