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