[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[no subject]
From: |
Chris Gregory |
Date: |
Wed, 28 Dec 2016 01:15:01 -0600 |
Here is another patch that does more of this.
--
Chris Gregory
diff --git a/src/eval.c b/src/eval.c
index e50e26a..9e1d612 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1313,20 +1313,12 @@ internal_condition_case (Lisp_Object (*bfun) (void),
Lisp_Object handlers,
Lisp_Object (*hfun) (Lisp_Object))
{
struct handler *c = push_handler (handlers, CONDITION_CASE);
- if (sys_setjmp (c->jmp))
- {
- Lisp_Object val = handlerlist->val;
- clobbered_eassert (handlerlist == c);
- handlerlist = handlerlist->next;
- return hfun (val);
- }
- else
- {
- Lisp_Object val = bfun ();
- clobbered_eassert (handlerlist == c);
- handlerlist = handlerlist->next;
- return val;
- }
+ bool is_returning = sys_setjmp (c->jmp);
+ Lisp_Object val = is_returning ? handlerlist->val : bfun ();
+
+ clobbered_eassert (handlerlist == c);
+ handlerlist = handlerlist->next;
+ return is_returning ? hfun (val) : val;
}
/* Like internal_condition_case but call BFUN with ARG as its argument. */
@@ -1364,20 +1356,12 @@ internal_condition_case_2 (Lisp_Object (*bfun)
(Lisp_Object, Lisp_Object),
Lisp_Object (*hfun) (Lisp_Object))
{
struct handler *c = push_handler (handlers, CONDITION_CASE);
- if (sys_setjmp (c->jmp))
- {
- Lisp_Object val = handlerlist->val;
- clobbered_eassert (handlerlist == c);
- handlerlist = handlerlist->next;
- return hfun (val);
- }
- else
- {
- Lisp_Object val = bfun (arg1, arg2);
- clobbered_eassert (handlerlist == c);
- handlerlist = handlerlist->next;
- return val;
- }
+ bool is_returning = sys_setjmp (c->jmp);
+ Lisp_Object val = is_returning ? handlerlist->val : bfun (arg1, arg2);
+
+ clobbered_eassert (handlerlist == c);
+ handlerlist = handlerlist->next;
+ return is_returning ? hfun (val) : val;
}
/* Like internal_condition_case but call BFUN with NARGS as first,
@@ -1393,20 +1377,12 @@ internal_condition_case_n (Lisp_Object (*bfun)
(ptrdiff_t, Lisp_Object *),
Lisp_Object *args))
{
struct handler *c = push_handler (handlers, CONDITION_CASE);
- if (sys_setjmp (c->jmp))
- {
- Lisp_Object val = handlerlist->val;
- clobbered_eassert (handlerlist == c);
- handlerlist = handlerlist->next;
- return hfun (val, nargs, args);
- }
- else
- {
- Lisp_Object val = bfun (nargs, args);
- clobbered_eassert (handlerlist == c);
- handlerlist = handlerlist->next;
- return val;
- }
+ bool is_returning = sys_setjmp (c->jmp);
+ Lisp_Object val = is_returning ? handlerlist->val : bfun (nargs, args);
+
+ clobbered_eassert (handlerlist == c);
+ handlerlist = handlerlist->next;
+ return is_returning ? hfun (val, nargs, args) : val;
}
struct handler *
- [no subject],
Chris Gregory <=