# HG changeset patch # User Richard M. Stallman # Date 762580014 0 # Node ID ddf57829cf03d180babd766100ccbe663277479d # Parent 854e14ecfa939a075ec28051d9aee3a8b21cb715 (Fsignal): If DATA is memory_signal_data, don't add to it. (Fsignal): Record the clause in chosen_clause. (Fcondition_case, internal_condition_case): Look there. (internal_condition_case_1): Look there. diff -r 854e14ecfa93 -r ddf57829cf03 src/eval.c --- a/src/eval.c Wed Mar 02 03:44:58 1994 +0000 +++ b/src/eval.c Wed Mar 02 03:46:54 1994 +0000 @@ -1034,8 +1034,8 @@ if (_setjmp (c.jmp)) { if (!NILP (h.var)) - specbind (h.var, Fcdr (c.val)); - val = Fprogn (Fcdr (Fcar (c.val))); + specbind (h.var, c.val); + val = Fprogn (Fcdr (h.chosen_clause)); /* Note that this just undoes the binding of h.var; whoever longjumped to us unwound the stack to c.pdlcount before @@ -1078,7 +1078,7 @@ c.gcpro = gcprolist; if (_setjmp (c.jmp)) { - return (*hfun) (Fcdr (c.val)); + return (*hfun) (c.val); } c.next = catchlist; catchlist = &c; @@ -1115,7 +1115,7 @@ c.gcpro = gcprolist; if (_setjmp (c.jmp)) { - return (*hfun) (Fcdr (c.val)); + return (*hfun) (c.val); } c.next = catchlist; catchlist = &c; @@ -1190,9 +1190,16 @@ if (!NILP (clause)) { + Lisp_Object unwind_data; struct handler *h = handlerlist; + handlerlist = allhandlers; - unwind_to_catch (h->tag, Fcons (clause, Fcons (error_symbol, data))); + if (data == memory_signal_data) + unwind_data = memory_signal_data; + else + unwind_data = Fcons (error_symbol, data); + h->chosen_clause = clause; + unwind_to_catch (h->tag, unwind_data); } }