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;