diff options
author | Tom Tromey <tromey@adacore.com> | 2020-04-24 13:40:31 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2020-04-24 13:40:33 -0600 |
commit | 1acda8039ba681e88416a7da6a6e3abdcae6b86b (patch) | |
tree | 4ca5562817e90e1a657fc47eced4369a0c75b342 /gdb/testsuite/gdb.rust/simple.exp | |
parent | adfb981595c1ea12736b6d3c4686973040f171ff (diff) | |
download | gdb-1acda8039ba681e88416a7da6a6e3abdcae6b86b.zip gdb-1acda8039ba681e88416a7da6a6e3abdcae6b86b.tar.gz gdb-1acda8039ba681e88416a7da6a6e3abdcae6b86b.tar.bz2 |
Add Python support for dynamic types
This changes the gdb Python API to add support for dynamic types. In
particular, this adds an attribute to gdb.Type, and updates some
attributes to reflect dynamic sizes and field offsets.
There's still no way to get the dynamic type from one of its concrete
instances. This could perhaps be added if needed.
gdb/ChangeLog
2020-04-24 Tom Tromey <tromey@adacore.com>
PR python/23662:
* python/py-type.c (convert_field): Handle
FIELD_LOC_KIND_DWARF_BLOCK.
(typy_get_sizeof): Handle TYPE_HAS_DYNAMIC_LENGTH.
(typy_get_dynamic): Nw function.
(type_object_getset): Add "dynamic".
* NEWS: Add entry.
gdb/doc/ChangeLog
2020-04-24 Tom Tromey <tromey@adacore.com>
PR python/23662:
* python.texi (Types In Python): Document new features.
gdb/testsuite/ChangeLog
2020-04-24 Tom Tromey <tromey@adacore.com>
PR python/23662:
* gdb.ada/variant.exp: Add Python checks.
* gdb.rust/simple.exp: Add dynamic type checks.
Diffstat (limited to 'gdb/testsuite/gdb.rust/simple.exp')
-rw-r--r-- | gdb/testsuite/gdb.rust/simple.exp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp index 92b3666..6daaf84 100644 --- a/gdb/testsuite/gdb.rust/simple.exp +++ b/gdb/testsuite/gdb.rust/simple.exp @@ -364,3 +364,13 @@ if {[skip_python_tests]} { } gdb_test "python print(gdb.lookup_type('simple::HiBob'))" "simple::HiBob" + +gdb_test_no_output "python e = gdb.parse_and_eval('e')" \ + "get value of e for python" +gdb_test "python print(len(e.type.fields()))" "2" +gdb_test "python print(e.type.fields()\[0\].artificial)" "True" +gdb_test "python print(e.type.fields()\[1\].name)" "Two" + +gdb_test "python print(e.type.dynamic)" "False" +gdb_test "python print(gdb.lookup_type('simple::MoreComplicated').dynamic)" \ + "True" |