aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorRichard M. Stallman1994-02-07 01:02:05 +0000
committerRichard M. Stallman1994-02-07 01:02:05 +0000
commitd227775c812fc1b75e56829bae372ca48833d00e (patch)
tree602bc2df084dc2fe27a8cb2667b1a2abcdc2b18a /src/eval.c
parentf1ff6645440865dcbf65689b399d9d88d107d4e8 (diff)
downloademacs-d227775c812fc1b75e56829bae372ca48833d00e.tar.gz
emacs-d227775c812fc1b75e56829bae372ca48833d00e.zip
(internal_condition_case_1): New function.
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index d2ca5418e20..9e5a33d9775 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1094,6 +1094,43 @@ internal_condition_case (bfun, handlers, hfun)
1094 return val; 1094 return val;
1095} 1095}
1096 1096
1097Lisp_Object
1098internal_condition_case_1 (bfun, arg, handlers, hfun)
1099 Lisp_Object (*bfun) ();
1100 Lisp_Object arg;
1101 Lisp_Object handlers;
1102 Lisp_Object (*hfun) ();
1103{
1104 Lisp_Object val;
1105 struct catchtag c;
1106 struct handler h;
1107
1108 c.tag = Qnil;
1109 c.val = Qnil;
1110 c.backlist = backtrace_list;
1111 c.handlerlist = handlerlist;
1112 c.lisp_eval_depth = lisp_eval_depth;
1113 c.pdlcount = specpdl_ptr - specpdl;
1114 c.poll_suppress_count = poll_suppress_count;
1115 c.gcpro = gcprolist;
1116 if (_setjmp (c.jmp))
1117 {
1118 return (*hfun) (Fcdr (c.val));
1119 }
1120 c.next = catchlist;
1121 catchlist = &c;
1122 h.handler = handlers;
1123 h.var = Qnil;
1124 h.next = handlerlist;
1125 h.tag = &c;
1126 handlerlist = &h;
1127
1128 val = (*bfun) (arg);
1129 catchlist = c.next;
1130 handlerlist = h.next;
1131 return val;
1132}
1133
1097static Lisp_Object find_handler_clause (); 1134static Lisp_Object find_handler_clause ();
1098 1135
1099DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0, 1136DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,