diff options
author | Andrew Burgess <aburgess@redhat.com> | 2021-11-30 14:35:44 +0000 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2022-03-07 19:42:08 +0000 |
commit | 551b380fbdad4082bc8520b1b61de883e8e4bf49 (patch) | |
tree | 4eb1dabf6d52207193b92660ec85e4edebdad32e /gdb/python | |
parent | ee6a3d9e9496d469986a192aa374a43dffa83f96 (diff) | |
download | gdb-551b380fbdad4082bc8520b1b61de883e8e4bf49.zip gdb-551b380fbdad4082bc8520b1b61de883e8e4bf49.tar.gz gdb-551b380fbdad4082bc8520b1b61de883e8e4bf49.tar.bz2 |
gdb/python: add Type.is_signed property
Add a new read-only property, Type.is_signed, which is True for signed
types, and False otherwise.
This property should only be read on types for which Type.is_scalar is
true, attempting to read this property for non-scalar types will raise
a ValueError.
I chose 'is_signed' rather than 'is_unsigned' in order to match the
existing Architecture.integer_type method, which takes a 'signed'
parameter. As far as I could find, that was the only existing
signed/unsigned selector in the Python API, so it seemed reasonable to
stay consistent.
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/py-type.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index 5476123..7be3f32 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -446,6 +446,27 @@ typy_is_scalar (PyObject *self, void *closure) Py_RETURN_FALSE; } +/* Return true if this type is signed. Raises a ValueError if this type + is not a scalar type. */ + +static PyObject * +typy_is_signed (PyObject *self, void *closure) +{ + struct type *type = ((type_object *) self)->type; + + if (!is_scalar_type (type)) + { + PyErr_SetString (PyExc_ValueError, + _("Type must be a scalar type")); + return nullptr; + } + + if (type->is_unsigned ()) + Py_RETURN_FALSE; + else + Py_RETURN_TRUE; +} + /* Return the type, stripped of typedefs. */ static PyObject * typy_strip_typedefs (PyObject *self, PyObject *args) @@ -1502,6 +1523,8 @@ static gdb_PyGetSetDef type_object_getset[] = "The objfile this type was defined in, or None.", NULL }, { "is_scalar", typy_is_scalar, nullptr, "Is this a scalar type?", nullptr }, + { "is_signed", typy_is_signed, nullptr, + "Is this an signed type?", nullptr }, { NULL } }; |