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