Don't steal references in the gdb Python code
authorTom Tromey <tom@tromey.com>
Sun, 16 Sep 2018 13:32:23 +0000 (07:32 -0600)
committerTom Tromey <tom@tromey.com>
Mon, 17 Sep 2018 05:48:21 +0000 (23:48 -0600)
commit1a3389079dd5c93419846f44d42027a526ce19cf
tree150566fed14018557081881633e3700d2f37378f
parent4a137fec2e1a8a6372da8fca1040ee582c62f78d
Don't steal references in the gdb Python code

Some Python APIs steal references from their caller, and the refcount
checker supports this via an attribute.

However, in gdb with C++ we have a better idiom available: we can use
std::move on a gdbpy_ref<> instead.  This makes the semantics obvious
at the point of call, and is safer at runtime as well, because the
callee's gdbpy_ref<> will be emptied.

This patch changes the reference-stealing code in gdb to use rvalue
references instead.

Tested on x86-64 Fedora 28.

gdb/ChangeLog
2018-09-16  Tom Tromey  <tom@tromey.com>

* python/python-internal.h (CPYCHECKER_STEALS_REFERENCE_TO_ARG):
Remove.
* python/py-varobj.c (py_varobj_iter_ctor): Change pyiter to
rvalue reference.  Remove CPYCHECKER_STEALS_REFERENCE_TO_ARG.
(py_varobj_iter_new): Likewise.
(py_varobj_get_iterator): Use gdbpy_ref.
gdb/ChangeLog
gdb/python/py-varobj.c
gdb/python/python-internal.h