diff options
Diffstat (limited to 'src/eval.c')
| -rw-r--r-- | src/eval.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c index 37d466f69ed..9e86a185908 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -1419,6 +1419,61 @@ internal_condition_case_2 (Lisp_Object (*bfun) (Lisp_Object, Lisp_Object), | |||
| 1419 | } | 1419 | } |
| 1420 | } | 1420 | } |
| 1421 | 1421 | ||
| 1422 | /* Like internal_condition_case_1 but call BFUN with ARG1, ARG2, ARG3 as | ||
| 1423 | its arguments. */ | ||
| 1424 | |||
| 1425 | Lisp_Object | ||
| 1426 | internal_condition_case_3 (Lisp_Object (*bfun) (Lisp_Object, Lisp_Object, | ||
| 1427 | Lisp_Object), | ||
| 1428 | Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, | ||
| 1429 | Lisp_Object handlers, | ||
| 1430 | Lisp_Object (*hfun) (Lisp_Object)) | ||
| 1431 | { | ||
| 1432 | struct handler *c = push_handler (handlers, CONDITION_CASE); | ||
| 1433 | if (sys_setjmp (c->jmp)) | ||
| 1434 | { | ||
| 1435 | Lisp_Object val = handlerlist->val; | ||
| 1436 | clobbered_eassert (handlerlist == c); | ||
| 1437 | handlerlist = handlerlist->next; | ||
| 1438 | return hfun (val); | ||
| 1439 | } | ||
| 1440 | else | ||
| 1441 | { | ||
| 1442 | Lisp_Object val = bfun (arg1, arg2, arg3); | ||
| 1443 | eassert (handlerlist == c); | ||
| 1444 | handlerlist = c->next; | ||
| 1445 | return val; | ||
| 1446 | } | ||
| 1447 | } | ||
| 1448 | |||
| 1449 | /* Like internal_condition_case_1 but call BFUN with ARG1, ARG2, ARG3, ARG4 as | ||
| 1450 | its arguments. */ | ||
| 1451 | |||
| 1452 | Lisp_Object | ||
| 1453 | internal_condition_case_4 (Lisp_Object (*bfun) (Lisp_Object, Lisp_Object, | ||
| 1454 | Lisp_Object, Lisp_Object), | ||
| 1455 | Lisp_Object arg1, Lisp_Object arg2, | ||
| 1456 | Lisp_Object arg3, Lisp_Object arg4, | ||
| 1457 | Lisp_Object handlers, | ||
| 1458 | Lisp_Object (*hfun) (Lisp_Object)) | ||
| 1459 | { | ||
| 1460 | struct handler *c = push_handler (handlers, CONDITION_CASE); | ||
| 1461 | if (sys_setjmp (c->jmp)) | ||
| 1462 | { | ||
| 1463 | Lisp_Object val = handlerlist->val; | ||
| 1464 | clobbered_eassert (handlerlist == c); | ||
| 1465 | handlerlist = handlerlist->next; | ||
| 1466 | return hfun (val); | ||
| 1467 | } | ||
| 1468 | else | ||
| 1469 | { | ||
| 1470 | Lisp_Object val = bfun (arg1, arg2, arg3, arg4); | ||
| 1471 | eassert (handlerlist == c); | ||
| 1472 | handlerlist = c->next; | ||
| 1473 | return val; | ||
| 1474 | } | ||
| 1475 | } | ||
| 1476 | |||
| 1422 | /* Like internal_condition_case but call BFUN with NARGS as first, | 1477 | /* Like internal_condition_case but call BFUN with NARGS as first, |
| 1423 | and ARGS as second argument. */ | 1478 | and ARGS as second argument. */ |
| 1424 | 1479 | ||