diff options
author | Tom Tromey <tom@tromey.com> | 2016-11-20 10:57:28 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-01-10 19:14:06 -0700 |
commit | 06fc9bf7d92d0bc857f3e8c109686f36aea5509c (patch) | |
tree | 89f1498bd84a3d158c53069db1b9cc435efea44b | |
parent | 830a493402da4a055bf2d34ab300a83305391095 (diff) | |
download | gdb-06fc9bf7d92d0bc857f3e8c109686f36aea5509c.zip gdb-06fc9bf7d92d0bc857f3e8c109686f36aea5509c.tar.gz gdb-06fc9bf7d92d0bc857f3e8c109686f36aea5509c.tar.bz2 |
Use gdbpy_ref in enumerate_args
This changes enumerate_args to use gdbpy_ref, and gets rid of many
gotos.
2017-01-10 Tom Tromey <tom@tromey.com>
* python/py-framefilter.c (enumerate_args): Use gdbpy_ref.
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/python/py-framefilter.c | 56 |
2 files changed, 25 insertions, 35 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 25ec3a0..c166045 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 2017-01-10 Tom Tromey <tom@tromey.com> + * python/py-framefilter.c (enumerate_args): Use gdbpy_ref. + +2017-01-10 Tom Tromey <tom@tromey.com> + * python/py-utils.c (unicode_to_encoded_string) (python_string_to_target_string) (python_string_to_target_python_string) diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c index 7a7dfbc..511e32f 100644 --- a/gdb/python/py-framefilter.c +++ b/gdb/python/py-framefilter.c @@ -497,7 +497,6 @@ enumerate_args (PyObject *iter, int print_args_field, struct frame_info *frame) { - PyObject *item; struct value_print_options opts; get_user_print_options (&opts); @@ -517,7 +516,7 @@ enumerate_args (PyObject *iter, CATCH (except, RETURN_MASK_ALL) { gdbpy_convert_exception (except); - goto error; + return EXT_LANG_BT_ERROR; } END_CATCH @@ -525,11 +524,11 @@ enumerate_args (PyObject *iter, commas in the argument output is correct. At the end of the loop block collect another item from the iterator, and, if it is not null emit a comma. */ - item = PyIter_Next (iter); + gdbpy_ref item (PyIter_Next (iter)); if (item == NULL && PyErr_Occurred ()) - goto error; + return EXT_LANG_BT_ERROR; - while (item) + while (item != NULL) { const struct language_defn *language; gdb::unique_xmalloc_ptr<char> sym_name; @@ -538,22 +537,14 @@ enumerate_args (PyObject *iter, struct value *val; enum ext_lang_bt_status success = EXT_LANG_BT_ERROR; - success = extract_sym (item, &sym_name, &sym, &sym_block, &language); + success = extract_sym (item.get (), &sym_name, &sym, &sym_block, + &language); if (success == EXT_LANG_BT_ERROR) - { - Py_DECREF (item); - goto error; - } + return EXT_LANG_BT_ERROR; - success = extract_value (item, &val); + success = extract_value (item.get (), &val); if (success == EXT_LANG_BT_ERROR) - { - Py_DECREF (item); - goto error; - } - - Py_DECREF (item); - item = NULL; + return EXT_LANG_BT_ERROR; if (sym && out->is_mi_like_p () && ! mi_should_print (sym, MI_PRINT_ARGS)) @@ -571,7 +562,7 @@ enumerate_args (PyObject *iter, { PyErr_SetString (PyExc_RuntimeError, _("No symbol or value provided.")); - goto error; + return EXT_LANG_BT_ERROR; } TRY @@ -581,7 +572,7 @@ enumerate_args (PyObject *iter, CATCH (except, RETURN_MASK_ALL) { gdbpy_convert_exception (except); - goto error; + return EXT_LANG_BT_ERROR; } END_CATCH @@ -599,7 +590,7 @@ enumerate_args (PyObject *iter, { xfree (arg.error); xfree (entryarg.error); - goto error; + return EXT_LANG_BT_ERROR; } } @@ -617,7 +608,7 @@ enumerate_args (PyObject *iter, xfree (arg.error); xfree (entryarg.error); gdbpy_convert_exception (except); - goto error; + return EXT_LANG_BT_ERROR; } END_CATCH } @@ -626,9 +617,9 @@ enumerate_args (PyObject *iter, args_type, print_args_field, NULL) == EXT_LANG_BT_ERROR) { - xfree (arg.error); - xfree (entryarg.error); - goto error; + xfree (arg.error); + xfree (entryarg.error); + return EXT_LANG_BT_ERROR; } } @@ -643,14 +634,14 @@ enumerate_args (PyObject *iter, if (py_print_single_arg (out, sym_name.get (), NULL, val, &opts, args_type, print_args_field, language) == EXT_LANG_BT_ERROR) - goto error; + return EXT_LANG_BT_ERROR; } } /* Collect the next item from the iterator. If this is the last item, do not print the comma. */ - item = PyIter_Next (iter); + item.reset (PyIter_Next (iter)); if (item != NULL) { TRY @@ -659,14 +650,13 @@ enumerate_args (PyObject *iter, } CATCH (except, RETURN_MASK_ALL) { - Py_DECREF (item); gdbpy_convert_exception (except); - goto error; + return EXT_LANG_BT_ERROR; } END_CATCH } else if (PyErr_Occurred ()) - goto error; + return EXT_LANG_BT_ERROR; TRY { @@ -674,17 +664,13 @@ enumerate_args (PyObject *iter, } CATCH (except, RETURN_MASK_ALL) { - Py_DECREF (item); gdbpy_convert_exception (except); - goto error; + return EXT_LANG_BT_ERROR; } END_CATCH } return EXT_LANG_BT_OK; - - error: - return EXT_LANG_BT_ERROR; } |