[binutils-gdb] Return gdbpy_ref<> from symtab_to_symtab_object

Tom Tromey tromey@sourceware.org
Mon Feb 23 12:32:18 GMT 2026


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9d71572cbaf558051255c5f8b8fa577e40387e64

commit 9d71572cbaf558051255c5f8b8fa577e40387e64
Author: Tom Tromey <tromey@adacore.com>
Date:   Fri Feb 20 12:47:51 2026 -0700

    Return gdbpy_ref<> from symtab_to_symtab_object
    
    This changes symtab_to_symtab_object to return a gdbpy_ref<>,
    using the type system to convey that a new reference is always
    returned.
    
    Approved-By: Simon Marchi <simon.marchi@efficios.com>

Diff:
---
 gdb/python/py-symbol.c       | 2 +-
 gdb/python/py-symtab.c       | 8 ++++----
 gdb/python/python-internal.h | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/gdb/python/py-symbol.c b/gdb/python/py-symbol.c
index d51f4823315..492c386b7ee 100644
--- a/gdb/python/py-symbol.c
+++ b/gdb/python/py-symbol.c
@@ -86,7 +86,7 @@ sympy_get_symtab (PyObject *self, void *closure)
   if (!symbol->is_objfile_owned ())
     Py_RETURN_NONE;
 
-  return symtab_to_symtab_object (symbol->symtab ());
+  return symtab_to_symtab_object (symbol->symtab ()).release ();
 }
 
 static PyObject *
diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c
index 820542932ba..3b05721e616 100644
--- a/gdb/python/py-symtab.c
+++ b/gdb/python/py-symtab.c
@@ -299,7 +299,7 @@ salpy_get_symtab (PyObject *self, void *closure)
   if (sal->symtab == nullptr)
     Py_RETURN_NONE;
   else
-    return symtab_to_symtab_object (sal->symtab);
+    return symtab_to_symtab_object (sal->symtab).release ();
 }
 
 /* Implementation of gdb.Symtab_and_line.is_valid (self) -> Boolean.
@@ -366,7 +366,7 @@ set_symtab (symtab_object *obj, struct symtab *symtab)
 
 /* Create a new symbol table (gdb.Symtab) object that encapsulates the
    symtab structure from GDB.  */
-PyObject *
+gdbpy_ref<>
 symtab_to_symtab_object (struct symtab *symtab)
 {
   symtab_object *symtab_obj;
@@ -378,14 +378,14 @@ symtab_to_symtab_object (struct symtab *symtab)
       symtab_obj = stpy_registry.lookup (symtab->compunit ()->objfile (),
 					 symtab);
       if (symtab_obj != nullptr)
-	return (PyObject*)symtab_obj;
+	return gdbpy_ref<> (symtab_obj);
     }
 
   symtab_obj = PyObject_New (symtab_object, &symtab_object_type);
   if (symtab_obj)
     set_symtab (symtab_obj, symtab);
 
-  return (PyObject *) symtab_obj;
+  return gdbpy_ref<> (symtab_obj);
 }
 
 /* Create a new symtab and line (gdb.Symtab_and_line) object
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 979bf2498da..8d101e8afb6 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -496,7 +496,7 @@ PyObject *gdbpy_register_tui_window (PyObject *self, PyObject *args,
 				     PyObject *kw);
 
 gdbpy_ref<> symtab_and_line_to_sal_object (struct symtab_and_line sal);
-PyObject *symtab_to_symtab_object (struct symtab *symtab);
+gdbpy_ref<> symtab_to_symtab_object (struct symtab *symtab);
 gdbpy_ref<> symbol_to_symbol_object (struct symbol *sym);
 PyObject *block_to_block_object (const struct block *block,
 				 struct objfile *objfile);


More information about the Gdb-cvs mailing list