1 /* Python interface to types.
3 Copyright (C) 2008-2015 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"
30 #include "typeprint.h"
32 typedef struct pyty_type_object
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 pyty_type_object
*prev
;
41 struct pyty_type_object
*next
;
44 extern PyTypeObject type_object_type
45 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("type_object");
48 typedef struct pyty_field_object
52 /* Dictionary holding our attributes. */
56 extern PyTypeObject field_object_type
57 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("field_object");
59 /* A type iterator object. */
62 /* The current field index. */
65 enum gdbpy_iter_kind kind
;
66 /* Pointer back to the original source type object. */
67 struct pyty_type_object
*source
;
68 } typy_iterator_object
;
70 extern PyTypeObject type_iterator_object_type
71 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("typy_iterator_object");
73 /* This is used to initialize various gdb.TYPE_ constants. */
82 /* Forward declarations. */
83 static PyObject
*typy_make_iter (PyObject
*self
, enum gdbpy_iter_kind kind
);
85 #define ENTRY(X) { X, #X }
87 static struct pyty_code pyty_codes
[] =
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_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 field_object
*result
= PyObject_New (field_object
, &field_object_type
);
136 result
->dict
= PyDict_New ();
143 return (PyObject
*) result
;
148 /* Return true if OBJ is of type gdb.Field, false otherwise. */
151 gdbpy_is_field (PyObject
*obj
)
153 return PyObject_TypeCheck (obj
, &field_object_type
);
156 /* Return the code for this type. */
158 typy_get_code (PyObject
*self
, void *closure
)
160 struct type
*type
= ((type_object
*) self
)->type
;
162 return PyInt_FromLong (TYPE_CODE (type
));
165 /* Helper function for typy_fields which converts a single field to a
166 gdb.Field object. Returns NULL on error. */
169 convert_field (struct type
*type
, int field
)
171 PyObject
*result
= field_new ();
177 arg
= type_to_type_object (type
);
180 if (PyObject_SetAttrString (result
, "parent_type", arg
) < 0)
184 if (!field_is_static (&TYPE_FIELD (type
, field
)))
186 const char *attrstring
;
188 if (TYPE_CODE (type
) == TYPE_CODE_ENUM
)
190 arg
= gdb_py_long_from_longest (TYPE_FIELD_ENUMVAL (type
, field
));
191 attrstring
= "enumval";
195 arg
= gdb_py_long_from_longest (TYPE_FIELD_BITPOS (type
, field
));
196 attrstring
= "bitpos";
202 /* At least python-2.4 had the second parameter non-const. */
203 if (PyObject_SetAttrString (result
, (char *) attrstring
, arg
) < 0)
209 if (TYPE_FIELD_NAME (type
, field
))
211 const char *field_name
= TYPE_FIELD_NAME (type
, field
);
213 if (field_name
[0] != '\0')
215 arg
= PyString_FromString (TYPE_FIELD_NAME (type
, field
));
225 if (PyObject_SetAttrString (result
, "name", arg
) < 0)
229 arg
= TYPE_FIELD_ARTIFICIAL (type
, field
) ? Py_True
: Py_False
;
231 if (PyObject_SetAttrString (result
, "artificial", arg
) < 0)
235 if (TYPE_CODE (type
) == TYPE_CODE_STRUCT
)
236 arg
= field
< TYPE_N_BASECLASSES (type
) ? Py_True
: Py_False
;
240 if (PyObject_SetAttrString (result
, "is_base_class", arg
) < 0)
244 arg
= PyLong_FromLong (TYPE_FIELD_BITSIZE (type
, field
));
247 if (PyObject_SetAttrString (result
, "bitsize", arg
) < 0)
251 /* A field can have a NULL type in some situations. */
252 if (TYPE_FIELD_TYPE (type
, field
) == NULL
)
258 arg
= type_to_type_object (TYPE_FIELD_TYPE (type
, field
));
261 if (PyObject_SetAttrString (result
, "type", arg
) < 0)
274 /* Helper function to return the name of a field, as a gdb.Field object.
275 If the field doesn't have a name, None is returned. */
278 field_name (struct type
*type
, int field
)
282 if (TYPE_FIELD_NAME (type
, field
))
283 result
= PyString_FromString (TYPE_FIELD_NAME (type
, field
));
292 /* Helper function for Type standard mapping methods. Returns a
293 Python object for field i of the type. "kind" specifies what to
294 return: the name of the field, a gdb.Field object corresponding to
295 the field, or a tuple consisting of field name and gdb.Field
299 make_fielditem (struct type
*type
, int i
, enum gdbpy_iter_kind kind
)
301 PyObject
*item
= NULL
, *key
= NULL
, *value
= NULL
;
306 key
= field_name (type
, i
);
309 value
= convert_field (type
, i
);
312 item
= PyTuple_New (2);
315 PyTuple_SET_ITEM (item
, 0, key
);
316 PyTuple_SET_ITEM (item
, 1, value
);
319 item
= field_name (type
, i
);
322 item
= convert_field (type
, i
);
325 gdb_assert_not_reached ("invalid gdbpy_iter_kind");
336 /* Return a sequence of all field names, fields, or (name, field) pairs.
337 Each field is a gdb.Field object. */
340 typy_fields_items (PyObject
*self
, enum gdbpy_iter_kind kind
)
342 PyObject
*py_type
= self
;
343 PyObject
*result
= NULL
, *iter
= NULL
;
344 struct type
*type
= ((type_object
*) py_type
)->type
;
345 struct type
*checked_type
= type
;
349 checked_type
= check_typedef (checked_type
);
351 CATCH (except
, RETURN_MASK_ALL
)
353 GDB_PY_HANDLE_EXCEPTION (except
);
357 if (checked_type
!= type
)
358 py_type
= type_to_type_object (checked_type
);
359 iter
= typy_make_iter (py_type
, kind
);
360 if (checked_type
!= type
)
362 /* Need to wrap this in braces because Py_DECREF isn't wrapped
363 in a do{}while(0). */
368 result
= PySequence_List (iter
);
375 /* Return a sequence of all fields. Each field is a gdb.Field object. */
378 typy_values (PyObject
*self
, PyObject
*args
)
380 return typy_fields_items (self
, iter_values
);
383 /* Return a sequence of all fields. Each field is a gdb.Field object.
384 This method is similar to typy_values, except where the supplied
385 gdb.Type is an array, in which case it returns a list of one entry
386 which is a gdb.Field object for a range (the array bounds). */
389 typy_fields (PyObject
*self
, PyObject
*args
)
391 struct type
*type
= ((type_object
*) self
)->type
;
394 if (TYPE_CODE (type
) != TYPE_CODE_ARRAY
)
395 return typy_fields_items (self
, iter_values
);
397 /* Array type. Handle this as a special case because the common
398 machinery wants struct or union or enum types. Build a list of
399 one entry which is the range for the array. */
400 r
= convert_field (type
, 0);
404 rl
= Py_BuildValue ("[O]", r
);
410 /* Return a sequence of all field names. Each field is a gdb.Field object. */
413 typy_field_names (PyObject
*self
, PyObject
*args
)
415 return typy_fields_items (self
, iter_keys
);
418 /* Return a sequence of all (name, fields) pairs. Each field is a
422 typy_items (PyObject
*self
, PyObject
*args
)
424 return typy_fields_items (self
, iter_items
);
427 /* Return the type's name, or None. */
430 typy_get_name (PyObject
*self
, void *closure
)
432 struct type
*type
= ((type_object
*) self
)->type
;
434 if (TYPE_NAME (type
) == NULL
)
436 return PyString_FromString (TYPE_NAME (type
));
439 /* Return the type's tag, or None. */
441 typy_get_tag (PyObject
*self
, void *closure
)
443 struct type
*type
= ((type_object
*) self
)->type
;
445 if (!TYPE_TAG_NAME (type
))
447 return PyString_FromString (TYPE_TAG_NAME (type
));
450 /* Return the type, stripped of typedefs. */
452 typy_strip_typedefs (PyObject
*self
, PyObject
*args
)
454 struct type
*type
= ((type_object
*) self
)->type
;
458 type
= check_typedef (type
);
460 CATCH (except
, RETURN_MASK_ALL
)
462 GDB_PY_HANDLE_EXCEPTION (except
);
466 return type_to_type_object (type
);
469 /* Strip typedefs and pointers/reference from a type. Then check that
470 it is a struct, union, or enum type. If not, raise TypeError. */
473 typy_get_composite (struct type
*type
)
480 type
= check_typedef (type
);
482 CATCH (except
, RETURN_MASK_ALL
)
484 GDB_PY_HANDLE_EXCEPTION (except
);
488 if (TYPE_CODE (type
) != TYPE_CODE_PTR
489 && TYPE_CODE (type
) != TYPE_CODE_REF
)
491 type
= TYPE_TARGET_TYPE (type
);
494 /* If this is not a struct, union, or enum type, raise TypeError
496 if (TYPE_CODE (type
) != TYPE_CODE_STRUCT
497 && TYPE_CODE (type
) != TYPE_CODE_UNION
498 && TYPE_CODE (type
) != TYPE_CODE_ENUM
)
500 PyErr_SetString (PyExc_TypeError
,
501 "Type is not a structure, union, or enum type.");
508 /* Helper for typy_array and typy_vector. */
511 typy_array_1 (PyObject
*self
, PyObject
*args
, int is_vector
)
514 PyObject
*n2_obj
= NULL
;
515 struct type
*array
= NULL
;
516 struct type
*type
= ((type_object
*) self
)->type
;
518 if (! PyArg_ParseTuple (args
, "l|O", &n1
, &n2_obj
))
523 if (!PyInt_Check (n2_obj
))
525 PyErr_SetString (PyExc_RuntimeError
,
526 _("Array bound must be an integer"));
530 if (! gdb_py_int_as_long (n2_obj
, &n2
))
539 if (n2
< n1
- 1) /* Note: An empty array has n2 == n1 - 1. */
541 PyErr_SetString (PyExc_ValueError
,
542 _("Array length must not be negative"));
548 array
= lookup_array_range_type (type
, n1
, n2
);
550 make_vector_type (array
);
552 CATCH (except
, RETURN_MASK_ALL
)
554 GDB_PY_HANDLE_EXCEPTION (except
);
558 return type_to_type_object (array
);
561 /* Return an array type. */
564 typy_array (PyObject
*self
, PyObject
*args
)
566 return typy_array_1 (self
, args
, 0);
569 /* Return a vector type. */
572 typy_vector (PyObject
*self
, PyObject
*args
)
574 return typy_array_1 (self
, args
, 1);
577 /* Return a Type object which represents a pointer to SELF. */
579 typy_pointer (PyObject
*self
, PyObject
*args
)
581 struct type
*type
= ((type_object
*) self
)->type
;
585 type
= lookup_pointer_type (type
);
587 CATCH (except
, RETURN_MASK_ALL
)
589 GDB_PY_HANDLE_EXCEPTION (except
);
593 return type_to_type_object (type
);
596 /* Return the range of a type represented by SELF. The return type is
597 a tuple. The first element of the tuple contains the low bound,
598 while the second element of the tuple contains the high bound. */
600 typy_range (PyObject
*self
, PyObject
*args
)
602 struct type
*type
= ((type_object
*) self
)->type
;
604 PyObject
*low_bound
= NULL
, *high_bound
= NULL
;
605 /* Initialize these to appease GCC warnings. */
606 LONGEST low
= 0, high
= 0;
608 if (TYPE_CODE (type
) != TYPE_CODE_ARRAY
609 && TYPE_CODE (type
) != TYPE_CODE_STRING
610 && TYPE_CODE (type
) != TYPE_CODE_RANGE
)
612 PyErr_SetString (PyExc_RuntimeError
,
613 _("This type does not have a range."));
617 switch (TYPE_CODE (type
))
619 case TYPE_CODE_ARRAY
:
620 case TYPE_CODE_STRING
:
621 low
= TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type
));
622 high
= TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (type
));
624 case TYPE_CODE_RANGE
:
625 low
= TYPE_LOW_BOUND (type
);
626 high
= TYPE_HIGH_BOUND (type
);
630 low_bound
= PyLong_FromLong (low
);
634 high_bound
= PyLong_FromLong (high
);
638 result
= PyTuple_New (2);
642 if (PyTuple_SetItem (result
, 0, low_bound
) != 0)
647 if (PyTuple_SetItem (result
, 1, high_bound
) != 0)
649 Py_DECREF (high_bound
);
656 Py_XDECREF (high_bound
);
657 Py_XDECREF (low_bound
);
661 /* Return a Type object which represents a reference to SELF. */
663 typy_reference (PyObject
*self
, PyObject
*args
)
665 struct type
*type
= ((type_object
*) self
)->type
;
669 type
= lookup_reference_type (type
);
671 CATCH (except
, RETURN_MASK_ALL
)
673 GDB_PY_HANDLE_EXCEPTION (except
);
677 return type_to_type_object (type
);
680 /* Return a Type object which represents the target type of SELF. */
682 typy_target (PyObject
*self
, PyObject
*args
)
684 struct type
*type
= ((type_object
*) self
)->type
;
686 if (!TYPE_TARGET_TYPE (type
))
688 PyErr_SetString (PyExc_RuntimeError
,
689 _("Type does not have a target."));
693 return type_to_type_object (TYPE_TARGET_TYPE (type
));
696 /* Return a const-qualified type variant. */
698 typy_const (PyObject
*self
, PyObject
*args
)
700 struct type
*type
= ((type_object
*) self
)->type
;
704 type
= make_cv_type (1, 0, type
, NULL
);
706 CATCH (except
, RETURN_MASK_ALL
)
708 GDB_PY_HANDLE_EXCEPTION (except
);
712 return type_to_type_object (type
);
715 /* Return a volatile-qualified type variant. */
717 typy_volatile (PyObject
*self
, PyObject
*args
)
719 struct type
*type
= ((type_object
*) self
)->type
;
723 type
= make_cv_type (0, 1, type
, NULL
);
725 CATCH (except
, RETURN_MASK_ALL
)
727 GDB_PY_HANDLE_EXCEPTION (except
);
731 return type_to_type_object (type
);
734 /* Return an unqualified type variant. */
736 typy_unqualified (PyObject
*self
, PyObject
*args
)
738 struct type
*type
= ((type_object
*) self
)->type
;
742 type
= make_cv_type (0, 0, type
, NULL
);
744 CATCH (except
, RETURN_MASK_ALL
)
746 GDB_PY_HANDLE_EXCEPTION (except
);
750 return type_to_type_object (type
);
753 /* Return the size of the type represented by SELF, in bytes. */
755 typy_get_sizeof (PyObject
*self
, void *closure
)
757 struct type
*type
= ((type_object
*) self
)->type
;
761 check_typedef (type
);
763 CATCH (except
, RETURN_MASK_ALL
)
768 /* Ignore exceptions. */
770 return gdb_py_long_from_longest (TYPE_LENGTH (type
));
774 typy_lookup_typename (const char *type_name
, const struct block
*block
)
776 struct type
*type
= NULL
;
780 if (startswith (type_name
, "struct "))
781 type
= lookup_struct (type_name
+ 7, NULL
);
782 else if (startswith (type_name
, "union "))
783 type
= lookup_union (type_name
+ 6, NULL
);
784 else if (startswith (type_name
, "enum "))
785 type
= lookup_enum (type_name
+ 5, NULL
);
787 type
= lookup_typename (python_language
, python_gdbarch
,
788 type_name
, block
, 0);
790 CATCH (except
, RETURN_MASK_ALL
)
792 GDB_PY_HANDLE_EXCEPTION (except
);
800 typy_lookup_type (struct demangle_component
*demangled
,
801 const struct block
*block
)
803 struct type
*type
, *rtype
= NULL
;
804 char *type_name
= NULL
;
805 enum demangle_component_type demangled_type
;
807 /* Save the type: typy_lookup_type() may (indirectly) overwrite
808 memory pointed by demangled. */
809 demangled_type
= demangled
->type
;
811 if (demangled_type
== DEMANGLE_COMPONENT_POINTER
812 || demangled_type
== DEMANGLE_COMPONENT_REFERENCE
813 || demangled_type
== DEMANGLE_COMPONENT_CONST
814 || demangled_type
== DEMANGLE_COMPONENT_VOLATILE
)
816 type
= typy_lookup_type (demangled
->u
.s_binary
.left
, block
);
822 /* If the demangled_type matches with one of the types
823 below, run the corresponding function and save the type
824 to return later. We cannot just return here as we are in
825 an exception handler. */
826 switch (demangled_type
)
828 case DEMANGLE_COMPONENT_REFERENCE
:
829 rtype
= lookup_reference_type (type
);
831 case DEMANGLE_COMPONENT_POINTER
:
832 rtype
= lookup_pointer_type (type
);
834 case DEMANGLE_COMPONENT_CONST
:
835 rtype
= make_cv_type (1, 0, type
, NULL
);
837 case DEMANGLE_COMPONENT_VOLATILE
:
838 rtype
= make_cv_type (0, 1, type
, NULL
);
842 CATCH (except
, RETURN_MASK_ALL
)
844 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 type_name
= cp_comp_to_string (demangled
, 10);
856 type
= typy_lookup_typename (type_name
, block
);
862 /* This is a helper function for typy_template_argument that is used
863 when the type does not have template symbols attached. It works by
864 parsing the type name. This happens with compilers, like older
865 versions of GCC, that do not emit DW_TAG_template_*. */
868 typy_legacy_template_argument (struct type
*type
, const struct block
*block
,
872 struct demangle_component
*demangled
;
873 struct demangle_parse_info
*info
= NULL
;
875 struct type
*argtype
;
876 struct cleanup
*cleanup
;
878 if (TYPE_NAME (type
) == NULL
)
880 PyErr_SetString (PyExc_RuntimeError
, _("Null type name."));
886 /* Note -- this is not thread-safe. */
887 info
= cp_demangled_name_to_comp (TYPE_NAME (type
), &err
);
889 CATCH (except
, RETURN_MASK_ALL
)
891 GDB_PY_HANDLE_EXCEPTION (except
);
897 PyErr_SetString (PyExc_RuntimeError
, err
);
900 demangled
= info
->tree
;
901 cleanup
= make_cleanup_cp_demangled_name_parse_free (info
);
903 /* Strip off component names. */
904 while (demangled
->type
== DEMANGLE_COMPONENT_QUAL_NAME
905 || demangled
->type
== DEMANGLE_COMPONENT_LOCAL_NAME
)
906 demangled
= demangled
->u
.s_binary
.right
;
908 if (demangled
->type
!= DEMANGLE_COMPONENT_TEMPLATE
)
910 do_cleanups (cleanup
);
911 PyErr_SetString (PyExc_RuntimeError
, _("Type is not a template."));
915 /* Skip from the template to the arguments. */
916 demangled
= demangled
->u
.s_binary
.right
;
918 for (i
= 0; demangled
&& i
< argno
; ++i
)
919 demangled
= demangled
->u
.s_binary
.right
;
923 do_cleanups (cleanup
);
924 PyErr_Format (PyExc_RuntimeError
, _("No argument %d in template."),
929 argtype
= typy_lookup_type (demangled
->u
.s_binary
.left
, block
);
930 do_cleanups (cleanup
);
934 return type_to_type_object (argtype
);
938 typy_template_argument (PyObject
*self
, PyObject
*args
)
941 struct type
*type
= ((type_object
*) self
)->type
;
942 const struct block
*block
= NULL
;
943 PyObject
*block_obj
= NULL
;
945 struct value
*val
= NULL
;
947 if (! PyArg_ParseTuple (args
, "i|O", &argno
, &block_obj
))
952 block
= block_object_to_block (block_obj
);
955 PyErr_SetString (PyExc_RuntimeError
,
956 _("Second argument must be block."));
963 type
= check_typedef (type
);
964 if (TYPE_CODE (type
) == TYPE_CODE_REF
)
965 type
= check_typedef (TYPE_TARGET_TYPE (type
));
967 CATCH (except
, RETURN_MASK_ALL
)
969 GDB_PY_HANDLE_EXCEPTION (except
);
973 /* We might not have DW_TAG_template_*, so try to parse the type's
974 name. This is inefficient if we do not have a template type --
975 but that is going to wind up as an error anyhow. */
976 if (! TYPE_N_TEMPLATE_ARGUMENTS (type
))
977 return typy_legacy_template_argument (type
, block
, argno
);
979 if (argno
>= TYPE_N_TEMPLATE_ARGUMENTS (type
))
981 PyErr_Format (PyExc_RuntimeError
, _("No argument %d in template."),
986 sym
= TYPE_TEMPLATE_ARGUMENT (type
, argno
);
987 if (SYMBOL_CLASS (sym
) == LOC_TYPEDEF
)
988 return type_to_type_object (SYMBOL_TYPE (sym
));
989 else if (SYMBOL_CLASS (sym
) == LOC_OPTIMIZED_OUT
)
991 PyErr_Format (PyExc_RuntimeError
,
992 _("Template argument is optimized out"));
998 val
= value_of_variable (sym
, block
);
1000 CATCH (except
, RETURN_MASK_ALL
)
1002 GDB_PY_HANDLE_EXCEPTION (except
);
1006 return value_to_value_object (val
);
1010 typy_str (PyObject
*self
)
1012 char *thetype
= NULL
;
1018 struct cleanup
*old_chain
;
1019 struct ui_file
*stb
;
1021 stb
= mem_fileopen ();
1022 old_chain
= make_cleanup_ui_file_delete (stb
);
1024 LA_PRINT_TYPE (type_object_to_type (self
), "", stb
, -1, 0,
1025 &type_print_raw_options
);
1027 thetype
= ui_file_xstrdup (stb
, &length
);
1028 do_cleanups (old_chain
);
1030 CATCH (except
, RETURN_MASK_ALL
)
1033 GDB_PY_HANDLE_EXCEPTION (except
);
1037 result
= PyUnicode_Decode (thetype
, length
, host_charset (), NULL
);
1043 /* Implement the richcompare method. */
1046 typy_richcompare (PyObject
*self
, PyObject
*other
, int op
)
1049 struct type
*type1
= type_object_to_type (self
);
1050 struct type
*type2
= type_object_to_type (other
);
1052 /* We can only compare ourselves to another Type object, and only
1053 for equality or inequality. */
1054 if (type2
== NULL
|| (op
!= Py_EQ
&& op
!= Py_NE
))
1056 Py_INCREF (Py_NotImplemented
);
1057 return Py_NotImplemented
;
1066 result
= types_deeply_equal (type1
, type2
);
1068 CATCH (except
, RETURN_MASK_ALL
)
1070 /* If there is a GDB exception, a comparison is not capable
1071 (or trusted), so exit. */
1072 GDB_PY_HANDLE_EXCEPTION (except
);
1077 if (op
== (result
? Py_EQ
: Py_NE
))
1084 static const struct objfile_data
*typy_objfile_data_key
;
1087 save_objfile_types (struct objfile
*objfile
, void *datum
)
1089 type_object
*obj
= (type_object
*) datum
;
1090 htab_t copied_types
;
1091 struct cleanup
*cleanup
;
1093 if (!gdb_python_initialized
)
1096 /* This prevents another thread from freeing the objects we're
1098 cleanup
= ensure_python_env (get_objfile_arch (objfile
), current_language
);
1100 copied_types
= create_copied_types_hash (objfile
);
1104 type_object
*next
= obj
->next
;
1106 htab_empty (copied_types
);
1108 obj
->type
= copy_type_recursive (objfile
, obj
->type
, copied_types
);
1116 htab_delete (copied_types
);
1118 do_cleanups (cleanup
);
1122 set_type (type_object
*obj
, struct type
*type
)
1126 if (type
&& TYPE_OBJFILE (type
))
1128 struct objfile
*objfile
= TYPE_OBJFILE (type
);
1130 obj
->next
= ((struct pyty_type_object
*)
1131 objfile_data (objfile
, typy_objfile_data_key
));
1133 obj
->next
->prev
= obj
;
1134 set_objfile_data (objfile
, typy_objfile_data_key
, obj
);
1141 typy_dealloc (PyObject
*obj
)
1143 type_object
*type
= (type_object
*) obj
;
1146 type
->prev
->next
= type
->next
;
1147 else if (type
->type
&& TYPE_OBJFILE (type
->type
))
1149 /* Must reset head of list. */
1150 struct objfile
*objfile
= TYPE_OBJFILE (type
->type
);
1153 set_objfile_data (objfile
, typy_objfile_data_key
, type
->next
);
1156 type
->next
->prev
= type
->prev
;
1158 Py_TYPE (type
)->tp_free (type
);
1161 /* Return number of fields ("length" of the field dictionary). */
1164 typy_length (PyObject
*self
)
1166 struct type
*type
= ((type_object
*) self
)->type
;
1168 type
= typy_get_composite (type
);
1172 return TYPE_NFIELDS (type
);
1175 /* Implements boolean evaluation of gdb.Type. Handle this like other
1176 Python objects that don't have a meaningful truth value -- all
1180 typy_nonzero (PyObject
*self
)
1185 /* Return optimized out value of this type. */
1188 typy_optimized_out (PyObject
*self
, PyObject
*args
)
1190 struct type
*type
= ((type_object
*) self
)->type
;
1192 return value_to_value_object (allocate_optimized_out_value (type
));
1195 /* Return a gdb.Field object for the field named by the argument. */
1198 typy_getitem (PyObject
*self
, PyObject
*key
)
1200 struct type
*type
= ((type_object
*) self
)->type
;
1204 field
= python_string_to_host_string (key
);
1208 /* We want just fields of this type, not of base types, so instead of
1209 using lookup_struct_elt_type, portions of that function are
1212 type
= typy_get_composite (type
);
1216 for (i
= 0; i
< TYPE_NFIELDS (type
); i
++)
1218 const char *t_field_name
= TYPE_FIELD_NAME (type
, i
);
1220 if (t_field_name
&& (strcmp_iw (t_field_name
, field
) == 0))
1222 return convert_field (type
, i
);
1225 PyErr_SetObject (PyExc_KeyError
, key
);
1229 /* Implement the "get" method on the type object. This is the
1230 same as getitem if the key is present, but returns the supplied
1231 default value or None if the key is not found. */
1234 typy_get (PyObject
*self
, PyObject
*args
)
1236 PyObject
*key
, *defval
= Py_None
, *result
;
1238 if (!PyArg_UnpackTuple (args
, "get", 1, 2, &key
, &defval
))
1241 result
= typy_getitem (self
, key
);
1245 /* typy_getitem returned error status. If the exception is
1246 KeyError, clear the exception status and return the defval
1247 instead. Otherwise return the exception unchanged. */
1248 if (!PyErr_ExceptionMatches (PyExc_KeyError
))
1256 /* Implement the "has_key" method on the type object. */
1259 typy_has_key (PyObject
*self
, PyObject
*args
)
1261 struct type
*type
= ((type_object
*) self
)->type
;
1265 if (!PyArg_ParseTuple (args
, "s", &field
))
1268 /* We want just fields of this type, not of base types, so instead of
1269 using lookup_struct_elt_type, portions of that function are
1272 type
= typy_get_composite (type
);
1276 for (i
= 0; i
< TYPE_NFIELDS (type
); i
++)
1278 const char *t_field_name
= TYPE_FIELD_NAME (type
, i
);
1280 if (t_field_name
&& (strcmp_iw (t_field_name
, field
) == 0))
1286 /* Make an iterator object to iterate over keys, values, or items. */
1289 typy_make_iter (PyObject
*self
, enum gdbpy_iter_kind kind
)
1291 typy_iterator_object
*typy_iter_obj
;
1293 /* Check that "self" is a structure or union type. */
1294 if (typy_get_composite (((type_object
*) self
)->type
) == NULL
)
1297 typy_iter_obj
= PyObject_New (typy_iterator_object
,
1298 &type_iterator_object_type
);
1299 if (typy_iter_obj
== NULL
)
1302 typy_iter_obj
->field
= 0;
1303 typy_iter_obj
->kind
= kind
;
1305 typy_iter_obj
->source
= (type_object
*) self
;
1307 return (PyObject
*) typy_iter_obj
;
1310 /* iteritems() method. */
1313 typy_iteritems (PyObject
*self
, PyObject
*args
)
1315 return typy_make_iter (self
, iter_items
);
1318 /* iterkeys() method. */
1321 typy_iterkeys (PyObject
*self
, PyObject
*args
)
1323 return typy_make_iter (self
, iter_keys
);
1326 /* Iterating over the class, same as iterkeys except for the function
1330 typy_iter (PyObject
*self
)
1332 return typy_make_iter (self
, iter_keys
);
1335 /* itervalues() method. */
1338 typy_itervalues (PyObject
*self
, PyObject
*args
)
1340 return typy_make_iter (self
, iter_values
);
1343 /* Return a reference to the type iterator. */
1346 typy_iterator_iter (PyObject
*self
)
1352 /* Return the next field in the iteration through the list of fields
1356 typy_iterator_iternext (PyObject
*self
)
1358 typy_iterator_object
*iter_obj
= (typy_iterator_object
*) self
;
1359 struct type
*type
= iter_obj
->source
->type
;
1362 if (iter_obj
->field
< TYPE_NFIELDS (type
))
1364 result
= make_fielditem (type
, iter_obj
->field
, iter_obj
->kind
);
1374 typy_iterator_dealloc (PyObject
*obj
)
1376 typy_iterator_object
*iter_obj
= (typy_iterator_object
*) obj
;
1378 Py_DECREF (iter_obj
->source
);
1381 /* Create a new Type referring to TYPE. */
1383 type_to_type_object (struct type
*type
)
1385 type_object
*type_obj
;
1387 type_obj
= PyObject_New (type_object
, &type_object_type
);
1389 set_type (type_obj
, type
);
1391 return (PyObject
*) type_obj
;
1395 type_object_to_type (PyObject
*obj
)
1397 if (! PyObject_TypeCheck (obj
, &type_object_type
))
1399 return ((type_object
*) obj
)->type
;
1404 /* Implementation of gdb.lookup_type. */
1406 gdbpy_lookup_type (PyObject
*self
, PyObject
*args
, PyObject
*kw
)
1408 static 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
;
1414 if (! PyArg_ParseTupleAndKeywords (args
, kw
, "s|O", keywords
,
1415 &type_name
, &block_obj
))
1420 block
= block_object_to_block (block_obj
);
1423 PyErr_SetString (PyExc_RuntimeError
,
1424 _("'block' argument must be a Block."));
1429 type
= typy_lookup_typename (type_name
, block
);
1433 return (PyObject
*) type_to_type_object (type
);
1437 gdbpy_initialize_types (void)
1441 typy_objfile_data_key
1442 = register_objfile_data_with_cleanup (save_objfile_types
, NULL
);
1444 if (PyType_Ready (&type_object_type
) < 0)
1446 if (PyType_Ready (&field_object_type
) < 0)
1448 if (PyType_Ready (&type_iterator_object_type
) < 0)
1451 for (i
= 0; pyty_codes
[i
].name
; ++i
)
1453 if (PyModule_AddIntConstant (gdb_module
,
1454 /* Cast needed for Python 2.4. */
1455 (char *) pyty_codes
[i
].name
,
1456 pyty_codes
[i
].code
) < 0)
1460 if (gdb_pymodule_addobject (gdb_module
, "Type",
1461 (PyObject
*) &type_object_type
) < 0)
1464 if (gdb_pymodule_addobject (gdb_module
, "TypeIterator",
1465 (PyObject
*) &type_iterator_object_type
) < 0)
1468 return gdb_pymodule_addobject (gdb_module
, "Field",
1469 (PyObject
*) &field_object_type
);
1474 static PyGetSetDef type_object_getset
[] =
1476 { "code", typy_get_code
, NULL
,
1477 "The code for this type.", NULL
},
1478 { "name", typy_get_name
, NULL
,
1479 "The name for this type, or None.", NULL
},
1480 { "sizeof", typy_get_sizeof
, NULL
,
1481 "The size of this type, in bytes.", NULL
},
1482 { "tag", typy_get_tag
, NULL
,
1483 "The tag name for this type, or None.", NULL
},
1487 static PyMethodDef type_object_methods
[] =
1489 { "array", typy_array
, METH_VARARGS
,
1490 "array ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1491 Return a type which represents an array of objects of this type.\n\
1492 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1493 If LOW_BOUND is omitted, a value of zero is used." },
1494 { "vector", typy_vector
, METH_VARARGS
,
1495 "vector ([LOW_BOUND,] HIGH_BOUND) -> Type\n\
1496 Return a type which represents a vector of objects of this type.\n\
1497 The bounds of the array are [LOW_BOUND, HIGH_BOUND] inclusive.\n\
1498 If LOW_BOUND is omitted, a value of zero is used.\n\
1499 Vectors differ from arrays in that if the current language has C-style\n\
1500 arrays, vectors don't decay to a pointer to the first element.\n\
1501 They are first class values." },
1502 { "__contains__", typy_has_key
, METH_VARARGS
,
1503 "T.__contains__(k) -> True if T has a field named k, else False" },
1504 { "const", typy_const
, METH_NOARGS
,
1505 "const () -> Type\n\
1506 Return a const variant of this type." },
1507 { "optimized_out", typy_optimized_out
, METH_NOARGS
,
1508 "optimized_out() -> Value\n\
1509 Return optimized out value of this type." },
1510 { "fields", typy_fields
, METH_NOARGS
,
1511 "fields () -> list\n\
1512 Return a list holding all the fields of this type.\n\
1513 Each field is a gdb.Field object." },
1514 { "get", typy_get
, METH_VARARGS
,
1515 "T.get(k[,default]) -> returns field named k in T, if it exists;\n\
1516 otherwise returns default, if supplied, or None if not." },
1517 { "has_key", typy_has_key
, METH_VARARGS
,
1518 "T.has_key(k) -> True if T has a field named k, else False" },
1519 { "items", typy_items
, METH_NOARGS
,
1520 "items () -> list\n\
1521 Return a list of (name, field) pairs of this type.\n\
1522 Each field is a gdb.Field object." },
1523 { "iteritems", typy_iteritems
, METH_NOARGS
,
1524 "iteritems () -> an iterator over the (name, field)\n\
1525 pairs of this type. Each field is a gdb.Field object." },
1526 { "iterkeys", typy_iterkeys
, METH_NOARGS
,
1527 "iterkeys () -> an iterator over the field names of this type." },
1528 { "itervalues", typy_itervalues
, METH_NOARGS
,
1529 "itervalues () -> an iterator over the fields of this type.\n\
1530 Each field is a gdb.Field object." },
1531 { "keys", typy_field_names
, METH_NOARGS
,
1533 Return a list holding all the fields names of this type." },
1534 { "pointer", typy_pointer
, METH_NOARGS
,
1535 "pointer () -> Type\n\
1536 Return a type of pointer to this type." },
1537 { "range", typy_range
, METH_NOARGS
,
1538 "range () -> tuple\n\
1539 Return a tuple containing the lower and upper range for this type."},
1540 { "reference", typy_reference
, METH_NOARGS
,
1541 "reference () -> Type\n\
1542 Return a type of reference to this type." },
1543 { "strip_typedefs", typy_strip_typedefs
, METH_NOARGS
,
1544 "strip_typedefs () -> Type\n\
1545 Return a type formed by stripping this type of all typedefs."},
1546 { "target", typy_target
, METH_NOARGS
,
1547 "target () -> Type\n\
1548 Return the target type of this type." },
1549 { "template_argument", typy_template_argument
, METH_VARARGS
,
1550 "template_argument (arg, [block]) -> Type\n\
1551 Return the type of a template argument." },
1552 { "unqualified", typy_unqualified
, METH_NOARGS
,
1553 "unqualified () -> Type\n\
1554 Return a variant of this type without const or volatile attributes." },
1555 { "values", typy_values
, METH_NOARGS
,
1556 "values () -> list\n\
1557 Return a list holding all the fields of this type.\n\
1558 Each field is a gdb.Field object." },
1559 { "volatile", typy_volatile
, METH_NOARGS
,
1560 "volatile () -> Type\n\
1561 Return a volatile variant of this type" },
1565 static PyNumberMethods type_object_as_number
= {
1567 NULL
, /* nb_subtract */
1568 NULL
, /* nb_multiply */
1570 NULL
, /* nb_divide */
1572 NULL
, /* nb_remainder */
1573 NULL
, /* nb_divmod */
1574 NULL
, /* nb_power */
1575 NULL
, /* nb_negative */
1576 NULL
, /* nb_positive */
1577 NULL
, /* nb_absolute */
1578 typy_nonzero
, /* nb_nonzero */
1579 NULL
, /* nb_invert */
1580 NULL
, /* nb_lshift */
1581 NULL
, /* nb_rshift */
1587 NULL
, /* reserved */
1589 NULL
, /* nb_coerce */
1593 NULL
, /* nb_float */
1600 static PyMappingMethods typy_mapping
= {
1603 NULL
/* no "set" method */
1606 PyTypeObject type_object_type
=
1608 PyVarObject_HEAD_INIT (NULL
, 0)
1609 "gdb.Type", /*tp_name*/
1610 sizeof (type_object
), /*tp_basicsize*/
1612 typy_dealloc
, /*tp_dealloc*/
1618 &type_object_as_number
, /*tp_as_number*/
1619 0, /*tp_as_sequence*/
1620 &typy_mapping
, /*tp_as_mapping*/
1623 typy_str
, /*tp_str*/
1627 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_HAVE_ITER
, /*tp_flags*/
1628 "GDB type object", /* tp_doc */
1629 0, /* tp_traverse */
1631 typy_richcompare
, /* tp_richcompare */
1632 0, /* tp_weaklistoffset */
1633 typy_iter
, /* tp_iter */
1634 0, /* tp_iternext */
1635 type_object_methods
, /* tp_methods */
1637 type_object_getset
, /* tp_getset */
1640 0, /* tp_descr_get */
1641 0, /* tp_descr_set */
1642 0, /* tp_dictoffset */
1648 static PyGetSetDef field_object_getset
[] =
1650 { "__dict__", gdb_py_generic_dict
, NULL
,
1651 "The __dict__ for this field.", &field_object_type
},
1655 PyTypeObject field_object_type
=
1657 PyVarObject_HEAD_INIT (NULL
, 0)
1658 "gdb.Field", /*tp_name*/
1659 sizeof (field_object
), /*tp_basicsize*/
1661 field_dealloc
, /*tp_dealloc*/
1668 0, /*tp_as_sequence*/
1669 0, /*tp_as_mapping*/
1676 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_HAVE_ITER
, /*tp_flags*/
1677 "GDB field object", /* tp_doc */
1678 0, /* tp_traverse */
1680 0, /* tp_richcompare */
1681 0, /* tp_weaklistoffset */
1683 0, /* tp_iternext */
1686 field_object_getset
, /* tp_getset */
1689 0, /* tp_descr_get */
1690 0, /* tp_descr_set */
1691 offsetof (field_object
, dict
), /* tp_dictoffset */
1697 PyTypeObject type_iterator_object_type
= {
1698 PyVarObject_HEAD_INIT (NULL
, 0)
1699 "gdb.TypeIterator", /*tp_name*/
1700 sizeof (typy_iterator_object
), /*tp_basicsize*/
1702 typy_iterator_dealloc
, /*tp_dealloc*/
1709 0, /*tp_as_sequence*/
1710 0, /*tp_as_mapping*/
1717 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_HAVE_ITER
, /*tp_flags*/
1718 "GDB type iterator object", /*tp_doc */
1721 0, /*tp_richcompare */
1722 0, /*tp_weaklistoffset */
1723 typy_iterator_iter
, /*tp_iter */
1724 typy_iterator_iternext
, /*tp_iternext */