diff options
author | Tom Tromey <tromey@adacore.com> | 2019-04-24 06:50:06 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2019-04-25 12:59:35 -0600 |
commit | 94aeb44b001ab2d632806242a3bacb0a879abe15 (patch) | |
tree | edff0a78beb11b19021e0679c1168e14c96bd84a /gdb/python | |
parent | 680d7fd5fcff860a31021845389d4dfeb7b42e3c (diff) | |
download | fsf-binutils-gdb-94aeb44b001ab2d632806242a3bacb0a879abe15.zip fsf-binutils-gdb-94aeb44b001ab2d632806242a3bacb0a879abe15.tar.gz fsf-binutils-gdb-94aeb44b001ab2d632806242a3bacb0a879abe15.tar.bz2 |
Make exception handling more efficient
This makes exception handling more efficient in a few spots, through
the use of const- and rvalue-references.
I wrote this patch by commenting out the gdb_exception copy
constructor and then examining the resulting error messages one by
one, introducing the use of std::move where appropriate.
gdb/ChangeLog
2019-04-25 Tom Tromey <tromey@adacore.com>
* xml-support.c (struct gdb_xml_parser) <set_error>: Take an
rvalue reference.
(gdb_xml_start_element_wrapper, gdb_xml_end_element_wrapper)
(gdb_xml_parser::parse): Use std::move.
* python/python-internal.h (gdbpy_convert_exception): Take a const
reference.
* python/py-value.c (valpy_getitem, valpy_nonzero): Use
std::move.
* python/py-utils.c (gdbpy_convert_exception): Take a const
reference.
* python/py-inferior.c (infpy_write_memory, infpy_search_memory):
Use std::move.
* python/py-breakpoint.c (bppy_set_condition, bppy_set_commands):
Use std::move.
* mi/mi-main.c (mi_print_exception): Take a const reference.
* main.c (handle_command_errors): Take a const reference.
* linespec.c (parse_linespec): Use std::move.
* infcall.c (run_inferior_call): Use std::move.
(call_function_by_hand_dummy): Use std::move.
* exec.c (try_open_exec_file): Use std::move.
* exceptions.h (exception_print, exception_fprintf)
(exception_print_same): Update.
* exceptions.c (print_exception, exception_print)
(exception_fprintf, exception_print_same): Change parameters to
const reference.
* event-top.c (gdb_rl_callback_read_char_wrapper): Update.
* common/new-op.c: Use std::move.
* common/common-exceptions.h (struct gdb_exception): Add move
constructor.
(struct gdb_exception_error, struct gdb_exception_quit, struct
gdb_quit_bad_alloc): Change constructor to move constructor.
(throw_exception): Change parameter to rvalue reference.
* common/common-exceptions.c (throw_exception): Take rvalue
reference.
* cli/cli-interp.c (safe_execute_command): Use std::move.
* breakpoint.c (insert_bp_location, location_to_sals): Use
std::move.
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/py-breakpoint.c | 8 | ||||
-rw-r--r-- | gdb/python/py-inferior.c | 8 | ||||
-rw-r--r-- | gdb/python/py-utils.c | 2 | ||||
-rw-r--r-- | gdb/python/py-value.c | 8 | ||||
-rw-r--r-- | gdb/python/python-internal.h | 2 |
5 files changed, 14 insertions, 14 deletions
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c index dfc30f7..fc9543e 100644 --- a/gdb/python/py-breakpoint.c +++ b/gdb/python/py-breakpoint.c @@ -469,9 +469,9 @@ bppy_set_condition (PyObject *self, PyObject *newvalue, void *closure) { set_breakpoint_condition (self_bp->bp, exp, 0); } - catch (const gdb_exception &ex) + catch (gdb_exception &ex) { - except = ex; + except = std::move (ex); } GDB_PY_SET_HANDLE_EXCEPTION (except); @@ -540,9 +540,9 @@ bppy_set_commands (PyObject *self, PyObject *newvalue, void *closure) counted_command_line lines = read_command_lines_1 (reader, 1, nullptr); breakpoint_set_commands (self_bp->bp, std::move (lines)); } - catch (const gdb_exception &ex) + catch (gdb_exception &ex) { - except = ex; + except = std::move (ex); } GDB_PY_SET_HANDLE_EXCEPTION (except); diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index 1b7e3c2..7e7d518 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -574,9 +574,9 @@ infpy_write_memory (PyObject *self, PyObject *args, PyObject *kw) { write_memory_with_notification (addr, buffer, length); } - catch (const gdb_exception &ex) + catch (gdb_exception &ex) { - except = ex; + except = std::move (ex); } GDB_PY_HANDLE_EXCEPTION (except); @@ -728,9 +728,9 @@ infpy_search_memory (PyObject *self, PyObject *args, PyObject *kw) buffer, pattern_size, &found_addr); } - catch (const gdb_exception &ex) + catch (gdb_exception &ex) { - except = ex; + except = std::move (ex); } GDB_PY_HANDLE_EXCEPTION (except); diff --git a/gdb/python/py-utils.c b/gdb/python/py-utils.c index 9fee881..e07da03 100644 --- a/gdb/python/py-utils.c +++ b/gdb/python/py-utils.c @@ -229,7 +229,7 @@ gdbpy_err_fetch::type_to_string () const This sets the Python error indicator. */ void -gdbpy_convert_exception (struct gdb_exception exception) +gdbpy_convert_exception (const struct gdb_exception &exception) { PyObject *exc_class; diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c index 3349802..512e5d02 100644 --- a/gdb/python/py-value.c +++ b/gdb/python/py-value.c @@ -1031,9 +1031,9 @@ valpy_getitem (PyObject *self, PyObject *key) if (res_val) result = value_to_value_object (res_val); } - catch (const gdb_exception &ex) + catch (gdb_exception &ex) { - except = ex; + except = std::move (ex); } GDB_PY_HANDLE_EXCEPTION (except); @@ -1498,9 +1498,9 @@ valpy_nonzero (PyObject *self) /* All other values are True. */ nonzero = 1; } - catch (const gdb_exception &ex) + catch (gdb_exception &ex) { - except = ex; + except = std::move (ex); } /* This is not documented in the Python documentation, but if this diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 449926c..69ff1fe 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -729,7 +729,7 @@ extern PyObject *gdbpy_gdb_error; extern PyObject *gdbpy_gdb_memory_error; extern PyObject *gdbpy_gdberror_exc; -extern void gdbpy_convert_exception (struct gdb_exception) +extern void gdbpy_convert_exception (const struct gdb_exception &) CPYCHECKER_SETS_EXCEPTION; int get_addr_from_python (PyObject *obj, CORE_ADDR *addr) |