diff options
author | Tom Tromey <tom@tromey.com> | 2018-12-27 12:16:06 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-01-03 14:49:19 -0700 |
commit | 7c711119166fc1c60c756059f39c6703d57eedbf (patch) | |
tree | 457116b24660a941d567a9cc8372d84bc483b6ec /gdb/python/py-symtab.c | |
parent | 1b20edf043c62759a4c78e40b03846e9bafd584c (diff) | |
download | gdb-7c711119166fc1c60c756059f39c6703d57eedbf.zip gdb-7c711119166fc1c60c756059f39c6703d57eedbf.tar.gz gdb-7c711119166fc1c60c756059f39c6703d57eedbf.tar.bz2 |
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.
Diffstat (limited to 'gdb/python/py-symtab.c')
-rw-r--r-- | gdb/python/py-symtab.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index e4a10dc..a5f376a 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -58,7 +58,7 @@ static const struct objfile_data *stpy_objfile_data_key; typedef struct salpy_sal_object { PyObject_HEAD /* The GDB Symbol table structure. */ - symtab_object *symtab; + PyObject *symtab; /* The GDB Symbol table and line structure. */ struct symtab_and_line *sal; /* 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); sal_obj = (sal_object *) self; - filename = (sal_obj->symtab == (symtab_object *) Py_None) - ? "<unknown>" : symtab_to_filename_for_display (sal_obj->symtab->symtab); + if (sal_obj->symtab == Py_None) + 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, sal->line); @@ -323,9 +328,10 @@ salpy_dealloc (PyObject *self) if (self_sal->prev) self_sal->prev->next = self_sal->next; - else if (self_sal->symtab != (symtab_object * ) Py_None) - set_objfile_data (SYMTAB_OBJFILE (self_sal->symtab->symtab), - salpy_objfile_data_key, self_sal->next); + else if (self_sal->symtab != Py_None) + set_objfile_data + (SYMTAB_OBJFILE (symtab_object_to_symtab (self_sal->symtab)), + salpy_objfile_data_key, self_sal->next); if (self_sal->next) self_sal->next->prev = self_sal->prev; @@ -343,11 +349,11 @@ salpy_dealloc (PyObject *self) static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION set_sal (sal_object *sal_obj, struct symtab_and_line sal) { - symtab_object *symtab_obj; + PyObject *symtab_obj; 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, we exit. */ if (symtab_obj == NULL) @@ -355,7 +361,7 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal) } else { - symtab_obj = (symtab_object *) Py_None; + symtab_obj = 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 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 - = ((struct salpy_sal_object *) - objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab), - salpy_objfile_data_key)); + = ((struct salpy_sal_object *) objfile_data (SYMTAB_OBJFILE (symtab), + salpy_objfile_data_key)); if (sal_obj->next) 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); } else @@ -491,8 +498,8 @@ del_objfile_sal (struct objfile *objfile, void *datum) { sal_object *next = obj->next; - Py_DECREF (obj->symtab); - obj->symtab = (symtab_object *) Py_None; + gdbpy_ref<> tmp (obj->symtab); + obj->symtab = Py_None; Py_INCREF (Py_None); obj->next = NULL; |