Mercurial > emacs
changeset 69387:2a8938fd785e
(unwind_to_catch): Call x_fully_uncatch_errors.
(internal_condition_case_1, internal_condition_case_2):
Abort if within unclosed x_catch_errors.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 11 Mar 2006 15:19:31 +0000 |
parents | 2e9fdd693b3f |
children | 1fe13d52e977 |
files | src/eval.c |
diffstat | 1 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eval.c Sat Mar 11 15:13:47 2006 +0000 +++ b/src/eval.c Sat Mar 11 15:19:31 2006 +0000 @@ -1259,6 +1259,10 @@ } while (! last_time); + /* If x_catch_errors was done, turn it off now. + (First we give unbind_to a chance to do that.) */ + x_fully_uncatch_errors (); + byte_stack_list = catch->byte_stack; gcprolist = catch->gcpro; #ifdef DEBUG_GCPRO @@ -1435,10 +1439,10 @@ struct catchtag c; struct handler h; -#if 0 /* We now handle interrupt_input_blocked properly. - What we still do not handle is exiting a signal handler. */ + /* Since Fsignal will close off all calls to x_catch_errors, + we will get the wrong results if some are not closed now. */ + if (x_catching_errors ()) abort (); -#endif c.tag = Qnil; c.val = Qnil; @@ -1481,6 +1485,11 @@ struct catchtag c; struct handler h; + /* Since Fsignal will close off all calls to x_catch_errors, + we will get the wrong results if some are not closed now. */ + if (x_catching_errors ()) + abort (); + c.tag = Qnil; c.val = Qnil; c.backlist = backtrace_list; @@ -1525,6 +1534,11 @@ struct catchtag c; struct handler h; + /* Since Fsignal will close off all calls to x_catch_errors, + we will get the wrong results if some are not closed now. */ + if (x_catching_errors ()) + abort (); + c.tag = Qnil; c.val = Qnil; c.backlist = backtrace_list;