diff options
author | Tom Tromey <tom@tromey.com> | 2019-04-03 16:02:42 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-04-08 09:05:39 -0600 |
commit | a70b814420059e1f2de2130d532ddd7b2b2500fc (patch) | |
tree | ce50952af2443675e67a60508a10c8fd5ab0715c /gdb/guile/scm-value.c | |
parent | 3d6e9d2336c9ffcedb10f89631981a23dd518e8e (diff) | |
download | gdb-a70b814420059e1f2de2130d532ddd7b2b2500fc.zip gdb-a70b814420059e1f2de2130d532ddd7b2b2500fc.tar.gz gdb-a70b814420059e1f2de2130d532ddd7b2b2500fc.tar.bz2 |
Rewrite TRY/CATCH
This rewrites gdb's TRY/CATCH to plain C++ try/catch. The patch was
largely written by script, though one change (to a comment in
common-exceptions.h) was reverted by hand.
gdb/ChangeLog
2019-04-08 Tom Tromey <tom@tromey.com>
* xml-support.c: Use C++ exception handling.
* x86-linux-nat.c: Use C++ exception handling.
* windows-nat.c: Use C++ exception handling.
* varobj.c: Use C++ exception handling.
* value.c: Use C++ exception handling.
* valprint.c: Use C++ exception handling.
* valops.c: Use C++ exception handling.
* unittests/parse-connection-spec-selftests.c: Use C++ exception
handling.
* unittests/cli-utils-selftests.c: Use C++ exception handling.
* typeprint.c: Use C++ exception handling.
* tui/tui.c: Use C++ exception handling.
* tracefile-tfile.c: Use C++ exception handling.
* top.c: Use C++ exception handling.
* thread.c: Use C++ exception handling.
* target.c: Use C++ exception handling.
* symmisc.c: Use C++ exception handling.
* symfile-mem.c: Use C++ exception handling.
* stack.c: Use C++ exception handling.
* sparc64-linux-tdep.c: Use C++ exception handling.
* solib.c: Use C++ exception handling.
* solib-svr4.c: Use C++ exception handling.
* solib-spu.c: Use C++ exception handling.
* solib-frv.c: Use C++ exception handling.
* solib-dsbt.c: Use C++ exception handling.
* selftest-arch.c: Use C++ exception handling.
* s390-tdep.c: Use C++ exception handling.
* rust-lang.c: Use C++ exception handling.
* rust-exp.y: Use C++ exception handling.
* rs6000-tdep.c: Use C++ exception handling.
* rs6000-aix-tdep.c: Use C++ exception handling.
* riscv-tdep.c: Use C++ exception handling.
* remote.c: Use C++ exception handling.
* remote-fileio.c: Use C++ exception handling.
* record-full.c: Use C++ exception handling.
* record-btrace.c: Use C++ exception handling.
* python/python.c: Use C++ exception handling.
* python/py-value.c: Use C++ exception handling.
* python/py-utils.c: Use C++ exception handling.
* python/py-unwind.c: Use C++ exception handling.
* python/py-type.c: Use C++ exception handling.
* python/py-symbol.c: Use C++ exception handling.
* python/py-record.c: Use C++ exception handling.
* python/py-record-btrace.c: Use C++ exception handling.
* python/py-progspace.c: Use C++ exception handling.
* python/py-prettyprint.c: Use C++ exception handling.
* python/py-param.c: Use C++ exception handling.
* python/py-objfile.c: Use C++ exception handling.
* python/py-linetable.c: Use C++ exception handling.
* python/py-lazy-string.c: Use C++ exception handling.
* python/py-infthread.c: Use C++ exception handling.
* python/py-inferior.c: Use C++ exception handling.
* python/py-gdb-readline.c: Use C++ exception handling.
* python/py-framefilter.c: Use C++ exception handling.
* python/py-frame.c: Use C++ exception handling.
* python/py-finishbreakpoint.c: Use C++ exception handling.
* python/py-cmd.c: Use C++ exception handling.
* python/py-breakpoint.c: Use C++ exception handling.
* python/py-arch.c: Use C++ exception handling.
* printcmd.c: Use C++ exception handling.
* ppc-linux-tdep.c: Use C++ exception handling.
* parse.c: Use C++ exception handling.
* p-valprint.c: Use C++ exception handling.
* objc-lang.c: Use C++ exception handling.
* mi/mi-main.c: Use C++ exception handling.
* mi/mi-interp.c: Use C++ exception handling.
* mi/mi-cmd-stack.c: Use C++ exception handling.
* mi/mi-cmd-break.c: Use C++ exception handling.
* main.c: Use C++ exception handling.
* linux-thread-db.c: Use C++ exception handling.
* linux-tdep.c: Use C++ exception handling.
* linux-nat.c: Use C++ exception handling.
* linux-fork.c: Use C++ exception handling.
* linespec.c: Use C++ exception handling.
* language.c: Use C++ exception handling.
* jit.c: Use C++ exception handling.
* infrun.c: Use C++ exception handling.
* infcmd.c: Use C++ exception handling.
* infcall.c: Use C++ exception handling.
* inf-loop.c: Use C++ exception handling.
* i386-tdep.c: Use C++ exception handling.
* i386-linux-tdep.c: Use C++ exception handling.
* guile/scm-value.c: Use C++ exception handling.
* guile/scm-type.c: Use C++ exception handling.
* guile/scm-symtab.c: Use C++ exception handling.
* guile/scm-symbol.c: Use C++ exception handling.
* guile/scm-pretty-print.c: Use C++ exception handling.
* guile/scm-ports.c: Use C++ exception handling.
* guile/scm-param.c: Use C++ exception handling.
* guile/scm-math.c: Use C++ exception handling.
* guile/scm-lazy-string.c: Use C++ exception handling.
* guile/scm-frame.c: Use C++ exception handling.
* guile/scm-disasm.c: Use C++ exception handling.
* guile/scm-cmd.c: Use C++ exception handling.
* guile/scm-breakpoint.c: Use C++ exception handling.
* guile/scm-block.c: Use C++ exception handling.
* guile/guile-internal.h: Use C++ exception handling.
* gnu-v3-abi.c: Use C++ exception handling.
* gdbtypes.c: Use C++ exception handling.
* frame.c: Use C++ exception handling.
* frame-unwind.c: Use C++ exception handling.
* fbsd-tdep.c: Use C++ exception handling.
* f-valprint.c: Use C++ exception handling.
* exec.c: Use C++ exception handling.
* event-top.c: Use C++ exception handling.
* event-loop.c: Use C++ exception handling.
* eval.c: Use C++ exception handling.
* dwarf2read.c: Use C++ exception handling.
* dwarf2loc.c: Use C++ exception handling.
* dwarf2-frame.c: Use C++ exception handling.
* dwarf2-frame-tailcall.c: Use C++ exception handling.
* dwarf-index-write.c: Use C++ exception handling.
* dwarf-index-cache.c: Use C++ exception handling.
* dtrace-probe.c: Use C++ exception handling.
* disasm-selftests.c: Use C++ exception handling.
* darwin-nat.c: Use C++ exception handling.
* cp-valprint.c: Use C++ exception handling.
* cp-support.c: Use C++ exception handling.
* cp-abi.c: Use C++ exception handling.
* corelow.c: Use C++ exception handling.
* completer.c: Use C++ exception handling.
* compile/compile-object-run.c: Use C++ exception handling.
* compile/compile-object-load.c: Use C++ exception handling.
* compile/compile-cplus-symbols.c: Use C++ exception handling.
* compile/compile-c-symbols.c: Use C++ exception handling.
* common/selftest.c: Use C++ exception handling.
* common/new-op.c: Use C++ exception handling.
* cli/cli-script.c: Use C++ exception handling.
* cli/cli-interp.c: Use C++ exception handling.
* cli/cli-cmds.c: Use C++ exception handling.
* c-varobj.c: Use C++ exception handling.
* btrace.c: Use C++ exception handling.
* breakpoint.c: Use C++ exception handling.
* break-catch-throw.c: Use C++ exception handling.
* arch-utils.c: Use C++ exception handling.
* amd64-tdep.c: Use C++ exception handling.
* ada-valprint.c: Use C++ exception handling.
* ada-typeprint.c: Use C++ exception handling.
* ada-lang.c: Use C++ exception handling.
* aarch64-tdep.c: Use C++ exception handling.
gdb/gdbserver/ChangeLog
2019-04-08 Tom Tromey <tom@tromey.com>
* server.c: Use C++ exception handling.
* linux-low.c: Use C++ exception handling.
* gdbreplay.c: Use C++ exception handling.
Diffstat (limited to 'gdb/guile/scm-value.c')
-rw-r--r-- | gdb/guile/scm-value.c | 75 |
1 files changed, 30 insertions, 45 deletions
diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c index 658924b..7f119a2 100644 --- a/gdb/guile/scm-value.c +++ b/gdb/guile/scm-value.c @@ -156,18 +156,17 @@ vlscm_print_value_smob (SCM self, SCM port, scm_print_state *pstate) instead of writingp. */ opts.raw = !!pstate->writingp; - TRY + try { string_file stb; common_val_print (v_smob->value, &stb, 0, &opts, current_language); scm_puts (stb.c_str (), port); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH if (pstate->writingp) scm_puts (">", port); @@ -187,15 +186,14 @@ vlscm_equal_p_value_smob (SCM v1, SCM v2) const value_smob *v2_smob = (value_smob *) SCM_SMOB_DATA (v2); int result = 0; - TRY + try { result = value_equal (v1_smob->value, v2_smob->value); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH return scm_from_bool (result); } @@ -392,14 +390,13 @@ gdbscm_value_address (SCM self) SCM address = SCM_BOOL_F; - TRY + try { address = vlscm_scm_from_value (value_addr (value)); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { } - END_CATCH if (gdbscm_is_exception (address)) return address; @@ -496,7 +493,7 @@ gdbscm_value_dynamic_type (SCM self) if (! SCM_UNBNDP (v_smob->dynamic_type)) return v_smob->dynamic_type; - TRY + try { scoped_value_mark free_values; @@ -532,11 +529,10 @@ gdbscm_value_dynamic_type (SCM self) type = NULL; } } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH if (type == NULL) v_smob->dynamic_type = gdbscm_value_type (self); @@ -684,15 +680,14 @@ gdbscm_value_call (SCM self, SCM args) long args_count; struct value **vargs = NULL; - TRY + try { ftype = check_typedef (value_type (function)); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH SCM_ASSERT_TYPE (TYPE_CODE (ftype) == TYPE_CODE_FUNC, self, SCM_ARG1, FUNC_NAME, @@ -751,17 +746,16 @@ gdbscm_value_to_bytevector (SCM self) type = value_type (value); - TRY + try { type = check_typedef (type); length = TYPE_LENGTH (type); contents = value_contents (value); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH bv = scm_c_make_bytevector (length); memcpy (SCM_BYTEVECTOR_CONTENTS (bv), contents, length); @@ -795,31 +789,29 @@ gdbscm_value_to_bool (SCM self) type = value_type (value); - TRY + try { type = check_typedef (type); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH SCM_ASSERT_TYPE (is_intlike (type, 1), self, SCM_ARG1, FUNC_NAME, _("integer-like gdb value")); - TRY + try { if (TYPE_CODE (type) == TYPE_CODE_PTR) l = value_as_address (value); else l = value_as_long (value); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH return scm_from_bool (l != 0); } @@ -838,31 +830,29 @@ gdbscm_value_to_integer (SCM self) type = value_type (value); - TRY + try { type = check_typedef (type); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH SCM_ASSERT_TYPE (is_intlike (type, 1), self, SCM_ARG1, FUNC_NAME, _("integer-like gdb value")); - TRY + try { if (TYPE_CODE (type) == TYPE_CODE_PTR) l = value_as_address (value); else l = value_as_long (value); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH if (TYPE_UNSIGNED (type)) return gdbscm_scm_from_ulongest (l); @@ -885,20 +875,19 @@ gdbscm_value_to_real (SCM self) type = value_type (value); - TRY + try { type = check_typedef (type); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH SCM_ASSERT_TYPE (is_intlike (type, 0) || TYPE_CODE (type) == TYPE_CODE_FLT, self, SCM_ARG1, FUNC_NAME, _("number")); - TRY + try { if (is_floating_value (value)) { @@ -916,11 +905,10 @@ gdbscm_value_to_real (SCM self) check = value_from_longest (type, (LONGEST) d); } } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH /* TODO: Is there a better way to check if the value fits? */ if (!value_equal (value, check)) @@ -1004,18 +992,17 @@ gdbscm_value_to_string (SCM self, SCM rest) /* We don't assume anything about the result of scm_port_conversion_strategy. From this point on, if errors is not 'errors, use 'substitute. */ - TRY + try { gdb::unique_xmalloc_ptr<gdb_byte> buffer; LA_GET_STRING (value, &buffer, &length, &char_type, &la_encoding); buffer_contents = buffer.release (); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { xfree (encoding); GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH /* If errors is "error", scm_from_stringn may throw a Scheme exception. Make sure we don't leak. This is done via scm_dynwind_begin, et.al. */ @@ -1077,7 +1064,7 @@ gdbscm_value_to_lazy_string (SCM self, SCM rest) _("invalid length")); } - TRY + try { scoped_value_mark free_values; @@ -1132,11 +1119,10 @@ gdbscm_value_to_lazy_string (SCM self, SCM rest) result = lsscm_make_lazy_string (addr, length, encoding, type); } - CATCH (ex, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &ex) { except = ex; } - END_CATCH xfree (encoding); GDBSCM_HANDLE_GDB_EXCEPTION (except); @@ -1191,15 +1177,14 @@ gdbscm_value_print (SCM self) string_file stb; - TRY + try { common_val_print (value, &stb, 0, &opts, current_language); } - CATCH (except, RETURN_MASK_ALL) + catch (const gdb_exception_RETURN_MASK_ALL &except) { GDBSCM_HANDLE_GDB_EXCEPTION (except); } - END_CATCH /* Use SCM_FAILED_CONVERSION_QUESTION_MARK to ensure this doesn't throw an error if the encoding fails. |