]> Git Repo - binutils.git/blob - gdb/python/py-type.c
Rename common to gdbsupport
[binutils.git] / gdb / python / py-type.c
1 /* Python interface to types.
2
3    Copyright (C) 2008-2019 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 "gdbsupport/vec.h"
30 #include "typeprint.h"
31
32 typedef struct pyty_type_object
33 {
34   PyObject_HEAD
35   struct type *type;
36
37   /* If a Type object is associated with an objfile, it is kept on a
38      doubly-linked list, rooted in the objfile.  This lets us copy the
39      underlying struct type when the objfile is deleted.  */
40   struct pyty_type_object *prev;
41   struct pyty_type_object *next;
42 } type_object;
43
44 extern PyTypeObject type_object_type
45     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("type_object");
46
47 /* A Field object.  */
48 typedef struct pyty_field_object
49 {
50   PyObject_HEAD
51
52   /* Dictionary holding our attributes.  */
53   PyObject *dict;
54 } field_object;
55
56 extern PyTypeObject field_object_type
57     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("field_object");
58
59 /* A type iterator object.  */
60 typedef struct {
61   PyObject_HEAD
62   /* The current field index.  */
63   int field;
64   /* What to return.  */
65   enum gdbpy_iter_kind kind;
66   /* Pointer back to the original source type object.  */
67   struct pyty_type_object *source;
68 } typy_iterator_object;
69
70 extern PyTypeObject type_iterator_object_type
71     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("typy_iterator_object");
72
73 /* This is used to initialize various gdb.TYPE_ constants.  */
74 struct pyty_code
75 {
76   /* The code.  */
77   enum type_code code;
78   /* The name.  */
79   const char *name;
80 };
81
82 /* Forward declarations.  */
83 static PyObject *typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind);
84
85 #define ENTRY(X) { X, #X }
86
87 static struct pyty_code pyty_codes[] =
88 {
89   ENTRY (TYPE_CODE_BITSTRING),
90   ENTRY (TYPE_CODE_PTR),
91   ENTRY (TYPE_CODE_ARRAY),
92   ENTRY (TYPE_CODE_STRUCT),
93   ENTRY (TYPE_CODE_UNION),
94   ENTRY (TYPE_CODE_ENUM),
95   ENTRY (TYPE_CODE_FLAGS),
96   ENTRY (TYPE_CODE_FUNC),
97   ENTRY (TYPE_CODE_INT),
98   ENTRY (TYPE_CODE_FLT),
99   ENTRY (TYPE_CODE_VOID),
100   ENTRY (TYPE_CODE_SET),
101   ENTRY (TYPE_CODE_RANGE),
102   ENTRY (TYPE_CODE_STRING),
103   ENTRY (TYPE_CODE_ERROR),
104   ENTRY (TYPE_CODE_METHOD),
105   ENTRY (TYPE_CODE_METHODPTR),
106   ENTRY (TYPE_CODE_MEMBERPTR),
107   ENTRY (TYPE_CODE_REF),
108   ENTRY (TYPE_CODE_RVALUE_REF),
109   ENTRY (TYPE_CODE_CHAR),
110   ENTRY (TYPE_CODE_BOOL),
111   ENTRY (TYPE_CODE_COMPLEX),
112   ENTRY (TYPE_CODE_TYPEDEF),
113   ENTRY (TYPE_CODE_NAMESPACE),
114   ENTRY (TYPE_CODE_DECFLOAT),
115   ENTRY (TYPE_CODE_INTERNAL_FUNCTION),
116   { TYPE_CODE_UNDEF, NULL }
117 };
118
119 \f
120
121 static void
122 field_dealloc (PyObject *obj)
123 {
124   field_object *f = (field_object *) obj;
125
126   Py_XDECREF (f->dict);
127   Py_TYPE (obj)->tp_free (obj);
128 }
129
130 static PyObject *
131 field_new (void)
132 {
133   gdbpy_ref<field_object> result (PyObject_New (field_object,
134                                                 &field_object_type));
135
136   if (result != NULL)
137     {
138       result->dict = PyDict_New ();
139       if (!result->dict)
140         return NULL;
141     }
142   return (PyObject *) result.release ();
143 }
144
145 \f
146
147 /* Return true if OBJ is of type gdb.Field, false otherwise.  */
148
149 int
150 gdbpy_is_field (PyObject *obj)
151 {
152   return PyObject_TypeCheck (obj, &field_object_type);
153 }
154
155 /* Return the code for this type.  */
156 static PyObject *
157 typy_get_code (PyObject *self, void *closure)
158 {
159   struct type *type = ((type_object *) self)->type;
160
161   return PyInt_FromLong (TYPE_CODE (type));
162 }
163
164 /* Helper function for typy_fields which converts a single field to a
165    gdb.Field object.  Returns NULL on error.  */
166
167 static gdbpy_ref<>
168 convert_field (struct type *type, int field)
169 {
170   gdbpy_ref<> result (field_new ());
171
172   if (result == NULL)
173     return NULL;
174
175   gdbpy_ref<> arg (type_to_type_object (type));
176   if (arg == NULL)
177     return NULL;
178   if (PyObject_SetAttrString (result.get (), "parent_type", arg.get ()) < 0)
179     return NULL;
180
181   if (!field_is_static (&TYPE_FIELD (type, field)))
182     {
183       const char *attrstring;
184
185       if (TYPE_CODE (type) == TYPE_CODE_ENUM)
186         {
187           arg.reset (gdb_py_long_from_longest (TYPE_FIELD_ENUMVAL (type,
188                                                                    field)));
189           attrstring = "enumval";
190         }
191       else
192         {
193           arg.reset (gdb_py_long_from_longest (TYPE_FIELD_BITPOS (type,
194                                                                   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) == 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_TYPE (type, field) == NULL)
244     arg = gdbpy_ref<>::new_reference (Py_None);
245   else
246     arg.reset (type_to_type_object (TYPE_FIELD_TYPE (type, field)));
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) != 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 (type) == NULL)
395     Py_RETURN_NONE;
396   return PyString_FromString (TYPE_NAME (type));
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) == TYPE_CODE_STRUCT
407       || TYPE_CODE (type) == TYPE_CODE_UNION
408       || TYPE_CODE (type) == TYPE_CODE_ENUM)
409     tagname = TYPE_NAME (type);
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) != 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) != TYPE_CODE_STRUCT
472       && TYPE_CODE (type) != TYPE_CODE_UNION
473       && TYPE_CODE (type) != TYPE_CODE_ENUM
474       && TYPE_CODE (type) != 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) != TYPE_CODE_ARRAY
581       && TYPE_CODE (type) != TYPE_CODE_STRING
582       && TYPE_CODE (type) != 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 (type))
590     {
591     case TYPE_CODE_ARRAY:
592     case TYPE_CODE_STRING:
593       low = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
594       high = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (type));
595       break;
596     case TYPE_CODE_RANGE:
597       low = TYPE_LOW_BOUND (type);
598       high = TYPE_HIGH_BOUND (type);
599       break;
600     }
601
602   gdbpy_ref<> low_bound (PyLong_FromLong (low));
603   if (low_bound == NULL)
604     return NULL;
605
606   gdbpy_ref<> high_bound (PyLong_FromLong (high));
607   if (high_bound == NULL)
608     return NULL;
609
610   gdbpy_ref<> result (PyTuple_New (2));
611   if (result == NULL)
612     return NULL;
613
614   if (PyTuple_SetItem (result.get (), 0, low_bound.release ()) != 0
615       || PyTuple_SetItem (result.get (), 1, high_bound.release ()) != 0)
616     return NULL;
617   return result.release ();
618 }
619
620 /* Return a Type object which represents a reference to SELF.  */
621 static PyObject *
622 typy_reference (PyObject *self, PyObject *args)
623 {
624   struct type *type = ((type_object *) self)->type;
625
626   try
627     {
628       type = lookup_lvalue_reference_type (type);
629     }
630   catch (const gdb_exception &except)
631     {
632       GDB_PY_HANDLE_EXCEPTION (except);
633     }
634
635   return type_to_type_object (type);
636 }
637
638 /* Return a Type object which represents the target type of SELF.  */
639 static PyObject *
640 typy_target (PyObject *self, PyObject *args)
641 {
642   struct type *type = ((type_object *) self)->type;
643
644   if (!TYPE_TARGET_TYPE (type))
645     {
646       PyErr_SetString (PyExc_RuntimeError,
647                        _("Type does not have a target."));
648       return NULL;
649     }
650
651   return type_to_type_object (TYPE_TARGET_TYPE (type));
652 }
653
654 /* Return a const-qualified type variant.  */
655 static PyObject *
656 typy_const (PyObject *self, PyObject *args)
657 {
658   struct type *type = ((type_object *) self)->type;
659
660   try
661     {
662       type = make_cv_type (1, 0, type, NULL);
663     }
664   catch (const gdb_exception &except)
665     {
666       GDB_PY_HANDLE_EXCEPTION (except);
667     }
668
669   return type_to_type_object (type);
670 }
671
672 /* Return a volatile-qualified type variant.  */
673 static PyObject *
674 typy_volatile (PyObject *self, PyObject *args)
675 {
676   struct type *type = ((type_object *) self)->type;
677
678   try
679     {
680       type = make_cv_type (0, 1, type, NULL);
681     }
682   catch (const gdb_exception &except)
683     {
684       GDB_PY_HANDLE_EXCEPTION (except);
685     }
686
687   return type_to_type_object (type);
688 }
689
690 /* Return an unqualified type variant.  */
691 static PyObject *
692 typy_unqualified (PyObject *self, PyObject *args)
693 {
694   struct type *type = ((type_object *) self)->type;
695
696   try
697     {
698       type = make_cv_type (0, 0, type, NULL);
699     }
700   catch (const gdb_exception &except)
701     {
702       GDB_PY_HANDLE_EXCEPTION (except);
703     }
704
705   return type_to_type_object (type);
706 }
707
708 /* Return the size of the type represented by SELF, in bytes.  */
709 static PyObject *
710 typy_get_sizeof (PyObject *self, void *closure)
711 {
712   struct type *type = ((type_object *) self)->type;
713
714   try
715     {
716       check_typedef (type);
717     }
718   catch (const gdb_exception &except)
719     {
720     }
721
722   /* Ignore exceptions.  */
723
724   return gdb_py_long_from_longest (TYPE_LENGTH (type));
725 }
726
727 /* Return the alignment of the type represented by SELF, in bytes.  */
728 static PyObject *
729 typy_get_alignof (PyObject *self, void *closure)
730 {
731   struct type *type = ((type_object *) self)->type;
732
733   ULONGEST align = 0;
734   try
735     {
736       align = type_align (type);
737     }
738   catch (const gdb_exception &except)
739     {
740       align = 0;
741     }
742
743   /* Ignore exceptions.  */
744
745   return gdb_py_object_from_ulongest (align).release ();
746 }
747
748 static struct type *
749 typy_lookup_typename (const char *type_name, const struct block *block)
750 {
751   struct type *type = NULL;
752
753   try
754     {
755       if (startswith (type_name, "struct "))
756         type = lookup_struct (type_name + 7, NULL);
757       else if (startswith (type_name, "union "))
758         type = lookup_union (type_name + 6, NULL);
759       else if (startswith (type_name, "enum "))
760         type = lookup_enum (type_name + 5, NULL);
761       else
762         type = lookup_typename (python_language, python_gdbarch,
763                                 type_name, block, 0);
764     }
765   catch (const gdb_exception &except)
766     {
767       GDB_PY_HANDLE_EXCEPTION (except);
768     }
769
770   return type;
771 }
772
773 static struct type *
774 typy_lookup_type (struct demangle_component *demangled,
775                   const struct block *block)
776 {
777   struct type *type, *rtype = NULL;
778   enum demangle_component_type demangled_type;
779
780   /* Save the type: typy_lookup_type() may (indirectly) overwrite
781      memory pointed by demangled.  */
782   demangled_type = demangled->type;
783
784   if (demangled_type == DEMANGLE_COMPONENT_POINTER
785       || demangled_type == DEMANGLE_COMPONENT_REFERENCE
786       || demangled_type == DEMANGLE_COMPONENT_RVALUE_REFERENCE
787       || demangled_type == DEMANGLE_COMPONENT_CONST
788       || demangled_type == DEMANGLE_COMPONENT_VOLATILE)
789     {
790       type = typy_lookup_type (demangled->u.s_binary.left, block);
791       if (! type)
792         return NULL;
793
794       try
795         {
796           /* If the demangled_type matches with one of the types
797              below, run the corresponding function and save the type
798              to return later.  We cannot just return here as we are in
799              an exception handler.  */
800           switch (demangled_type)
801             {
802             case DEMANGLE_COMPONENT_REFERENCE:
803               rtype = lookup_lvalue_reference_type (type);
804               break;
805             case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
806               rtype = lookup_rvalue_reference_type (type);
807               break;
808             case DEMANGLE_COMPONENT_POINTER:
809               rtype = lookup_pointer_type (type);
810               break;
811             case DEMANGLE_COMPONENT_CONST:
812               rtype = make_cv_type (1, 0, type, NULL);
813               break;
814             case DEMANGLE_COMPONENT_VOLATILE:
815               rtype = make_cv_type (0, 1, type, NULL);
816               break;
817             }
818         }
819       catch (const gdb_exception &except)
820         {
821           GDB_PY_HANDLE_EXCEPTION (except);
822         }
823     }
824
825   /* If we have a type from the switch statement above, just return
826      that.  */
827   if (rtype)
828     return rtype;
829
830   /* We don't have a type, so lookup the type.  */
831   gdb::unique_xmalloc_ptr<char> type_name = cp_comp_to_string (demangled, 10);
832   return typy_lookup_typename (type_name.get (), block);
833 }
834
835 /* This is a helper function for typy_template_argument that is used
836    when the type does not have template symbols attached.  It works by
837    parsing the type name.  This happens with compilers, like older
838    versions of GCC, that do not emit DW_TAG_template_*.  */
839
840 static PyObject *
841 typy_legacy_template_argument (struct type *type, const struct block *block,
842                                int argno)
843 {
844   int i;
845   struct demangle_component *demangled;
846   std::unique_ptr<demangle_parse_info> info;
847   std::string err;
848   struct type *argtype;
849
850   if (TYPE_NAME (type) == NULL)
851     {
852       PyErr_SetString (PyExc_RuntimeError, _("Null type name."));
853       return NULL;
854     }
855
856   try
857     {
858       /* Note -- this is not thread-safe.  */
859       info = cp_demangled_name_to_comp (TYPE_NAME (type), &err);
860     }
861   catch (const gdb_exception &except)
862     {
863       GDB_PY_HANDLE_EXCEPTION (except);
864     }
865
866   if (! info)
867     {
868       PyErr_SetString (PyExc_RuntimeError, err.c_str ());
869       return NULL;
870     }
871   demangled = info->tree;
872
873   /* Strip off component names.  */
874   while (demangled->type == DEMANGLE_COMPONENT_QUAL_NAME
875          || demangled->type == DEMANGLE_COMPONENT_LOCAL_NAME)
876     demangled = demangled->u.s_binary.right;
877
878   if (demangled->type != DEMANGLE_COMPONENT_TEMPLATE)
879     {
880       PyErr_SetString (PyExc_RuntimeError, _("Type is not a template."));
881       return NULL;
882     }
883
884   /* Skip from the template to the arguments.  */
885   demangled = demangled->u.s_binary.right;
886
887   for (i = 0; demangled && i < argno; ++i)
888     demangled = demangled->u.s_binary.right;
889
890   if (! demangled)
891     {
892       PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
893                     argno);
894       return NULL;
895     }
896
897   argtype = typy_lookup_type (demangled->u.s_binary.left, block);
898   if (! argtype)
899     return NULL;
900
901   return type_to_type_object (argtype);
902 }
903
904 static PyObject *
905 typy_template_argument (PyObject *self, PyObject *args)
906 {
907   int argno;
908   struct type *type = ((type_object *) self)->type;
909   const struct block *block = NULL;
910   PyObject *block_obj = NULL;
911   struct symbol *sym;
912   struct value *val = NULL;
913
914   if (! PyArg_ParseTuple (args, "i|O", &argno, &block_obj))
915     return NULL;
916
917   if (argno < 0)
918     {
919       PyErr_SetString (PyExc_RuntimeError,
920                        _("Template argument number must be non-negative"));
921       return NULL;
922     }
923
924   if (block_obj)
925     {
926       block = block_object_to_block (block_obj);
927       if (! block)
928         {
929           PyErr_SetString (PyExc_RuntimeError,
930                            _("Second argument must be block."));
931           return NULL;
932         }
933     }
934
935   try
936     {
937       type = check_typedef (type);
938       if (TYPE_IS_REFERENCE (type))
939         type = check_typedef (TYPE_TARGET_TYPE (type));
940     }
941   catch (const gdb_exception &except)
942     {
943       GDB_PY_HANDLE_EXCEPTION (except);
944     }
945
946   /* We might not have DW_TAG_template_*, so try to parse the type's
947      name.  This is inefficient if we do not have a template type --
948      but that is going to wind up as an error anyhow.  */
949   if (! TYPE_N_TEMPLATE_ARGUMENTS (type))
950     return typy_legacy_template_argument (type, block, argno);
951
952   if (argno >= TYPE_N_TEMPLATE_ARGUMENTS (type))
953     {
954       PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
955                     argno);
956       return NULL;
957     }
958
959   sym = TYPE_TEMPLATE_ARGUMENT (type, argno);
960   if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
961     return type_to_type_object (SYMBOL_TYPE (sym));
962   else if (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT)
963     {
964       PyErr_Format (PyExc_RuntimeError,
965                     _("Template argument is optimized out"));
966       return NULL;
967     }
968
969   try
970     {
971       val = value_of_variable (sym, block);
972     }
973   catch (const gdb_exception &except)
974     {
975       GDB_PY_HANDLE_EXCEPTION (except);
976     }
977
978   return value_to_value_object (val);
979 }
980
981 static PyObject *
982 typy_str (PyObject *self)
983 {
984   string_file thetype;
985
986   try
987     {
988       LA_PRINT_TYPE (type_object_to_type (self), "", &thetype, -1, 0,
989                      &type_print_raw_options);
990     }
991   catch (const gdb_exception &except)
992     {
993       GDB_PY_HANDLE_EXCEPTION (except);
994     }
995
996   return PyUnicode_Decode (thetype.c_str (), thetype.size (),
997                            host_charset (), NULL);
998 }
999
1000 /* Implement the richcompare method.  */
1001
1002 static PyObject *
1003 typy_richcompare (PyObject *self, PyObject *other, int op)
1004 {
1005   bool result = false;
1006   struct type *type1 = type_object_to_type (self);
1007   struct type *type2 = type_object_to_type (other);
1008
1009   /* We can only compare ourselves to another Type object, and only
1010      for equality or inequality.  */
1011   if (type2 == NULL || (op != Py_EQ && op != Py_NE))
1012     {
1013       Py_INCREF (Py_NotImplemented);
1014       return Py_NotImplemented;
1015     }
1016
1017   if (type1 == type2)
1018     result = true;
1019   else
1020     {
1021       try
1022         {
1023           result = types_deeply_equal (type1, type2);
1024         }
1025       catch (const gdb_exception &except)
1026         {
1027           /* If there is a GDB exception, a comparison is not capable
1028              (or trusted), so exit.  */
1029           GDB_PY_HANDLE_EXCEPTION (except);
1030         }
1031     }
1032
1033   if (op == (result ? Py_EQ : Py_NE))
1034     Py_RETURN_TRUE;
1035   Py_RETURN_FALSE;
1036 }
1037
1038 \f
1039
1040 static const struct objfile_data *typy_objfile_data_key;
1041
1042 static void
1043 save_objfile_types (struct objfile *objfile, void *datum)
1044 {
1045   type_object *obj = (type_object *) datum;
1046   htab_t copied_types;
1047
1048   if (!gdb_python_initialized)
1049     return;
1050
1051   /* This prevents another thread from freeing the objects we're
1052      operating on.  */
1053   gdbpy_enter enter_py (get_objfile_arch (objfile), current_language);
1054
1055   copied_types = create_copied_types_hash (objfile);
1056
1057   while (obj)
1058     {
1059       type_object *next = obj->next;
1060
1061       htab_empty (copied_types);
1062
1063       obj->type = copy_type_recursive (objfile, obj->type, copied_types);
1064
1065       obj->next = NULL;
1066       obj->prev = NULL;
1067
1068       obj = next;
1069     }
1070
1071   htab_delete (copied_types);
1072 }
1073
1074 static void
1075 set_type (type_object *obj, struct type *type)
1076 {
1077   obj->type = type;
1078   obj->prev = NULL;
1079   if (type && TYPE_OBJFILE (type))
1080     {
1081       struct objfile *objfile = TYPE_OBJFILE (type);
1082
1083       obj->next = ((struct pyty_type_object *)
1084                    objfile_data (objfile, typy_objfile_data_key));
1085       if (obj->next)
1086         obj->next->prev = obj;
1087       set_objfile_data (objfile, typy_objfile_data_key, obj);
1088     }
1089   else
1090     obj->next = NULL;
1091 }
1092
1093 static void
1094 typy_dealloc (PyObject *obj)
1095 {
1096   type_object *type = (type_object *) obj;
1097
1098   if (type->prev)
1099     type->prev->next = type->next;
1100   else if (type->type && TYPE_OBJFILE (type->type))
1101     {
1102       /* Must reset head of list.  */
1103       struct objfile *objfile = TYPE_OBJFILE (type->type);
1104
1105       if (objfile)
1106         set_objfile_data (objfile, typy_objfile_data_key, type->next);
1107     }
1108   if (type->next)
1109     type->next->prev = type->prev;
1110
1111   Py_TYPE (type)->tp_free (type);
1112 }
1113
1114 /* Return number of fields ("length" of the field dictionary).  */
1115
1116 static Py_ssize_t
1117 typy_length (PyObject *self)
1118 {
1119   struct type *type = ((type_object *) self)->type;
1120
1121   type = typy_get_composite (type);
1122   if (type == NULL)
1123     return -1;
1124
1125   return TYPE_NFIELDS (type);
1126 }
1127
1128 /* Implements boolean evaluation of gdb.Type.  Handle this like other
1129    Python objects that don't have a meaningful truth value -- all
1130    values are true.  */
1131
1132 static int
1133 typy_nonzero (PyObject *self)
1134 {
1135   return 1;
1136 }
1137
1138 /* Return optimized out value of this type.  */
1139
1140 static PyObject *
1141 typy_optimized_out (PyObject *self, PyObject *args)
1142 {
1143   struct type *type = ((type_object *) self)->type;
1144
1145   return value_to_value_object (allocate_optimized_out_value (type));
1146 }
1147
1148 /* Return a gdb.Field object for the field named by the argument.  */
1149
1150 static PyObject *
1151 typy_getitem (PyObject *self, PyObject *key)
1152 {
1153   struct type *type = ((type_object *) self)->type;
1154   int i;
1155
1156   gdb::unique_xmalloc_ptr<char> field = python_string_to_host_string (key);
1157   if (field == NULL)
1158     return NULL;
1159
1160   /* We want just fields of this type, not of base types, so instead of
1161      using lookup_struct_elt_type, portions of that function are
1162      copied here.  */
1163
1164   type = typy_get_composite (type);
1165   if (type == NULL)
1166     return NULL;
1167
1168   for (i = 0; i < TYPE_NFIELDS (type); i++)
1169     {
1170       const char *t_field_name = TYPE_FIELD_NAME (type, i);
1171
1172       if (t_field_name && (strcmp_iw (t_field_name, field.get ()) == 0))
1173         return convert_field (type, i).release ();
1174     }
1175   PyErr_SetObject (PyExc_KeyError, key);
1176   return NULL;
1177 }
1178
1179 /* Implement the "get" method on the type object.  This is the
1180    same as getitem if the key is present, but returns the supplied
1181    default value or None if the key is not found.  */
1182
1183 static PyObject *
1184 typy_get (PyObject *self, PyObject *args)
1185 {
1186   PyObject *key, *defval = Py_None, *result;
1187
1188   if (!PyArg_UnpackTuple (args, "get", 1, 2, &key, &defval))
1189     return NULL;
1190
1191   result = typy_getitem (self, key);
1192   if (result != NULL)
1193     return result;
1194
1195   /* typy_getitem returned error status.  If the exception is
1196      KeyError, clear the exception status and return the defval
1197      instead.  Otherwise return the exception unchanged.  */
1198   if (!PyErr_ExceptionMatches (PyExc_KeyError))
1199     return NULL;
1200
1201   PyErr_Clear ();
1202   Py_INCREF (defval);
1203   return defval;
1204 }
1205
1206 /* Implement the "has_key" method on the type object.  */
1207
1208 static PyObject *
1209 typy_has_key (PyObject *self, PyObject *args)
1210 {
1211   struct type *type = ((type_object *) self)->type;
1212   const char *field;
1213   int i;
1214
1215   if (!PyArg_ParseTuple (args, "s", &field))
1216     return NULL;
1217
1218   /* We want just fields of this type, not of base types, so instead of
1219      using lookup_struct_elt_type, portions of that function are
1220      copied here.  */
1221
1222   type = typy_get_composite (type);
1223   if (type == NULL)
1224     return NULL;
1225
1226   for (i = 0; i < TYPE_NFIELDS (type); i++)
1227     {
1228       const char *t_field_name = TYPE_FIELD_NAME (type, i);
1229
1230       if (t_field_name && (strcmp_iw (t_field_name, field) == 0))
1231         Py_RETURN_TRUE;
1232     }
1233   Py_RETURN_FALSE;
1234 }
1235
1236 /* Make an iterator object to iterate over keys, values, or items.  */
1237
1238 static PyObject *
1239 typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind)
1240 {
1241   typy_iterator_object *typy_iter_obj;
1242
1243   /* Check that "self" is a structure or union type.  */
1244   if (typy_get_composite (((type_object *) self)->type) == NULL)
1245     return NULL;
1246
1247   typy_iter_obj = PyObject_New (typy_iterator_object,
1248                                 &type_iterator_object_type);
1249   if (typy_iter_obj == NULL)
1250       return NULL;
1251
1252   typy_iter_obj->field = 0;
1253   typy_iter_obj->kind = kind;
1254   Py_INCREF (self);
1255   typy_iter_obj->source = (type_object *) self;
1256
1257   return (PyObject *) typy_iter_obj;
1258 }
1259
1260 /* iteritems() method.  */
1261
1262 static PyObject *
1263 typy_iteritems (PyObject *self, PyObject *args)
1264 {
1265   return typy_make_iter (self, iter_items);
1266 }
1267
1268 /* iterkeys() method.  */
1269
1270 static PyObject *
1271 typy_iterkeys (PyObject *self, PyObject *args)
1272 {
1273   return typy_make_iter (self, iter_keys);
1274 }
1275
1276 /* Iterating over the class, same as iterkeys except for the function
1277    signature.  */
1278
1279 static PyObject *
1280 typy_iter (PyObject *self)
1281 {
1282   return typy_make_iter (self, iter_keys);
1283 }
1284
1285 /* itervalues() method.  */
1286
1287 static PyObject *
1288 typy_itervalues (PyObject *self, PyObject *args)
1289 {
1290   return typy_make_iter (self, iter_values);
1291 }
1292
1293 /* Return a reference to the type iterator.  */
1294
1295 static PyObject *
1296 typy_iterator_iter (PyObject *self)
1297 {
1298   Py_INCREF (self);
1299   return self;
1300 }
1301
1302 /* Return the next field in the iteration through the list of fields
1303    of the type.  */
1304
1305 static PyObject *
1306 typy_iterator_iternext (PyObject *self)
1307 {
1308   typy_iterator_object *iter_obj = (typy_iterator_object *) self;
1309   struct type *type = iter_obj->source->type;
1310
1311   if (iter_obj->field < TYPE_NFIELDS (type))
1312     {
1313       gdbpy_ref<> result = make_fielditem (type, iter_obj->field,
1314                                            iter_obj->kind);
1315       if (result != NULL)
1316         iter_obj->field++;
1317       return result.release ();
1318     }
1319
1320   return NULL;
1321 }
1322
1323 static void
1324 typy_iterator_dealloc (PyObject *obj)
1325 {
1326   typy_iterator_object *iter_obj = (typy_iterator_object *) obj;
1327
1328   Py_DECREF (iter_obj->source);
1329 }
1330
1331 /* Create a new Type referring to TYPE.  */
1332 PyObject *
1333 type_to_type_object (struct type *type)
1334 {
1335   type_object *type_obj;
1336
1337   type_obj = PyObject_New (type_object, &type_object_type);
1338   if (type_obj)
1339     set_type (type_obj, type);
1340
1341   return (PyObject *) type_obj;
1342 }
1343
1344 struct type *
1345 type_object_to_type (PyObject *obj)
1346 {
1347   if (! PyObject_TypeCheck (obj, &type_object_type))
1348     return NULL;
1349   return ((type_object *) obj)->type;
1350 }
1351
1352 \f
1353
1354 /* Implementation of gdb.lookup_type.  */
1355 PyObject *
1356 gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw)
1357 {
1358   static const char *keywords[] = { "name", "block", NULL };
1359   const char *type_name = NULL;
1360   struct type *type = NULL;
1361   PyObject *block_obj = NULL;
1362   const struct block *block = NULL;
1363
1364   if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O", keywords,
1365                                         &type_name, &block_obj))
1366     return NULL;
1367
1368   if (block_obj)
1369     {
1370       block = block_object_to_block (block_obj);
1371       if (! block)
1372         {
1373           PyErr_SetString (PyExc_RuntimeError,
1374                            _("'block' argument must be a Block."));
1375           return NULL;
1376         }
1377     }
1378
1379   type = typy_lookup_typename (type_name, block);
1380   if (! type)
1381     return NULL;
1382
1383   return type_to_type_object (type);
1384 }
1385
1386 int
1387 gdbpy_initialize_types (void)
1388 {
1389   int i;
1390
1391   typy_objfile_data_key
1392     = register_objfile_data_with_cleanup (save_objfile_types, NULL);
1393
1394   if (PyType_Ready (&type_object_type) < 0)
1395     return -1;
1396   if (PyType_Ready (&field_object_type) < 0)
1397     return -1;
1398   if (PyType_Ready (&type_iterator_object_type) < 0)
1399     return -1;
1400
1401   for (i = 0; pyty_codes[i].name; ++i)
1402     {
1403       if (PyModule_AddIntConstant (gdb_module, pyty_codes[i].name,
1404                                    pyty_codes[i].code) < 0)
1405         return -1;
1406     }
1407
1408   if (gdb_pymodule_addobject (gdb_module, "Type",
1409                               (PyObject *) &type_object_type) < 0)
1410     return -1;
1411
1412   if (gdb_pymodule_addobject (gdb_module, "TypeIterator",
1413                               (PyObject *) &type_iterator_object_type) < 0)
1414     return -1;
1415
1416   return gdb_pymodule_addobject (gdb_module, "Field",
1417                                  (PyObject *) &field_object_type);
1418 }
1419
1420 \f
1421
1422 static gdb_PyGetSetDef type_object_getset[] =
1423 {
1424   { "alignof", typy_get_alignof, NULL,
1425     "The alignment of this type, in bytes.", NULL },
1426   { "code", typy_get_code, NULL,
1427     "The code for this type.", NULL },
1428   { "name", typy_get_name, NULL,
1429     "The name for this type, or None.", NULL },
1430   { "sizeof", typy_get_sizeof, NULL,
1431     "The size of this type, in bytes.", NULL },
1432   { "tag", typy_get_tag, NULL,
1433     "The tag name for this type, or None.", NULL },
1434   { "objfile", typy_get_objfile, NULL,
1435     "The objfile this type was defined in, or None.", NULL },
1436   { NULL }
1437 };
1438
1439 static PyMethodDef type_object_methods[] =
1440 {
1441   { "array", typy_array, METH_VARARGS,
1442     "array ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1443 Return a type which represents an array of objects of this type.\n\
1444 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1445 If LOW_BOUND is omitted, a value of zero is used." },
1446   { "vector", typy_vector, METH_VARARGS,
1447     "vector ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1448 Return a type which represents a vector of objects of this type.\n\
1449 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1450 If LOW_BOUND is omitted, a value of zero is used.\n\
1451 Vectors differ from arrays in that if the current language has C-style\n\
1452 arrays, vectors don't decay to a pointer to the first element.\n\
1453 They are first class values." },
1454    { "__contains__", typy_has_key, METH_VARARGS,
1455      "T.__contains__(k) -> True if T has a field named k, else False" },
1456   { "const", typy_const, METH_NOARGS,
1457     "const () -> Type\n\
1458 Return a const variant of this type." },
1459   { "optimized_out", typy_optimized_out, METH_NOARGS,
1460     "optimized_out() -> Value\n\
1461 Return optimized out value of this type." },
1462   { "fields", typy_fields, METH_NOARGS,
1463     "fields () -> list\n\
1464 Return a list holding all the fields of this type.\n\
1465 Each field is a gdb.Field object." },
1466   { "get", typy_get, METH_VARARGS,
1467     "T.get(k[,default]) -> returns field named k in T, if it exists;\n\
1468 otherwise returns default, if supplied, or None if not." },
1469   { "has_key", typy_has_key, METH_VARARGS,
1470     "T.has_key(k) -> True if T has a field named k, else False" },
1471   { "items", typy_items, METH_NOARGS,
1472     "items () -> list\n\
1473 Return a list of (name, field) pairs of this type.\n\
1474 Each field is a gdb.Field object." },
1475   { "iteritems", typy_iteritems, METH_NOARGS,
1476     "iteritems () -> an iterator over the (name, field)\n\
1477 pairs of this type.  Each field is a gdb.Field object." },
1478   { "iterkeys", typy_iterkeys, METH_NOARGS,
1479     "iterkeys () -> an iterator over the field names of this type." },
1480   { "itervalues", typy_itervalues, METH_NOARGS,
1481     "itervalues () -> an iterator over the fields of this type.\n\
1482 Each field is a gdb.Field object." },
1483   { "keys", typy_field_names, METH_NOARGS,
1484     "keys () -> list\n\
1485 Return a list holding all the fields names of this type." },
1486   { "pointer", typy_pointer, METH_NOARGS,
1487     "pointer () -> Type\n\
1488 Return a type of pointer to this type." },
1489   { "range", typy_range, METH_NOARGS,
1490     "range () -> tuple\n\
1491 Return a tuple containing the lower and upper range for this type."},
1492   { "reference", typy_reference, METH_NOARGS,
1493     "reference () -> Type\n\
1494 Return a type of reference to this type." },
1495   { "strip_typedefs", typy_strip_typedefs, METH_NOARGS,
1496     "strip_typedefs () -> Type\n\
1497 Return a type formed by stripping this type of all typedefs."},
1498   { "target", typy_target, METH_NOARGS,
1499     "target () -> Type\n\
1500 Return the target type of this type." },
1501   { "template_argument", typy_template_argument, METH_VARARGS,
1502     "template_argument (arg, [block]) -> Type\n\
1503 Return the type of a template argument." },
1504   { "unqualified", typy_unqualified, METH_NOARGS,
1505     "unqualified () -> Type\n\
1506 Return a variant of this type without const or volatile attributes." },
1507   { "values", typy_values, METH_NOARGS,
1508     "values () -> list\n\
1509 Return a list holding all the fields of this type.\n\
1510 Each field is a gdb.Field object." },
1511   { "volatile", typy_volatile, METH_NOARGS,
1512     "volatile () -> Type\n\
1513 Return a volatile variant of this type" },
1514   { NULL }
1515 };
1516
1517 static PyNumberMethods type_object_as_number = {
1518   NULL,                       /* nb_add */
1519   NULL,                       /* nb_subtract */
1520   NULL,                       /* nb_multiply */
1521 #ifndef IS_PY3K
1522   NULL,                       /* nb_divide */
1523 #endif
1524   NULL,                       /* nb_remainder */
1525   NULL,                       /* nb_divmod */
1526   NULL,                       /* nb_power */
1527   NULL,                       /* nb_negative */
1528   NULL,                       /* nb_positive */
1529   NULL,                       /* nb_absolute */
1530   typy_nonzero,               /* nb_nonzero */
1531   NULL,                       /* nb_invert */
1532   NULL,                       /* nb_lshift */
1533   NULL,                       /* nb_rshift */
1534   NULL,                       /* nb_and */
1535   NULL,                       /* nb_xor */
1536   NULL,                       /* nb_or */
1537 #ifdef IS_PY3K
1538   NULL,                       /* nb_int */
1539   NULL,                       /* reserved */
1540 #else
1541   NULL,                       /* nb_coerce */
1542   NULL,                       /* nb_int */
1543   NULL,                       /* nb_long */
1544 #endif
1545   NULL,                       /* nb_float */
1546 #ifndef IS_PY3K
1547   NULL,                       /* nb_oct */
1548   NULL                        /* nb_hex */
1549 #endif
1550 };
1551
1552 static PyMappingMethods typy_mapping = {
1553   typy_length,
1554   typy_getitem,
1555   NULL                            /* no "set" method */
1556 };
1557
1558 PyTypeObject type_object_type =
1559 {
1560   PyVarObject_HEAD_INIT (NULL, 0)
1561   "gdb.Type",                     /*tp_name*/
1562   sizeof (type_object),           /*tp_basicsize*/
1563   0,                              /*tp_itemsize*/
1564   typy_dealloc,                   /*tp_dealloc*/
1565   0,                              /*tp_print*/
1566   0,                              /*tp_getattr*/
1567   0,                              /*tp_setattr*/
1568   0,                              /*tp_compare*/
1569   0,                              /*tp_repr*/
1570   &type_object_as_number,         /*tp_as_number*/
1571   0,                              /*tp_as_sequence*/
1572   &typy_mapping,                  /*tp_as_mapping*/
1573   0,                              /*tp_hash */
1574   0,                              /*tp_call*/
1575   typy_str,                       /*tp_str*/
1576   0,                              /*tp_getattro*/
1577   0,                              /*tp_setattro*/
1578   0,                              /*tp_as_buffer*/
1579   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER,  /*tp_flags*/
1580   "GDB type object",              /* tp_doc */
1581   0,                              /* tp_traverse */
1582   0,                              /* tp_clear */
1583   typy_richcompare,               /* tp_richcompare */
1584   0,                              /* tp_weaklistoffset */
1585   typy_iter,                      /* tp_iter */
1586   0,                              /* tp_iternext */
1587   type_object_methods,            /* tp_methods */
1588   0,                              /* tp_members */
1589   type_object_getset,             /* tp_getset */
1590   0,                              /* tp_base */
1591   0,                              /* tp_dict */
1592   0,                              /* tp_descr_get */
1593   0,                              /* tp_descr_set */
1594   0,                              /* tp_dictoffset */
1595   0,                              /* tp_init */
1596   0,                              /* tp_alloc */
1597   0,                              /* tp_new */
1598 };
1599
1600 static gdb_PyGetSetDef field_object_getset[] =
1601 {
1602   { "__dict__", gdb_py_generic_dict, NULL,
1603     "The __dict__ for this field.", &field_object_type },
1604   { NULL }
1605 };
1606
1607 PyTypeObject field_object_type =
1608 {
1609   PyVarObject_HEAD_INIT (NULL, 0)
1610   "gdb.Field",                    /*tp_name*/
1611   sizeof (field_object),          /*tp_basicsize*/
1612   0,                              /*tp_itemsize*/
1613   field_dealloc,                  /*tp_dealloc*/
1614   0,                              /*tp_print*/
1615   0,                              /*tp_getattr*/
1616   0,                              /*tp_setattr*/
1617   0,                              /*tp_compare*/
1618   0,                              /*tp_repr*/
1619   0,                              /*tp_as_number*/
1620   0,                              /*tp_as_sequence*/
1621   0,                              /*tp_as_mapping*/
1622   0,                              /*tp_hash */
1623   0,                              /*tp_call*/
1624   0,                              /*tp_str*/
1625   0,                              /*tp_getattro*/
1626   0,                              /*tp_setattro*/
1627   0,                              /*tp_as_buffer*/
1628   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER,  /*tp_flags*/
1629   "GDB field object",             /* tp_doc */
1630   0,                              /* tp_traverse */
1631   0,                              /* tp_clear */
1632   0,                              /* tp_richcompare */
1633   0,                              /* tp_weaklistoffset */
1634   0,                              /* tp_iter */
1635   0,                              /* tp_iternext */
1636   0,                              /* tp_methods */
1637   0,                              /* tp_members */
1638   field_object_getset,            /* tp_getset */
1639   0,                              /* tp_base */
1640   0,                              /* tp_dict */
1641   0,                              /* tp_descr_get */
1642   0,                              /* tp_descr_set */
1643   offsetof (field_object, dict),  /* tp_dictoffset */
1644   0,                              /* tp_init */
1645   0,                              /* tp_alloc */
1646   0,                              /* tp_new */
1647 };
1648
1649 PyTypeObject type_iterator_object_type = {
1650   PyVarObject_HEAD_INIT (NULL, 0)
1651   "gdb.TypeIterator",             /*tp_name*/
1652   sizeof (typy_iterator_object),  /*tp_basicsize*/
1653   0,                              /*tp_itemsize*/
1654   typy_iterator_dealloc,          /*tp_dealloc*/
1655   0,                              /*tp_print*/
1656   0,                              /*tp_getattr*/
1657   0,                              /*tp_setattr*/
1658   0,                              /*tp_compare*/
1659   0,                              /*tp_repr*/
1660   0,                              /*tp_as_number*/
1661   0,                              /*tp_as_sequence*/
1662   0,                              /*tp_as_mapping*/
1663   0,                              /*tp_hash */
1664   0,                              /*tp_call*/
1665   0,                              /*tp_str*/
1666   0,                              /*tp_getattro*/
1667   0,                              /*tp_setattro*/
1668   0,                              /*tp_as_buffer*/
1669   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER,  /*tp_flags*/
1670   "GDB type iterator object",     /*tp_doc */
1671   0,                              /*tp_traverse */
1672   0,                              /*tp_clear */
1673   0,                              /*tp_richcompare */
1674   0,                              /*tp_weaklistoffset */
1675   typy_iterator_iter,             /*tp_iter */
1676   typy_iterator_iternext,         /*tp_iternext */
1677   0                               /*tp_methods */
1678 };
This page took 0.118001 seconds and 4 git commands to generate.