From 56cc411c4ba10261e0149bdb80d613969c3ab130 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 20 May 2013 20:19:03 +0000 Subject: [PATCH] * python/py-arch.c (archpy_disassemble): Update. * python/py-type.c (typy_get_composite, typy_lookup_typename) (typy_lookup_type): Use GDB_PY_HANDLE_EXCEPTION. * python/py-utils.c (gdbpy_convert_exception): Return 'void'. * python/python-internal.h (CPYCHECKER_SETS_EXCEPTION): New macro. (GDB_PY_HANDLE_EXCEPTION): Update. (gdbpy_convert_exception): Update. Use CPYCHECKER_SETS_EXCEPTION. --- gdb/ChangeLog | 11 +++++++++++ gdb/python/py-arch.c | 3 ++- gdb/python/py-type.c | 20 +++----------------- gdb/python/py-utils.c | 6 +++--- gdb/python/python-internal.h | 22 ++++++++++++++++------ 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cda45347974..cb3768c3ef4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2013-05-20 Tom Tromey + + * python/py-arch.c (archpy_disassemble): Update. + * python/py-type.c (typy_get_composite, typy_lookup_typename) + (typy_lookup_type): Use GDB_PY_HANDLE_EXCEPTION. + * python/py-utils.c (gdbpy_convert_exception): Return 'void'. + * python/python-internal.h (CPYCHECKER_SETS_EXCEPTION): New + macro. + (GDB_PY_HANDLE_EXCEPTION): Update. + (gdbpy_convert_exception): Update. Use CPYCHECKER_SETS_EXCEPTION. + 2013-05-20 Tom Tromey * python/python-internal.h (events_object_type): Remove. diff --git a/gdb/python/py-arch.c b/gdb/python/py-arch.c index 7eb6eea1dcf..146a64237ef 100644 --- a/gdb/python/py-arch.c +++ b/gdb/python/py-arch.c @@ -200,7 +200,8 @@ archpy_disassemble (PyObject *self, PyObject *args, PyObject *kw) Py_DECREF (result_list); ui_file_delete (memfile); - return gdbpy_convert_exception (except); + gdbpy_convert_exception (except); + return NULL; } as = ui_file_xstrdup (memfile, NULL); diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index 7cc89ca70b2..b289a89e1fe 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -443,13 +443,7 @@ typy_get_composite (struct type *type) { CHECK_TYPEDEF (type); } - /* Don't use GDB_PY_HANDLE_EXCEPTION here because that returns - a (NULL) pointer of the wrong type. */ - if (except.reason < 0) - { - gdbpy_convert_exception (except); - return NULL; - } + GDB_PY_HANDLE_EXCEPTION (except); if (TYPE_CODE (type) != TYPE_CODE_PTR && TYPE_CODE (type) != TYPE_CODE_REF) @@ -732,11 +726,7 @@ typy_lookup_typename (const char *type_name, const struct block *block) type = lookup_typename (python_language, python_gdbarch, type_name, block, 0); } - if (except.reason < 0) - { - gdbpy_convert_exception (except); - return NULL; - } + GDB_PY_HANDLE_EXCEPTION (except); return type; } @@ -785,11 +775,7 @@ typy_lookup_type (struct demangle_component *demangled, break; } } - if (except.reason < 0) - { - gdbpy_convert_exception (except); - return NULL; - } + GDB_PY_HANDLE_EXCEPTION (except); } /* If we have a type from the switch statement above, just return diff --git a/gdb/python/py-utils.c b/gdb/python/py-utils.c index 890b65d346e..9188e3883ac 100644 --- a/gdb/python/py-utils.c +++ b/gdb/python/py-utils.c @@ -294,9 +294,9 @@ gdbpy_exception_to_string (PyObject *ptype, PyObject *pvalue) /* Convert a GDB exception to the appropriate Python exception. - This sets the Python error indicator, and returns NULL. */ + This sets the Python error indicator. */ -PyObject * +void gdbpy_convert_exception (struct gdb_exception exception) { PyObject *exc_class; @@ -308,7 +308,7 @@ gdbpy_convert_exception (struct gdb_exception exception) else exc_class = gdbpy_gdb_error; - return PyErr_Format (exc_class, "%s", exception.message); + PyErr_Format (exc_class, "%s", exception.message); } /* Converts OBJ to a CORE_ADDR value. diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 643bdcfa689..2b4244c01b5 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -47,6 +47,12 @@ #define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n) #endif +#ifdef WITH_CPYCHECKER_SETS_EXCEPTION_ATTRIBUTE +#define CPYCHECKER_SETS_EXCEPTION __attribute__ ((cpychecker_sets_exception)) +#else +#define CPYCHECKER_SETS_EXCEPTION +#endif + #include /* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t @@ -352,11 +358,14 @@ extern const struct language_defn *python_language; /* Use this after a TRY_EXCEPT to throw the appropriate Python exception. */ -#define GDB_PY_HANDLE_EXCEPTION(Exception) \ - do { \ - if (Exception.reason < 0) \ - return gdbpy_convert_exception (Exception); \ - } while (0) +#define GDB_PY_HANDLE_EXCEPTION(Exception) \ + do { \ + if (Exception.reason < 0) \ + { \ + gdbpy_convert_exception (Exception); \ + return NULL; \ + } \ + } while (0) /* Use this after a TRY_EXCEPT to throw the appropriate Python exception. This macro is for use inside setter functions. */ @@ -414,7 +423,8 @@ extern PyObject *gdbpy_gdb_error; extern PyObject *gdbpy_gdb_memory_error; extern PyObject *gdbpy_gdberror_exc; -extern PyObject *gdbpy_convert_exception (struct gdb_exception); +extern void gdbpy_convert_exception (struct gdb_exception) + CPYCHECKER_SETS_EXCEPTION; int get_addr_from_python (PyObject *obj, CORE_ADDR *addr); -- 2.30.2