diff options
| author | Matthieu Longo <matthieu.longo@arm.com> | 2026-02-26 17:20:20 +0000 |
|---|---|---|
| committer | Matthieu Longo <matthieu.longo@arm.com> | 2026-03-10 12:43:12 +0000 |
| commit | f0cfbf6ceda8396291d736858cfd713cc4a0e0da (patch) | |
| tree | 77a7e0db3cde8d52504f42fb69e4463fa863d49d /gdb/python | |
| parent | 995cf2f8feb57aa564eb4ec1191e3290affc574b (diff) | |
| download | binutils-f0cfbf6ceda8396291d736858cfd713cc4a0e0da.tar.gz binutils-f0cfbf6ceda8396291d736858cfd713cc4a0e0da.tar.bz2 binutils-f0cfbf6ceda8396291d736858cfd713cc4a0e0da.zip | |
gdb/python: allow ref_ptr<T, Policy>::new_reference to accept subclasses of T
When ref_ptr<T,Policy>::new_reference() is specialized for 'PyObject'
(i.e. gdbpy_ref<>), it currently requires the argument type to be exactly
'PyObject *'. As a result, pointers to subclasses of 'PyObject' must be
explicitly cast before being passed, making call sites unnecessarily
verbose.
This patch makes ref_ptr<T,Policy>::new_reference() a template method
that accepts both T and subclasses of T, performing the cast to 'T *'
internally when needed. This removes redundant casts at call sites
without changing behavior.
Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/python')
| -rw-r--r-- | gdb/python/py-block.c | 2 | ||||
| -rw-r--r-- | gdb/python/py-inferior.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/gdb/python/py-block.c b/gdb/python/py-block.c index 263819e1292..4d77242ca0d 100644 --- a/gdb/python/py-block.c +++ b/gdb/python/py-block.c @@ -346,7 +346,7 @@ block_to_block_object (const struct block *block, struct objfile *objfile) block_object *result = (block_object *) htab_find_with_hash (table, block, hash); if (result != nullptr) - return gdbpy_ref<>::new_reference ((PyObject *) result); + return gdbpy_ref<>::new_reference (result); result = PyObject_New (block_object, &block_object_type); if (result == nullptr) diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index 76e3da9f620..ed28ccf3c07 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -400,7 +400,7 @@ infpy_threads (PyObject *self, PyObject *args) for (const thread_map_t::value_type &entry : *inf_obj->threads) { - auto thr = gdbpy_ref<>::new_reference ((PyObject *) entry.second.get ()); + gdbpy_ref<> thr = entry.second; if (PyTuple_SetItem (tuple.get (), i++, thr.release ()) < 0) return nullptr; } |
