Avoid questionable casts in py-symtab.c

py-symtab.c has some questionable casts of Py_None to symtab_object*.
This patch avoids these casts by instead using downcasts at the
appropriate places.

gdb/ChangeLog
2019-01-03  Tom Tromey  <tom@tromey.com>

	* python/py-symtab.c (salpy_str): Update.
	(struct salpy_sal_object) <symtab>: Now a PyObject.
	(salpy_dealloc): Update.
	(del_objfile_sal): Use gdbpy_ref.
This commit is contained in:
Tom Tromey 2018-12-27 12:16:06 -07:00
parent 1b20edf043
commit 7c71111916
2 changed files with 30 additions and 16 deletions

View file

@ -1,3 +1,10 @@
2019-01-03 Tom Tromey <tom@tromey.com>
* python/py-symtab.c (salpy_str): Update.
(struct salpy_sal_object) <symtab>: Now a PyObject.
(salpy_dealloc): Update.
(del_objfile_sal): Use gdbpy_ref.
2019-01-03 Tom Tromey <tom@tromey.com> 2019-01-03 Tom Tromey <tom@tromey.com>
* python/py-type.c (convert_field): Use new_reference. Return * python/py-type.c (convert_field): Use new_reference. Return

View file

@ -58,7 +58,7 @@ static const struct objfile_data *stpy_objfile_data_key;
typedef struct salpy_sal_object { typedef struct salpy_sal_object {
PyObject_HEAD PyObject_HEAD
/* The GDB Symbol table structure. */ /* The GDB Symbol table structure. */
symtab_object *symtab; PyObject *symtab;
/* The GDB Symbol table and line structure. */ /* The GDB Symbol table and line structure. */
struct symtab_and_line *sal; struct symtab_and_line *sal;
/* A Symtab and line object is associated with an objfile, so keep /* A Symtab and line object is associated with an objfile, so keep
@ -227,8 +227,13 @@ salpy_str (PyObject *self)
SALPY_REQUIRE_VALID (self, sal); SALPY_REQUIRE_VALID (self, sal);
sal_obj = (sal_object *) self; sal_obj = (sal_object *) self;
filename = (sal_obj->symtab == (symtab_object *) Py_None) if (sal_obj->symtab == Py_None)
? "<unknown>" : symtab_to_filename_for_display (sal_obj->symtab->symtab); filename = "<unknown>";
else
{
symtab *symtab = symtab_object_to_symtab (sal_obj->symtab);
filename = symtab_to_filename_for_display (symtab);
}
return PyString_FromFormat ("symbol and line for %s, line %d", filename, return PyString_FromFormat ("symbol and line for %s, line %d", filename,
sal->line); sal->line);
@ -323,8 +328,9 @@ salpy_dealloc (PyObject *self)
if (self_sal->prev) if (self_sal->prev)
self_sal->prev->next = self_sal->next; self_sal->prev->next = self_sal->next;
else if (self_sal->symtab != (symtab_object * ) Py_None) else if (self_sal->symtab != Py_None)
set_objfile_data (SYMTAB_OBJFILE (self_sal->symtab->symtab), set_objfile_data
(SYMTAB_OBJFILE (symtab_object_to_symtab (self_sal->symtab)),
salpy_objfile_data_key, self_sal->next); salpy_objfile_data_key, self_sal->next);
if (self_sal->next) if (self_sal->next)
@ -343,11 +349,11 @@ salpy_dealloc (PyObject *self)
static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
set_sal (sal_object *sal_obj, struct symtab_and_line sal) set_sal (sal_object *sal_obj, struct symtab_and_line sal)
{ {
symtab_object *symtab_obj; PyObject *symtab_obj;
if (sal.symtab) if (sal.symtab)
{ {
symtab_obj = (symtab_object *) symtab_to_symtab_object (sal.symtab); symtab_obj = symtab_to_symtab_object (sal.symtab);
/* If a symtab existed in the sal, but it cannot be duplicated, /* If a symtab existed in the sal, but it cannot be duplicated,
we exit. */ we exit. */
if (symtab_obj == NULL) if (symtab_obj == NULL)
@ -355,7 +361,7 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal)
} }
else else
{ {
symtab_obj = (symtab_object *) Py_None; symtab_obj = Py_None;
Py_INCREF (Py_None); Py_INCREF (Py_None);
} }
@ -367,16 +373,17 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal)
/* If the SAL does not have a symtab, we do not add it to the /* If the SAL does not have a symtab, we do not add it to the
objfile cleanup observer linked list. */ objfile cleanup observer linked list. */
if (sal_obj->symtab != (symtab_object *)Py_None) if (sal_obj->symtab != Py_None)
{ {
symtab *symtab = symtab_object_to_symtab (sal_obj->symtab);
sal_obj->next sal_obj->next
= ((struct salpy_sal_object *) = ((struct salpy_sal_object *) objfile_data (SYMTAB_OBJFILE (symtab),
objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab),
salpy_objfile_data_key)); salpy_objfile_data_key));
if (sal_obj->next) if (sal_obj->next)
sal_obj->next->prev = sal_obj; sal_obj->next->prev = sal_obj;
set_objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab), set_objfile_data (SYMTAB_OBJFILE (symtab),
salpy_objfile_data_key, sal_obj); salpy_objfile_data_key, sal_obj);
} }
else else
@ -491,8 +498,8 @@ del_objfile_sal (struct objfile *objfile, void *datum)
{ {
sal_object *next = obj->next; sal_object *next = obj->next;
Py_DECREF (obj->symtab); gdbpy_ref<> tmp (obj->symtab);
obj->symtab = (symtab_object *) Py_None; obj->symtab = Py_None;
Py_INCREF (Py_None); Py_INCREF (Py_None);
obj->next = NULL; obj->next = NULL;