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