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