1 /* Python interface to types.
3 Copyright (C) 2008-2020 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
22 #include "python-internal.h"
25 #include "cp-support.h"
29 #include "typeprint.h"
36 /* If a Type object is associated with an objfile, it is kept on a
37 doubly-linked list, rooted in the objfile. This lets us copy the
38 underlying struct type when the objfile is deleted. */
39 struct type_object *prev;
40 struct type_object *next;
43 extern PyTypeObject type_object_type
44 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("type_object");
51 /* Dictionary holding our attributes. */
55 extern PyTypeObject field_object_type
56 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("field_object");
58 /* A type iterator object. */
59 struct typy_iterator_object {
61 /* The current field index. */
64 enum gdbpy_iter_kind kind;
65 /* Pointer back to the original source type object. */
69 extern PyTypeObject type_iterator_object_type
70 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("typy_iterator_object");
72 /* This is used to initialize various gdb.TYPE_ constants. */
81 /* Forward declarations. */
82 static PyObject *typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind);
84 #define ENTRY(X) { X, #X }
86 static struct pyty_code pyty_codes[] =
88 ENTRY (TYPE_CODE_BITSTRING),
89 ENTRY (TYPE_CODE_PTR),
90 ENTRY (TYPE_CODE_ARRAY),
91 ENTRY (TYPE_CODE_STRUCT),
92 ENTRY (TYPE_CODE_UNION),
93 ENTRY (TYPE_CODE_ENUM),
94 ENTRY (TYPE_CODE_FLAGS),
95 ENTRY (TYPE_CODE_FUNC),
96 ENTRY (TYPE_CODE_INT),
97 ENTRY (TYPE_CODE_FLT),
98 ENTRY (TYPE_CODE_VOID),
99 ENTRY (TYPE_CODE_SET),
100 ENTRY (TYPE_CODE_RANGE),
101 ENTRY (TYPE_CODE_STRING),
102 ENTRY (TYPE_CODE_ERROR),
103 ENTRY (TYPE_CODE_METHOD),
104 ENTRY (TYPE_CODE_METHODPTR),
105 ENTRY (TYPE_CODE_MEMBERPTR),
106 ENTRY (TYPE_CODE_REF),
107 ENTRY (TYPE_CODE_RVALUE_REF),
108 ENTRY (TYPE_CODE_CHAR),
109 ENTRY (TYPE_CODE_BOOL),
110 ENTRY (TYPE_CODE_COMPLEX),
111 ENTRY (TYPE_CODE_TYPEDEF),
112 ENTRY (TYPE_CODE_NAMESPACE),
113 ENTRY (TYPE_CODE_DECFLOAT),
114 ENTRY (TYPE_CODE_INTERNAL_FUNCTION),
115 { TYPE_CODE_UNDEF, NULL }
121 field_dealloc (PyObject *obj)
123 field_object *f = (field_object *) obj;
125 Py_XDECREF (f->dict);
126 Py_TYPE (obj)->tp_free (obj);
132 gdbpy_ref<field_object> result (PyObject_New (field_object,
133 &field_object_type));
137 result->dict = PyDict_New ();
141 return (PyObject *) result.release ();
146 /* Return true if OBJ is of type gdb.Field, false otherwise. */
149 gdbpy_is_field (PyObject *obj)
151 return PyObject_TypeCheck (obj, &field_object_type);
154 /* Return the code for this type. */
156 typy_get_code (PyObject *self, void *closure)
158 struct type *type = ((type_object *) self)->type;
160 return gdb_py_object_from_longest (type->code ()).release ();
163 /* Helper function for typy_fields which converts a single field to a
164 gdb.Field object. Returns NULL on error. */
167 convert_field (struct type *type, int field)
169 gdbpy_ref<> result (field_new ());
174 gdbpy_ref<> arg (type_to_type_object (type));
177 if (PyObject_SetAttrString (result.get (), "parent_type", arg.get ()) < 0)
180 if (!field_is_static (&type->field (field)))
182 const char *attrstring;
184 if (type->code () == TYPE_CODE_ENUM)
186 arg = gdb_py_object_from_longest (TYPE_FIELD_ENUMVAL (type, field));
187 attrstring = "enumval";
191 if (TYPE_FIELD_LOC_KIND (type, field) == FIELD_LOC_KIND_DWARF_BLOCK)
192 arg = gdbpy_ref<>::new_reference (Py_None);
194 arg = gdb_py_object_from_longest (TYPE_FIELD_BITPOS (type, field));
195 attrstring = "bitpos";
201 if (PyObject_SetAttrString (result.get (), attrstring, arg.get ()) < 0)
206 if (TYPE_FIELD_NAME (type, field))
208 const char *field_name = TYPE_FIELD_NAME (type, field);
210 if (field_name[0] != '\0')
212 arg.reset (PyString_FromString (TYPE_FIELD_NAME (type, field)));
218 arg = gdbpy_ref<>::new_reference (Py_None);
220 if (PyObject_SetAttrString (result.get (), "name", arg.get ()) < 0)
223 arg = gdbpy_ref<>::new_reference (TYPE_FIELD_ARTIFICIAL (type, field)
224 ? Py_True : Py_False);
225 if (PyObject_SetAttrString (result.get (), "artificial", arg.get ()) < 0)
228 if (type->code () == TYPE_CODE_STRUCT)
229 arg = gdbpy_ref<>::new_reference (field < TYPE_N_BASECLASSES (type)
230 ? Py_True : Py_False);
232 arg = gdbpy_ref<>::new_reference (Py_False);
233 if (PyObject_SetAttrString (result.get (), "is_base_class", arg.get ()) < 0)
236 arg = gdb_py_object_from_longest (TYPE_FIELD_BITSIZE (type, field));
239 if (PyObject_SetAttrString (result.get (), "bitsize", arg.get ()) < 0)
242 /* A field can have a NULL type in some situations. */
243 if (type->field (field).type () == NULL)
244 arg = gdbpy_ref<>::new_reference (Py_None);
246 arg.reset (type_to_type_object (type->field (field).type ()));
249 if (PyObject_SetAttrString (result.get (), "type", arg.get ()) < 0)
255 /* Helper function to return the name of a field, as a gdb.Field object.
256 If the field doesn't have a name, None is returned. */
259 field_name (struct type *type, int field)
263 if (TYPE_FIELD_NAME (type, field))
264 result.reset (PyString_FromString (TYPE_FIELD_NAME (type, field)));
266 result = gdbpy_ref<>::new_reference (Py_None);
271 /* Helper function for Type standard mapping methods. Returns a
272 Python object for field i of the type. "kind" specifies what to
273 return: the name of the field, a gdb.Field object corresponding to
274 the field, or a tuple consisting of field name and gdb.Field
278 make_fielditem (struct type *type, int i, enum gdbpy_iter_kind kind)
284 gdbpy_ref<> key (field_name (type, i));
287 gdbpy_ref<> value = convert_field (type, i);
290 gdbpy_ref<> item (PyTuple_New (2));
293 PyTuple_SET_ITEM (item.get (), 0, key.release ());
294 PyTuple_SET_ITEM (item.get (), 1, value.release ());
298 return field_name (type, i);
300 return convert_field (type, i);
302 gdb_assert_not_reached ("invalid gdbpy_iter_kind");
305 /* Return a sequence of all field names, fields, or (name, field) pairs.
306 Each field is a gdb.Field object. */
309 typy_fields_items (PyObject *self, enum gdbpy_iter_kind kind)
311 PyObject *py_type = self;
312 struct type *type = ((type_object *) py_type)->type;
313 struct type *checked_type = type;
317 checked_type = check_typedef (checked_type);
319 catch (const gdb_exception &except)
321 GDB_PY_HANDLE_EXCEPTION (except);
324 gdbpy_ref<> type_holder;
325 if (checked_type != type)
327 type_holder.reset (type_to_type_object (checked_type));
328 if (type_holder == nullptr)
330 py_type = type_holder.get ();
332 gdbpy_ref<> iter (typy_make_iter (py_type, kind));
336 return PySequence_List (iter.get ());
339 /* Return a sequence of all fields. Each field is a gdb.Field object. */
342 typy_values (PyObject *self, PyObject *args)
344 return typy_fields_items (self, iter_values);
347 /* Return a sequence of all fields. Each field is a gdb.Field object.
348 This method is similar to typy_values, except where the supplied
349 gdb.Type is an array, in which case it returns a list of one entry
350 which is a gdb.Field object for a range (the array bounds). */
353 typy_fields (PyObject *self, PyObject *args)
355 struct type *type = ((type_object *) self)->type;
357 if (type->code () != TYPE_CODE_ARRAY)
358 return typy_fields_items (self, iter_values);
360 /* Array type. Handle this as a special case because the common
361 machinery wants struct or union or enum types. Build a list of
362 one entry which is the range for the array. */
363 gdbpy_ref<> r = convert_field (type, 0);
367 return Py_BuildValue ("[O]", r.get ());
370 /* Return a sequence of all field names. Each field is a gdb.Field object. */
373 typy_field_names (PyObject *self, PyObject *args)
375 return typy_fields_items (self, iter_keys);
378 /* Return a sequence of all (name, fields) pairs. Each field is a
382 typy_items (PyObject *self, PyObject *args)
384 return typy_fields_items (self, iter_items);
387 /* Return the type's name, or None. */
390 typy_get_name (PyObject *self, void *closure)
392 struct type *type = ((type_object *) self)->type;
394 if (type->name () == NULL)
396 return PyString_FromString (type->name ());
399 /* Return the type's tag, or None. */
401 typy_get_tag (PyObject *self, void *closure)
403 struct type *type = ((type_object *) self)->type;
404 const char *tagname = nullptr;
406 if (type->code () == TYPE_CODE_STRUCT
407 || type->code () == TYPE_CODE_UNION
408 || type->code () == TYPE_CODE_ENUM)
409 tagname = type->name ();
411 if (tagname == nullptr)
413 return PyString_FromString (tagname);
416 /* Return the type's objfile, or None. */
418 typy_get_objfile (PyObject *self, void *closure)
420 struct type *type = ((type_object *) self)->type;
421 struct objfile *objfile = TYPE_OBJFILE (type);
423 if (objfile == nullptr)
425 return objfile_to_objfile_object (objfile).release ();
428 /* Return the type, stripped of typedefs. */
430 typy_strip_typedefs (PyObject *self, PyObject *args)
432 struct type *type = ((type_object *) self)->type;
436 type = check_typedef (type);
438 catch (const gdb_exception &except)
440 GDB_PY_HANDLE_EXCEPTION (except);
443 return type_to_type_object (type);
446 /* Strip typedefs and pointers/reference from a type. Then check that
447 it is a struct, union, or enum type. If not, raise TypeError. */
450 typy_get_composite (struct type *type)
457 type = check_typedef (type);
459 catch (const gdb_exception &except)
461 GDB_PY_HANDLE_EXCEPTION (except);
464 if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
466 type = TYPE_TARGET_TYPE (type);
469 /* If this is not a struct, union, or enum type, raise TypeError
471 if (type->code () != TYPE_CODE_STRUCT
472 && type->code () != TYPE_CODE_UNION
473 && type->code () != TYPE_CODE_ENUM
474 && type->code () != TYPE_CODE_METHOD
475 && type->code () != TYPE_CODE_FUNC)
477 PyErr_SetString (PyExc_TypeError,
478 "Type is not a structure, union, enum, or function type.");
485 /* Helper for typy_array and typy_vector. */
488 typy_array_1 (PyObject *self, PyObject *args, int is_vector)
491 PyObject *n2_obj = NULL;
492 struct type *array = NULL;
493 struct type *type = ((type_object *) self)->type;
495 if (! PyArg_ParseTuple (args, "l|O", &n1, &n2_obj))
500 if (!PyInt_Check (n2_obj))
502 PyErr_SetString (PyExc_RuntimeError,
503 _("Array bound must be an integer"));
507 if (! gdb_py_int_as_long (n2_obj, &n2))
516 if (n2 < n1 - 1) /* Note: An empty array has n2 == n1 - 1. */
518 PyErr_SetString (PyExc_ValueError,
519 _("Array length must not be negative"));
525 array = lookup_array_range_type (type, n1, n2);
527 make_vector_type (array);
529 catch (const gdb_exception &except)
531 GDB_PY_HANDLE_EXCEPTION (except);
534 return type_to_type_object (array);
537 /* Return an array type. */
540 typy_array (PyObject *self, PyObject *args)
542 return typy_array_1 (self, args, 0);
545 /* Return a vector type. */
548 typy_vector (PyObject *self, PyObject *args)
550 return typy_array_1 (self, args, 1);
553 /* Return a Type object which represents a pointer to SELF. */
555 typy_pointer (PyObject *self, PyObject *args)
557 struct type *type = ((type_object *) self)->type;
561 type = lookup_pointer_type (type);
563 catch (const gdb_exception &except)
565 GDB_PY_HANDLE_EXCEPTION (except);
568 return type_to_type_object (type);
571 /* Return the range of a type represented by SELF. The return type is
572 a tuple. The first element of the tuple contains the low bound,
573 while the second element of the tuple contains the high bound. */
575 typy_range (PyObject *self, PyObject *args)
577 struct type *type = ((type_object *) self)->type;
578 /* Initialize these to appease GCC warnings. */
579 LONGEST low = 0, high = 0;
581 if (type->code () != TYPE_CODE_ARRAY
582 && type->code () != TYPE_CODE_STRING
583 && type->code () != TYPE_CODE_RANGE)
585 PyErr_SetString (PyExc_RuntimeError,
586 _("This type does not have a range."));
590 switch (type->code ())
592 case TYPE_CODE_ARRAY:
593 case TYPE_CODE_STRING:
594 case TYPE_CODE_RANGE:
595 low = type->bounds ()->low.const_val ();
596 high = type->bounds ()->high.const_val ();;
600 gdbpy_ref<> low_bound = gdb_py_object_from_longest (low);
601 if (low_bound == NULL)
604 gdbpy_ref<> high_bound = gdb_py_object_from_longest (high);
605 if (high_bound == NULL)
608 gdbpy_ref<> result (PyTuple_New (2));
612 if (PyTuple_SetItem (result.get (), 0, low_bound.release ()) != 0
613 || PyTuple_SetItem (result.get (), 1, high_bound.release ()) != 0)
615 return result.release ();
618 /* Return a Type object which represents a reference to SELF. */
620 typy_reference (PyObject *self, PyObject *args)
622 struct type *type = ((type_object *) self)->type;
626 type = lookup_lvalue_reference_type (type);
628 catch (const gdb_exception &except)
630 GDB_PY_HANDLE_EXCEPTION (except);
633 return type_to_type_object (type);
636 /* Return a Type object which represents the target type of SELF. */
638 typy_target (PyObject *self, PyObject *args)
640 struct type *type = ((type_object *) self)->type;
642 if (!TYPE_TARGET_TYPE (type))
644 PyErr_SetString (PyExc_RuntimeError,
645 _("Type does not have a target."));
649 return type_to_type_object (TYPE_TARGET_TYPE (type));
652 /* Return a const-qualified type variant. */
654 typy_const (PyObject *self, PyObject *args)
656 struct type *type = ((type_object *) self)->type;
660 type = make_cv_type (1, 0, type, NULL);
662 catch (const gdb_exception &except)
664 GDB_PY_HANDLE_EXCEPTION (except);
667 return type_to_type_object (type);
670 /* Return a volatile-qualified type variant. */
672 typy_volatile (PyObject *self, PyObject *args)
674 struct type *type = ((type_object *) self)->type;
678 type = make_cv_type (0, 1, type, NULL);
680 catch (const gdb_exception &except)
682 GDB_PY_HANDLE_EXCEPTION (except);
685 return type_to_type_object (type);
688 /* Return an unqualified type variant. */
690 typy_unqualified (PyObject *self, PyObject *args)
692 struct type *type = ((type_object *) self)->type;
696 type = make_cv_type (0, 0, type, NULL);
698 catch (const gdb_exception &except)
700 GDB_PY_HANDLE_EXCEPTION (except);
703 return type_to_type_object (type);
706 /* Return the size of the type represented by SELF, in bytes. */
708 typy_get_sizeof (PyObject *self, void *closure)
710 struct type *type = ((type_object *) self)->type;
712 bool size_varies = false;
715 check_typedef (type);
717 size_varies = TYPE_HAS_DYNAMIC_LENGTH (type);
719 catch (const gdb_exception &except)
723 /* Ignore exceptions. */
727 return gdb_py_object_from_longest (TYPE_LENGTH (type)).release ();
730 /* Return the alignment of the type represented by SELF, in bytes. */
732 typy_get_alignof (PyObject *self, void *closure)
734 struct type *type = ((type_object *) self)->type;
739 align = type_align (type);
741 catch (const gdb_exception &except)
746 /* Ignore exceptions. */
748 return gdb_py_object_from_ulongest (align).release ();
751 /* Return whether or not the type is dynamic. */
753 typy_get_dynamic (PyObject *self, void *closure)
755 struct type *type = ((type_object *) self)->type;
760 result = is_dynamic_type (type);
762 catch (const gdb_exception &except)
764 /* Ignore exceptions. */
773 typy_lookup_typename (const char *type_name, const struct block *block)
775 struct type *type = NULL;
779 if (startswith (type_name, "struct "))
780 type = lookup_struct (type_name + 7, NULL);
781 else if (startswith (type_name, "union "))
782 type = lookup_union (type_name + 6, NULL);
783 else if (startswith (type_name, "enum "))
784 type = lookup_enum (type_name + 5, NULL);
786 type = lookup_typename (python_language,
787 type_name, block, 0);
789 catch (const gdb_exception &except)
791 GDB_PY_HANDLE_EXCEPTION (except);
798 typy_lookup_type (struct demangle_component *demangled,
799 const struct block *block)
801 struct type *type, *rtype = NULL;
802 enum demangle_component_type demangled_type;
804 /* Save the type: typy_lookup_type() may (indirectly) overwrite
805 memory pointed by demangled. */
806 demangled_type = demangled->type;
808 if (demangled_type == DEMANGLE_COMPONENT_POINTER
809 || demangled_type == DEMANGLE_COMPONENT_REFERENCE
810 || demangled_type == DEMANGLE_COMPONENT_RVALUE_REFERENCE
811 || demangled_type == DEMANGLE_COMPONENT_CONST
812 || demangled_type == DEMANGLE_COMPONENT_VOLATILE)
814 type = typy_lookup_type (demangled->u.s_binary.left, block);
820 /* If the demangled_type matches with one of the types
821 below, run the corresponding function and save the type
822 to return later. We cannot just return here as we are in
823 an exception handler. */
824 switch (demangled_type)
826 case DEMANGLE_COMPONENT_REFERENCE:
827 rtype = lookup_lvalue_reference_type (type);
829 case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
830 rtype = lookup_rvalue_reference_type (type);
832 case DEMANGLE_COMPONENT_POINTER:
833 rtype = lookup_pointer_type (type);
835 case DEMANGLE_COMPONENT_CONST:
836 rtype = make_cv_type (1, 0, type, NULL);
838 case DEMANGLE_COMPONENT_VOLATILE:
839 rtype = make_cv_type (0, 1, type, NULL);
843 catch (const gdb_exception &except)
845 GDB_PY_HANDLE_EXCEPTION (except);
849 /* If we have a type from the switch statement above, just return
854 /* We don't have a type, so lookup the type. */
855 gdb::unique_xmalloc_ptr<char> type_name = cp_comp_to_string (demangled, 10);
856 return typy_lookup_typename (type_name.get (), block);
859 /* This is a helper function for typy_template_argument that is used
860 when the type does not have template symbols attached. It works by
861 parsing the type name. This happens with compilers, like older
862 versions of GCC, that do not emit DW_TAG_template_*. */
865 typy_legacy_template_argument (struct type *type, const struct block *block,
869 struct demangle_component *demangled;
870 std::unique_ptr<demangle_parse_info> info;
872 struct type *argtype;
874 if (type->name () == NULL)
876 PyErr_SetString (PyExc_RuntimeError, _("Null type name."));
882 /* Note -- this is not thread-safe. */
883 info = cp_demangled_name_to_comp (type->name (), &err);
885 catch (const gdb_exception &except)
887 GDB_PY_HANDLE_EXCEPTION (except);
892 PyErr_SetString (PyExc_RuntimeError, err.c_str ());
895 demangled = info->tree;
897 /* Strip off component names. */
898 while (demangled->type == DEMANGLE_COMPONENT_QUAL_NAME
899 || demangled->type == DEMANGLE_COMPONENT_LOCAL_NAME)
900 demangled = demangled->u.s_binary.right;
902 if (demangled->type != DEMANGLE_COMPONENT_TEMPLATE)
904 PyErr_SetString (PyExc_RuntimeError, _("Type is not a template."));
908 /* Skip from the template to the arguments. */
909 demangled = demangled->u.s_binary.right;
911 for (i = 0; demangled && i < argno; ++i)
912 demangled = demangled->u.s_binary.right;
916 PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
921 argtype = typy_lookup_type (demangled->u.s_binary.left, block);
925 return type_to_type_object (argtype);
929 typy_template_argument (PyObject *self, PyObject *args)
932 struct type *type = ((type_object *) self)->type;
933 const struct block *block = NULL;
934 PyObject *block_obj = NULL;
936 struct value *val = NULL;
938 if (! PyArg_ParseTuple (args, "i|O", &argno, &block_obj))
943 PyErr_SetString (PyExc_RuntimeError,
944 _("Template argument number must be non-negative"));
950 block = block_object_to_block (block_obj);
953 PyErr_SetString (PyExc_RuntimeError,
954 _("Second argument must be block."));
961 type = check_typedef (type);
962 if (TYPE_IS_REFERENCE (type))
963 type = check_typedef (TYPE_TARGET_TYPE (type));
965 catch (const gdb_exception &except)
967 GDB_PY_HANDLE_EXCEPTION (except);
970 /* We might not have DW_TAG_template_*, so try to parse the type's
971 name. This is inefficient if we do not have a template type --
972 but that is going to wind up as an error anyhow. */
973 if (! TYPE_N_TEMPLATE_ARGUMENTS (type))
974 return typy_legacy_template_argument (type, block, argno);
976 if (argno >= TYPE_N_TEMPLATE_ARGUMENTS (type))
978 PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."),
983 sym = TYPE_TEMPLATE_ARGUMENT (type, argno);
984 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
985 return type_to_type_object (SYMBOL_TYPE (sym));
986 else if (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT)
988 PyErr_Format (PyExc_RuntimeError,
989 _("Template argument is optimized out"));
995 val = value_of_variable (sym, block);
997 catch (const gdb_exception &except)
999 GDB_PY_HANDLE_EXCEPTION (except);
1002 return value_to_value_object (val);
1006 typy_str (PyObject *self)
1008 string_file thetype;
1012 LA_PRINT_TYPE (type_object_to_type (self), "", &thetype, -1, 0,
1013 &type_print_raw_options);
1015 catch (const gdb_exception &except)
1017 GDB_PY_HANDLE_EXCEPTION (except);
1020 return PyUnicode_Decode (thetype.c_str (), thetype.size (),
1021 host_charset (), NULL);
1024 /* Implement the richcompare method. */
1027 typy_richcompare (PyObject *self, PyObject *other, int op)
1029 bool result = false;
1030 struct type *type1 = type_object_to_type (self);
1031 struct type *type2 = type_object_to_type (other);
1033 /* We can only compare ourselves to another Type object, and only
1034 for equality or inequality. */
1035 if (type2 == NULL || (op != Py_EQ && op != Py_NE))
1037 Py_INCREF (Py_NotImplemented);
1038 return Py_NotImplemented;
1047 result = types_deeply_equal (type1, type2);
1049 catch (const gdb_exception &except)
1051 /* If there is a GDB exception, a comparison is not capable
1052 (or trusted), so exit. */
1053 GDB_PY_HANDLE_EXCEPTION (except);
1057 if (op == (result ? Py_EQ : Py_NE))
1064 static const struct objfile_data *typy_objfile_data_key;
1067 save_objfile_types (struct objfile *objfile, void *datum)
1069 type_object *obj = (type_object *) datum;
1071 if (!gdb_python_initialized)
1074 /* This prevents another thread from freeing the objects we're
1076 gdbpy_enter enter_py (objfile->arch (), current_language);
1078 htab_up copied_types = create_copied_types_hash (objfile);
1082 type_object *next = obj->next;
1084 htab_empty (copied_types.get ());
1086 obj->type = copy_type_recursive (objfile, obj->type,
1087 copied_types.get ());
1097 set_type (type_object *obj, struct type *type)
1101 if (type && TYPE_OBJFILE (type))
1103 struct objfile *objfile = TYPE_OBJFILE (type);
1105 obj->next = ((type_object *)
1106 objfile_data (objfile, typy_objfile_data_key));
1108 obj->next->prev = obj;
1109 set_objfile_data (objfile, typy_objfile_data_key, obj);
1116 typy_dealloc (PyObject *obj)
1118 type_object *type = (type_object *) obj;
1121 type->prev->next = type->next;
1122 else if (type->type && TYPE_OBJFILE (type->type))
1124 /* Must reset head of list. */
1125 struct objfile *objfile = TYPE_OBJFILE (type->type);
1128 set_objfile_data (objfile, typy_objfile_data_key, type->next);
1131 type->next->prev = type->prev;
1133 Py_TYPE (type)->tp_free (type);
1136 /* Return number of fields ("length" of the field dictionary). */
1139 typy_length (PyObject *self)
1141 struct type *type = ((type_object *) self)->type;
1143 type = typy_get_composite (type);
1147 return type->num_fields ();
1150 /* Implements boolean evaluation of gdb.Type. Handle this like other
1151 Python objects that don't have a meaningful truth value -- all
1155 typy_nonzero (PyObject *self)
1160 /* Return optimized out value of this type. */
1163 typy_optimized_out (PyObject *self, PyObject *args)
1165 struct type *type = ((type_object *) self)->type;
1167 return value_to_value_object (allocate_optimized_out_value (type));
1170 /* Return a gdb.Field object for the field named by the argument. */
1173 typy_getitem (PyObject *self, PyObject *key)
1175 struct type *type = ((type_object *) self)->type;
1178 gdb::unique_xmalloc_ptr<char> field = python_string_to_host_string (key);
1182 /* We want just fields of this type, not of base types, so instead of
1183 using lookup_struct_elt_type, portions of that function are
1186 type = typy_get_composite (type);
1190 for (i = 0; i < type->num_fields (); i++)
1192 const char *t_field_name = TYPE_FIELD_NAME (type, i);
1194 if (t_field_name && (strcmp_iw (t_field_name, field.get ()) == 0))
1195 return convert_field (type, i).release ();
1197 PyErr_SetObject (PyExc_KeyError, key);
1201 /* Implement the "get" method on the type object. This is the
1202 same as getitem if the key is present, but returns the supplied
1203 default value or None if the key is not found. */
1206 typy_get (PyObject *self, PyObject *args)
1208 PyObject *key, *defval = Py_None, *result;
1210 if (!PyArg_UnpackTuple (args, "get", 1, 2, &key, &defval))
1213 result = typy_getitem (self, key);
1217 /* typy_getitem returned error status. If the exception is
1218 KeyError, clear the exception status and return the defval
1219 instead. Otherwise return the exception unchanged. */
1220 if (!PyErr_ExceptionMatches (PyExc_KeyError))
1228 /* Implement the "has_key" method on the type object. */
1231 typy_has_key (PyObject *self, PyObject *args)
1233 struct type *type = ((type_object *) self)->type;
1237 if (!PyArg_ParseTuple (args, "s", &field))
1240 /* We want just fields of this type, not of base types, so instead of
1241 using lookup_struct_elt_type, portions of that function are
1244 type = typy_get_composite (type);
1248 for (i = 0; i < type->num_fields (); i++)
1250 const char *t_field_name = TYPE_FIELD_NAME (type, i);
1252 if (t_field_name && (strcmp_iw (t_field_name, field) == 0))
1258 /* Make an iterator object to iterate over keys, values, or items. */
1261 typy_make_iter (PyObject *self, enum gdbpy_iter_kind kind)
1263 typy_iterator_object *typy_iter_obj;
1265 /* Check that "self" is a structure or union type. */
1266 if (typy_get_composite (((type_object *) self)->type) == NULL)
1269 typy_iter_obj = PyObject_New (typy_iterator_object,
1270 &type_iterator_object_type);
1271 if (typy_iter_obj == NULL)
1274 typy_iter_obj->field = 0;
1275 typy_iter_obj->kind = kind;
1277 typy_iter_obj->source = (type_object *) self;
1279 return (PyObject *) typy_iter_obj;
1282 /* iteritems() method. */
1285 typy_iteritems (PyObject *self, PyObject *args)
1287 return typy_make_iter (self, iter_items);
1290 /* iterkeys() method. */
1293 typy_iterkeys (PyObject *self, PyObject *args)
1295 return typy_make_iter (self, iter_keys);
1298 /* Iterating over the class, same as iterkeys except for the function
1302 typy_iter (PyObject *self)
1304 return typy_make_iter (self, iter_keys);
1307 /* itervalues() method. */
1310 typy_itervalues (PyObject *self, PyObject *args)
1312 return typy_make_iter (self, iter_values);
1315 /* Return a reference to the type iterator. */
1318 typy_iterator_iter (PyObject *self)
1324 /* Return the next field in the iteration through the list of fields
1328 typy_iterator_iternext (PyObject *self)
1330 typy_iterator_object *iter_obj = (typy_iterator_object *) self;
1331 struct type *type = iter_obj->source->type;
1333 if (iter_obj->field < type->num_fields ())
1335 gdbpy_ref<> result = make_fielditem (type, iter_obj->field,
1339 return result.release ();
1346 typy_iterator_dealloc (PyObject *obj)
1348 typy_iterator_object *iter_obj = (typy_iterator_object *) obj;
1350 Py_DECREF (iter_obj->source);
1351 Py_TYPE (obj)->tp_free (obj);
1354 /* Create a new Type referring to TYPE. */
1356 type_to_type_object (struct type *type)
1358 type_object *type_obj;
1362 /* Try not to let stub types leak out to Python. */
1363 if (type->is_stub ())
1364 type = check_typedef (type);
1368 /* Just ignore failures in check_typedef. */
1371 type_obj = PyObject_New (type_object, &type_object_type);
1373 set_type (type_obj, type);
1375 return (PyObject *) type_obj;
1379 type_object_to_type (PyObject *obj)
1381 if (! PyObject_TypeCheck (obj, &type_object_type))
1383 return ((type_object *) obj)->type;
1388 /* Implementation of gdb.lookup_type. */
1390 gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw)
1392 static const char *keywords[] = { "name", "block", NULL };
1393 const char *type_name = NULL;
1394 struct type *type = NULL;
1395 PyObject *block_obj = NULL;
1396 const struct block *block = NULL;
1398 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O", keywords,
1399 &type_name, &block_obj))
1404 block = block_object_to_block (block_obj);
1407 PyErr_SetString (PyExc_RuntimeError,
1408 _("'block' argument must be a Block."));
1413 type = typy_lookup_typename (type_name, block);
1417 return type_to_type_object (type);
1421 gdbpy_initialize_types (void)
1425 typy_objfile_data_key
1426 = register_objfile_data_with_cleanup (save_objfile_types, NULL);
1428 if (PyType_Ready (&type_object_type) < 0)
1430 if (PyType_Ready (&field_object_type) < 0)
1432 if (PyType_Ready (&type_iterator_object_type) < 0)
1435 for (i = 0; pyty_codes[i].name; ++i)
1437 if (PyModule_AddIntConstant (gdb_module, pyty_codes[i].name,
1438 pyty_codes[i].code) < 0)
1442 if (gdb_pymodule_addobject (gdb_module, "Type",
1443 (PyObject *) &type_object_type) < 0)
1446 if (gdb_pymodule_addobject (gdb_module, "TypeIterator",
1447 (PyObject *) &type_iterator_object_type) < 0)
1450 return gdb_pymodule_addobject (gdb_module, "Field",
1451 (PyObject *) &field_object_type);
1456 static gdb_PyGetSetDef type_object_getset[] =
1458 { "alignof", typy_get_alignof, NULL,
1459 "The alignment of this type, in bytes.", NULL },
1460 { "code", typy_get_code, NULL,
1461 "The code for this type.", NULL },
1462 { "dynamic", typy_get_dynamic, NULL,
1463 "Whether this type is dynamic.", NULL },
1464 { "name", typy_get_name, NULL,
1465 "The name for this type, or None.", NULL },
1466 { "sizeof", typy_get_sizeof, NULL,
1467 "The size of this type, in bytes.", NULL },
1468 { "tag", typy_get_tag, NULL,
1469 "The tag name for this type, or None.", NULL },
1470 { "objfile", typy_get_objfile, NULL,
1471 "The objfile this type was defined in, or None.", NULL },
1475 static PyMethodDef type_object_methods[] =
1477 { "array", typy_array, METH_VARARGS,
1478 "array ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1479 Return a type which represents an array of objects of this type.\n\
1480 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1481 If LOW_BOUND is omitted, a value of zero is used." },
1482 { "vector", typy_vector, METH_VARARGS,
1483 "vector ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1484 Return a type which represents a vector of objects of this type.\n\
1485 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1486 If LOW_BOUND is omitted, a value of zero is used.\n\
1487 Vectors differ from arrays in that if the current language has C-style\n\
1488 arrays, vectors don't decay to a pointer to the first element.\n\
1489 They are first class values." },
1490 { "__contains__", typy_has_key, METH_VARARGS,
1491 "T.__contains__(k) -> True if T has a field named k, else False" },
1492 { "const", typy_const, METH_NOARGS,
1493 "const () -> Type\n\
1494 Return a const variant of this type." },
1495 { "optimized_out", typy_optimized_out, METH_NOARGS,
1496 "optimized_out() -> Value\n\
1497 Return optimized out value of this type." },
1498 { "fields", typy_fields, METH_NOARGS,
1499 "fields () -> list\n\
1500 Return a list holding all the fields of this type.\n\
1501 Each field is a gdb.Field object." },
1502 { "get", typy_get, METH_VARARGS,
1503 "T.get(k[,default]) -> returns field named k in T, if it exists;\n\
1504 otherwise returns default, if supplied, or None if not." },
1505 { "has_key", typy_has_key, METH_VARARGS,
1506 "T.has_key(k) -> True if T has a field named k, else False" },
1507 { "items", typy_items, METH_NOARGS,
1508 "items () -> list\n\
1509 Return a list of (name, field) pairs of this type.\n\
1510 Each field is a gdb.Field object." },
1511 { "iteritems", typy_iteritems, METH_NOARGS,
1512 "iteritems () -> an iterator over the (name, field)\n\
1513 pairs of this type. Each field is a gdb.Field object." },
1514 { "iterkeys", typy_iterkeys, METH_NOARGS,
1515 "iterkeys () -> an iterator over the field names of this type." },
1516 { "itervalues", typy_itervalues, METH_NOARGS,
1517 "itervalues () -> an iterator over the fields of this type.\n\
1518 Each field is a gdb.Field object." },
1519 { "keys", typy_field_names, METH_NOARGS,
1521 Return a list holding all the fields names of this type." },
1522 { "pointer", typy_pointer, METH_NOARGS,
1523 "pointer () -> Type\n\
1524 Return a type of pointer to this type." },
1525 { "range", typy_range, METH_NOARGS,
1526 "range () -> tuple\n\
1527 Return a tuple containing the lower and upper range for this type."},
1528 { "reference", typy_reference, METH_NOARGS,
1529 "reference () -> Type\n\
1530 Return a type of reference to this type." },
1531 { "strip_typedefs", typy_strip_typedefs, METH_NOARGS,
1532 "strip_typedefs () -> Type\n\
1533 Return a type formed by stripping this type of all typedefs."},
1534 { "target", typy_target, METH_NOARGS,
1535 "target () -> Type\n\
1536 Return the target type of this type." },
1537 { "template_argument", typy_template_argument, METH_VARARGS,
1538 "template_argument (arg, [block]) -> Type\n\
1539 Return the type of a template argument." },
1540 { "unqualified", typy_unqualified, METH_NOARGS,
1541 "unqualified () -> Type\n\
1542 Return a variant of this type without const or volatile attributes." },
1543 { "values", typy_values, METH_NOARGS,
1544 "values () -> list\n\
1545 Return a list holding all the fields of this type.\n\
1546 Each field is a gdb.Field object." },
1547 { "volatile", typy_volatile, METH_NOARGS,
1548 "volatile () -> Type\n\
1549 Return a volatile variant of this type" },
1553 static PyNumberMethods type_object_as_number = {
1555 NULL, /* nb_subtract */
1556 NULL, /* nb_multiply */
1558 NULL, /* nb_divide */
1560 NULL, /* nb_remainder */
1561 NULL, /* nb_divmod */
1562 NULL, /* nb_power */
1563 NULL, /* nb_negative */
1564 NULL, /* nb_positive */
1565 NULL, /* nb_absolute */
1566 typy_nonzero, /* nb_nonzero */
1567 NULL, /* nb_invert */
1568 NULL, /* nb_lshift */
1569 NULL, /* nb_rshift */
1575 NULL, /* reserved */
1577 NULL, /* nb_coerce */
1581 NULL, /* nb_float */
1588 static PyMappingMethods typy_mapping = {
1591 NULL /* no "set" method */
1594 PyTypeObject type_object_type =
1596 PyVarObject_HEAD_INIT (NULL, 0)
1597 "gdb.Type", /*tp_name*/
1598 sizeof (type_object), /*tp_basicsize*/
1600 typy_dealloc, /*tp_dealloc*/
1606 &type_object_as_number, /*tp_as_number*/
1607 0, /*tp_as_sequence*/
1608 &typy_mapping, /*tp_as_mapping*/
1611 typy_str, /*tp_str*/
1615 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
1616 "GDB type object", /* tp_doc */
1617 0, /* tp_traverse */
1619 typy_richcompare, /* tp_richcompare */
1620 0, /* tp_weaklistoffset */
1621 typy_iter, /* tp_iter */
1622 0, /* tp_iternext */
1623 type_object_methods, /* tp_methods */
1625 type_object_getset, /* tp_getset */
1628 0, /* tp_descr_get */
1629 0, /* tp_descr_set */
1630 0, /* tp_dictoffset */
1636 static gdb_PyGetSetDef field_object_getset[] =
1638 { "__dict__", gdb_py_generic_dict, NULL,
1639 "The __dict__ for this field.", &field_object_type },
1643 PyTypeObject field_object_type =
1645 PyVarObject_HEAD_INIT (NULL, 0)
1646 "gdb.Field", /*tp_name*/
1647 sizeof (field_object), /*tp_basicsize*/
1649 field_dealloc, /*tp_dealloc*/
1656 0, /*tp_as_sequence*/
1657 0, /*tp_as_mapping*/
1664 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
1665 "GDB field object", /* tp_doc */
1666 0, /* tp_traverse */
1668 0, /* tp_richcompare */
1669 0, /* tp_weaklistoffset */
1671 0, /* tp_iternext */
1674 field_object_getset, /* tp_getset */
1677 0, /* tp_descr_get */
1678 0, /* tp_descr_set */
1679 offsetof (field_object, dict), /* tp_dictoffset */
1685 PyTypeObject type_iterator_object_type = {
1686 PyVarObject_HEAD_INIT (NULL, 0)
1687 "gdb.TypeIterator", /*tp_name*/
1688 sizeof (typy_iterator_object), /*tp_basicsize*/
1690 typy_iterator_dealloc, /*tp_dealloc*/
1697 0, /*tp_as_sequence*/
1698 0, /*tp_as_mapping*/
1705 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
1706 "GDB type iterator object", /*tp_doc */
1709 0, /*tp_richcompare */
1710 0, /*tp_weaklistoffset */
1711 typy_iterator_iter, /*tp_iter */
1712 typy_iterator_iternext, /*tp_iternext */