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