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