Fix accessing a method's fields from Python
Considering this example: struct C { int func() { return 1; } } c; int main() { return c.func(); } Accessing the fields of C::func, when requesting the function by its type, works: (gdb) py print(gdb.parse_and_eval('C::func').type.fields()[0].type) C * const But when trying to do the same via a class instance, it fails: (gdb) py print(gdb.parse_and_eval('c')['func'].type.fields()[0].type) Traceback (most recent call last): File "<string>", line 1, in <module> TypeError: Type is not a structure, union, enum, or function type. Error while executing Python code. The difference is that in the former the function type is TYPE_CODE_FUNC: (gdb) py print(gdb.parse_and_eval('C::func').type.code == gdb.TYPE_CODE_FUNC) True And in the latter the function type is TYPE_CODE_METHOD: (gdb) py print(gdb.parse_and_eval('c')['func'].type.code == gdb.TYPE_CODE_METHOD) True So this adds the functionality for TYPE_CODE_METHOD as well. gdb/ChangeLog: 2020-12-18 Hannes Domani <ssbssa@yahoo.de> * python/py-type.c (typy_get_composite): Add TYPE_CODE_METHOD. gdb/testsuite/ChangeLog: 2020-12-18 Hannes Domani <ssbssa@yahoo.de> * gdb.python/py-type.exp: Add tests for TYPE_CODE_METHOD.
This commit is contained in:
parent
a9e48095a8
commit
b3f9469bfa
4 changed files with 12 additions and 0 deletions
|
@ -471,6 +471,7 @@ typy_get_composite (struct type *type)
|
|||
if (type->code () != TYPE_CODE_STRUCT
|
||||
&& type->code () != TYPE_CODE_UNION
|
||||
&& type->code () != TYPE_CODE_ENUM
|
||||
&& type->code () != TYPE_CODE_METHOD
|
||||
&& type->code () != TYPE_CODE_FUNC)
|
||||
{
|
||||
PyErr_SetString (PyExc_TypeError,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue