aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2024-06-11 14:10:08 -0600
committerTom Tromey <tromey@adacore.com>2024-06-13 10:13:36 -0600
commit7c03e522d4e059a7c59533e4b01771a7cc4bb68e (patch)
treedd852f7f61ce526ff61b5eb98977d73463703a9f
parent54904469f71c06102e15707c2cb4964e496a8ed6 (diff)
downloadgdb-7c03e522d4e059a7c59533e4b01771a7cc4bb68e.zip
gdb-7c03e522d4e059a7c59533e4b01771a7cc4bb68e.tar.gz
gdb-7c03e522d4e059a7c59533e4b01771a7cc4bb68e.tar.bz2
Return gdbpy_ref<> from gdbpy_call_method
This changes gdbpy_call_method to return a gdbpy_ref<>. This is slightly safer because it makes it simpler to correctly handle reference counts. Reviewed-By: Tom de Vries <tdevries@suse.de>
-rw-r--r--gdb/python/py-breakpoint.c2
-rw-r--r--gdb/python/py-disasm.c4
-rw-r--r--gdb/python/py-finishbreakpoint.c2
-rw-r--r--gdb/python/py-framefilter.c16
-rw-r--r--gdb/python/py-tui.c16
-rw-r--r--gdb/python/python-internal.h18
6 files changed, 29 insertions, 29 deletions
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c
index 1b8c717..fdc2483 100644
--- a/gdb/python/py-breakpoint.c
+++ b/gdb/python/py-breakpoint.c
@@ -1174,7 +1174,7 @@ gdbpy_breakpoint_cond_says_stop (const struct extension_language_defn *extlang,
if (PyObject_HasAttrString (py_bp, stop_func))
{
- gdbpy_ref<> result (gdbpy_call_method (py_bp, stop_func));
+ gdbpy_ref<> result = gdbpy_call_method (py_bp, stop_func);
stop = 1;
if (result != NULL)
diff --git a/gdb/python/py-disasm.c b/gdb/python/py-disasm.c
index 5206c76..87fea26 100644
--- a/gdb/python/py-disasm.c
+++ b/gdb/python/py-disasm.c
@@ -855,8 +855,8 @@ gdbpy_disassembler::read_memory_func (bfd_vma memaddr, gdb_byte *buff,
/* Now call the DisassembleInfo.read_memory method. This might have been
overridden by the user. */
- gdbpy_ref<> result_obj (gdbpy_call_method ((PyObject *) obj, "read_memory",
- len, offset));
+ gdbpy_ref<> result_obj = gdbpy_call_method ((PyObject *) obj, "read_memory",
+ len, offset);
/* Handle any exceptions. */
if (result_obj == nullptr)
diff --git a/gdb/python/py-finishbreakpoint.c b/gdb/python/py-finishbreakpoint.c
index 1b620e6..78030be 100644
--- a/gdb/python/py-finishbreakpoint.c
+++ b/gdb/python/py-finishbreakpoint.c
@@ -344,7 +344,7 @@ bpfinishpy_out_of_scope (struct finish_breakpoint_object *bpfinish_obj)
if (bpfinish_obj->py_bp.bp->enable_state == bp_enabled
&& PyObject_HasAttrString (py_obj, outofscope_func))
{
- gdbpy_ref<> meth_result (gdbpy_call_method (py_obj, outofscope_func));
+ gdbpy_ref<> meth_result = gdbpy_call_method (py_obj, outofscope_func);
if (meth_result == NULL)
gdbpy_print_stack ();
}
diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c
index 4ae583b..89695ff 100644
--- a/gdb/python/py-framefilter.c
+++ b/gdb/python/py-framefilter.c
@@ -59,7 +59,7 @@ extract_sym (PyObject *obj, gdb::unique_xmalloc_ptr<char> *name,
struct symbol **sym, const struct block **sym_block,
const struct language_defn **language)
{
- gdbpy_ref<> result (gdbpy_call_method (obj, "symbol"));
+ gdbpy_ref<> result = gdbpy_call_method (obj, "symbol");
if (result == NULL)
return EXT_LANG_BT_ERROR;
@@ -130,7 +130,7 @@ extract_value (PyObject *obj, struct value **value)
{
if (PyObject_HasAttrString (obj, "value"))
{
- gdbpy_ref<> vresult (gdbpy_call_method (obj, "value"));
+ gdbpy_ref<> vresult = gdbpy_call_method (obj, "value");
if (vresult == NULL)
return EXT_LANG_BT_ERROR;
@@ -264,7 +264,7 @@ get_py_iter_from_func (PyObject *filter, const char *func)
{
if (PyObject_HasAttrString (filter, func))
{
- gdbpy_ref<> result (gdbpy_call_method (filter, func));
+ gdbpy_ref<> result = gdbpy_call_method (filter, func);
if (result != NULL)
{
@@ -790,7 +790,7 @@ py_print_frame (PyObject *filter, frame_filter_flags flags,
/* Get the underlying frame. This is needed to determine GDB
architecture, and also, in the cases of frame variables/arguments to
read them if they returned filter object requires us to do so. */
- gdbpy_ref<> py_inf_frame (gdbpy_call_method (filter, "inferior_frame"));
+ gdbpy_ref<> py_inf_frame = gdbpy_call_method (filter, "inferior_frame");
if (py_inf_frame == NULL)
return EXT_LANG_BT_ERROR;
@@ -830,7 +830,7 @@ py_print_frame (PyObject *filter, frame_filter_flags flags,
address printing. */
if (PyObject_HasAttrString (filter, "address"))
{
- gdbpy_ref<> paddr (gdbpy_call_method (filter, "address"));
+ gdbpy_ref<> paddr = gdbpy_call_method (filter, "address");
if (paddr == NULL)
return EXT_LANG_BT_ERROR;
@@ -905,7 +905,7 @@ py_print_frame (PyObject *filter, frame_filter_flags flags,
/* Print frame function name. */
if (PyObject_HasAttrString (filter, "function"))
{
- gdbpy_ref<> py_func (gdbpy_call_method (filter, "function"));
+ gdbpy_ref<> py_func = gdbpy_call_method (filter, "function");
const char *function = NULL;
if (py_func == NULL)
@@ -969,7 +969,7 @@ py_print_frame (PyObject *filter, frame_filter_flags flags,
if (PyObject_HasAttrString (filter, "filename"))
{
- gdbpy_ref<> py_fn (gdbpy_call_method (filter, "filename"));
+ gdbpy_ref<> py_fn = gdbpy_call_method (filter, "filename");
if (py_fn == NULL)
return EXT_LANG_BT_ERROR;
@@ -993,7 +993,7 @@ py_print_frame (PyObject *filter, frame_filter_flags flags,
if (PyObject_HasAttrString (filter, "line"))
{
- gdbpy_ref<> py_line (gdbpy_call_method (filter, "line"));
+ gdbpy_ref<> py_line = gdbpy_call_method (filter, "line");
int line;
if (py_line == NULL)
diff --git a/gdb/python/py-tui.c b/gdb/python/py-tui.c
index 9df86df..901f6fe 100644
--- a/gdb/python/py-tui.c
+++ b/gdb/python/py-tui.c
@@ -164,7 +164,7 @@ tui_py_window::~tui_py_window ()
if (m_window != nullptr
&& PyObject_HasAttrString (m_window.get (), "close"))
{
- gdbpy_ref<> result (gdbpy_call_method (m_window.get (), "close"));
+ gdbpy_ref<> result = gdbpy_call_method (m_window.get (), "close");
if (result == nullptr)
gdbpy_print_stack ();
}
@@ -197,7 +197,7 @@ tui_py_window::rerender ()
if (PyObject_HasAttrString (m_window.get (), "render"))
{
- gdbpy_ref<> result (gdbpy_call_method (m_window.get (), "render"));
+ gdbpy_ref<> result = gdbpy_call_method (m_window.get (), "render");
if (result == nullptr)
gdbpy_print_stack ();
}
@@ -210,8 +210,8 @@ tui_py_window::do_scroll_horizontal (int num_to_scroll)
if (PyObject_HasAttrString (m_window.get (), "hscroll"))
{
- gdbpy_ref<> result (gdbpy_call_method (m_window.get (), "hscroll",
- num_to_scroll));
+ gdbpy_ref<> result = gdbpy_call_method (m_window.get(), "hscroll",
+ num_to_scroll);
if (result == nullptr)
gdbpy_print_stack ();
}
@@ -224,8 +224,8 @@ tui_py_window::do_scroll_vertical (int num_to_scroll)
if (PyObject_HasAttrString (m_window.get (), "vscroll"))
{
- gdbpy_ref<> result (gdbpy_call_method (m_window.get (), "vscroll",
- num_to_scroll));
+ gdbpy_ref<> result = gdbpy_call_method (m_window.get (), "vscroll",
+ num_to_scroll);
if (result == nullptr)
gdbpy_print_stack ();
}
@@ -246,8 +246,8 @@ tui_py_window::click (int mouse_x, int mouse_y, int mouse_button)
if (PyObject_HasAttrString (m_window.get (), "click"))
{
- gdbpy_ref<> result (gdbpy_call_method (m_window.get (), "click",
- mouse_x, mouse_y, mouse_button));
+ gdbpy_ref<> result = gdbpy_call_method (m_window.get (), "click",
+ mouse_x, mouse_y, mouse_button);
if (result == nullptr)
gdbpy_print_stack ();
}
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 1ebb531..caf85f5 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -176,14 +176,14 @@ gdbpy_make_fmt ()
This variant accepts no arguments. */
-static inline PyObject *
+static inline gdbpy_ref<>
gdbpy_call_method (PyObject *o, const char *method)
{
/* PyObject_CallMethod's 'method' and 'format' parameters were missing the
'const' qualifier before Python 3.4. */
- return PyObject_CallMethod (o,
- const_cast<char *> (method),
- nullptr);
+ return gdbpy_ref<> (PyObject_CallMethod (o,
+ const_cast<char *> (method),
+ nullptr));
}
/* Typesafe wrapper around PyObject_CallMethod.
@@ -193,7 +193,7 @@ gdbpy_call_method (PyObject *o, const char *method)
mismatches are impossible. */
template<typename Arg, typename... Args>
-static inline PyObject *
+static inline gdbpy_ref<>
gdbpy_call_method (PyObject *o, const char *method,
Arg arg, Args... args)
{
@@ -201,10 +201,10 @@ gdbpy_call_method (PyObject *o, const char *method,
/* PyObject_CallMethod's 'method' and 'format' parameters were missing the
'const' qualifier before Python 3.4. */
- return PyObject_CallMethod (o,
- const_cast<char *> (method),
- const_cast<char *> (fmt.data ()),
- arg, args...);
+ return gdbpy_ref<> (PyObject_CallMethod (o,
+ const_cast<char *> (method),
+ const_cast<char *> (fmt.data ()),
+ arg, args...));
}
/* Poison PyObject_CallMethod. The typesafe wrapper gdbpy_call_method should be