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:
parent
1b20edf043
commit
7c71111916
2 changed files with 30 additions and 16 deletions
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue