Mercurial > emacs
comparison src/eval.c @ 26365:6527989cb214
(struct catchtag): Add member byte_stack.
(internal_catch, Fcondition_case, internal_condition_case)
(internal_condition_case_1: Save value of byte_stack_list in
catchtag.
(unwind_to_catch): Restore byte_stack_list from catchtag.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Fri, 05 Nov 1999 21:27:13 +0000 |
parents | 155d5adcdff4 |
children | 9fd028e7872c |
comparison
equal
deleted
inserted
replaced
26364:7b0217d9259c | 26365:6527989cb214 |
---|---|
79 struct backtrace *backlist; | 79 struct backtrace *backlist; |
80 struct handler *handlerlist; | 80 struct handler *handlerlist; |
81 int lisp_eval_depth; | 81 int lisp_eval_depth; |
82 int pdlcount; | 82 int pdlcount; |
83 int poll_suppress_count; | 83 int poll_suppress_count; |
84 struct byte_stack *byte_stack; | |
84 }; | 85 }; |
85 | 86 |
86 struct catchtag *catchlist; | 87 struct catchtag *catchlist; |
87 | 88 |
88 #ifdef DEBUG_GCPRO | 89 #ifdef DEBUG_GCPRO |
920 c.handlerlist = handlerlist; | 921 c.handlerlist = handlerlist; |
921 c.lisp_eval_depth = lisp_eval_depth; | 922 c.lisp_eval_depth = lisp_eval_depth; |
922 c.pdlcount = specpdl_ptr - specpdl; | 923 c.pdlcount = specpdl_ptr - specpdl; |
923 c.poll_suppress_count = poll_suppress_count; | 924 c.poll_suppress_count = poll_suppress_count; |
924 c.gcpro = gcprolist; | 925 c.gcpro = gcprolist; |
926 c.byte_stack = byte_stack_list; | |
925 catchlist = &c; | 927 catchlist = &c; |
926 | 928 |
927 /* Call FUNC. */ | 929 /* Call FUNC. */ |
928 if (! _setjmp (c.jmp)) | 930 if (! _setjmp (c.jmp)) |
929 c.val = (*func) (arg); | 931 c.val = (*func) (arg); |
972 handlerlist = catchlist->handlerlist; | 974 handlerlist = catchlist->handlerlist; |
973 catchlist = catchlist->next; | 975 catchlist = catchlist->next; |
974 } | 976 } |
975 while (! last_time); | 977 while (! last_time); |
976 | 978 |
979 byte_stack_list = catch->byte_stack; | |
977 gcprolist = catch->gcpro; | 980 gcprolist = catch->gcpro; |
978 #ifdef DEBUG_GCPRO | 981 #ifdef DEBUG_GCPRO |
979 if (gcprolist != 0) | 982 if (gcprolist != 0) |
980 gcpro_level = gcprolist->level + 1; | 983 gcpro_level = gcprolist->level + 1; |
981 else | 984 else |
1083 c.handlerlist = handlerlist; | 1086 c.handlerlist = handlerlist; |
1084 c.lisp_eval_depth = lisp_eval_depth; | 1087 c.lisp_eval_depth = lisp_eval_depth; |
1085 c.pdlcount = specpdl_ptr - specpdl; | 1088 c.pdlcount = specpdl_ptr - specpdl; |
1086 c.poll_suppress_count = poll_suppress_count; | 1089 c.poll_suppress_count = poll_suppress_count; |
1087 c.gcpro = gcprolist; | 1090 c.gcpro = gcprolist; |
1091 c.byte_stack = byte_stack_list; | |
1088 if (_setjmp (c.jmp)) | 1092 if (_setjmp (c.jmp)) |
1089 { | 1093 { |
1090 if (!NILP (h.var)) | 1094 if (!NILP (h.var)) |
1091 specbind (h.var, c.val); | 1095 specbind (h.var, c.val); |
1092 val = Fprogn (Fcdr (h.chosen_clause)); | 1096 val = Fprogn (Fcdr (h.chosen_clause)); |
1143 c.handlerlist = handlerlist; | 1147 c.handlerlist = handlerlist; |
1144 c.lisp_eval_depth = lisp_eval_depth; | 1148 c.lisp_eval_depth = lisp_eval_depth; |
1145 c.pdlcount = specpdl_ptr - specpdl; | 1149 c.pdlcount = specpdl_ptr - specpdl; |
1146 c.poll_suppress_count = poll_suppress_count; | 1150 c.poll_suppress_count = poll_suppress_count; |
1147 c.gcpro = gcprolist; | 1151 c.gcpro = gcprolist; |
1152 c.byte_stack = byte_stack_list; | |
1148 if (_setjmp (c.jmp)) | 1153 if (_setjmp (c.jmp)) |
1149 { | 1154 { |
1150 return (*hfun) (c.val); | 1155 return (*hfun) (c.val); |
1151 } | 1156 } |
1152 c.next = catchlist; | 1157 c.next = catchlist; |
1182 c.handlerlist = handlerlist; | 1187 c.handlerlist = handlerlist; |
1183 c.lisp_eval_depth = lisp_eval_depth; | 1188 c.lisp_eval_depth = lisp_eval_depth; |
1184 c.pdlcount = specpdl_ptr - specpdl; | 1189 c.pdlcount = specpdl_ptr - specpdl; |
1185 c.poll_suppress_count = poll_suppress_count; | 1190 c.poll_suppress_count = poll_suppress_count; |
1186 c.gcpro = gcprolist; | 1191 c.gcpro = gcprolist; |
1192 c.byte_stack = byte_stack_list; | |
1187 if (_setjmp (c.jmp)) | 1193 if (_setjmp (c.jmp)) |
1188 { | 1194 { |
1189 return (*hfun) (c.val); | 1195 return (*hfun) (c.val); |
1190 } | 1196 } |
1191 c.next = catchlist; | 1197 c.next = catchlist; |