]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Return gdbpy_ref<> from symtab_to_symtab_object
authorTom Tromey <tromey@adacore.com>
Fri, 20 Feb 2026 19:47:51 +0000 (12:47 -0700)
committerTom Tromey <tromey@adacore.com>
Mon, 23 Feb 2026 12:29:11 +0000 (05:29 -0700)
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>
gdb/python/py-symbol.c
gdb/python/py-symtab.c
gdb/python/python-internal.h

index d51f48233153912d89403897f16f305f1dae673b..492c386b7ee6a31f2dd7b31570709cba0d1e7013 100644 (file)
@@ -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 *
index 820542932bad90d80ac42dfdb38c3e7e826183f3..3b05721e616bc42577146acf786da8963936bb82 100644 (file)
@@ -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
index 979bf2498da3d750a402fe731a0426ae94ded9ef..8d101e8afb6150816a558f086e4216c246209a91 100644 (file)
@@ -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);