diff --git a/src/error.c b/src/error.c index c99d9a92438b5f2dd98ab461cd9383521b112a06..cb0f2594f0821b0c137637887f6768385f5152ca 100644 --- a/src/error.c +++ b/src/error.c @@ -19,8 +19,8 @@ ONERROR *onerror_stack=0; my_jmp_buf *init_recovery(JMP_BUF *r) { r->fp=fp; - r->sp=sp; - r->mark_sp=mark_sp; + r->sp=sp-evaluator_stack; + r->mark_sp=mark_sp - mark_stack; r->previous=recoveries; r->onerror=onerror_stack; recoveries=r; @@ -33,7 +33,7 @@ void throw() fatal("No error recovery context.\n"); #ifdef DEBUG - if(sp < recoveries->sp) + if(sp - evaluator_stack < recoveries->sp) fatal("Error in error.\n"); #endif @@ -49,8 +49,8 @@ void throw() fp = fp->parent_frame; } - pop_n_elems(sp - recoveries->sp); - mark_sp = recoveries->mark_sp; + pop_n_elems(sp - evaluator_stack - recoveries->sp); + mark_sp = mark_stack + recoveries->mark_sp; while(recoveries->onerror != onerror_stack) { diff --git a/src/error.h b/src/error.h index 9dce4c7787bf91d8e8d04f0986d6b4aaeea7888f..6934591dc88980e22740a574f7e212a00ae0de2f 100644 --- a/src/error.h +++ b/src/error.h @@ -30,8 +30,8 @@ typedef struct JMP_BUF struct JMP_BUF *previous; my_jmp_buf recovery; struct frame *fp; - struct svalue *sp; - struct svalue **mark_sp; + INT32 sp; + INT32 mark_sp; ONERROR *onerror; } JMP_BUF;