diff --git a/C/absmi.c b/C/absmi.c index 919bb9eaf..40c0f2fd1 100755 --- a/C/absmi.c +++ b/C/absmi.c @@ -623,8 +623,8 @@ stack_overflow( CELL *env, yamop *cp USES_REGS ) if ((Int)(Unsigned(YREG) - Unsigned(HR)) < StackGap( PASS_REGS1 ) || Yap_undo_signal( YAP_STOVF_SIGNAL )) { if (!Yap_gc(((PredEntry *)(S))->ArityOfPE, env, cp)) { - Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); - return 0; + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); + return 0; } return 1; } @@ -783,6 +783,7 @@ interrupt_handler_either( USES_REGS1 ) /* ARG0 has an extra argument for suspended cuts */ ARG2 = XREGS[0]; YENV[E_CB] = (CELL) B; + SET_ASP(YENV, E_CB*sizeof(CELL)); return interrupt_handler( PASS_REGS1 ); } @@ -874,9 +875,7 @@ interrupt_pexecute( PredEntry *pen USES_REGS ) if (Yap_only_has_signal(YAP_CREEP_SIGNAL)) return 2; /* keep on creeping */ S = (CELL *) pen; - ASP = YENV; - if (ASP > (CELL *)PROTECT_FROZEN_B(B)) - ASP = (CELL *)PROTECT_FROZEN_B(B); + SET_ASP(YENV, E_CB*sizeof(CELL)); /* setup GB */ YENV[E_CB] = (CELL) B; if ((v = code_overflow(YENV PASS_REGS)) >= 0) return v; @@ -914,11 +913,7 @@ interrupt_deallocate( USES_REGS1 ) PP = PREVOP(P,p)->u.p.p; ASP = YENV+E_CB; /* cut_e */ - if (YENV <= ASP) { - ASP = YENV-EnvSizeInCells; - } - if (ASP > (CELL *)PROTECT_FROZEN_B(B)) - ASP = (CELL *)PROTECT_FROZEN_B(B); + SET_ASP(YENV, E_CB*sizeof(CELL)); if ((v = code_overflow(YENV PASS_REGS)) >= 0) return v; if (Yap_has_a_signal()) { if (Yap_op_from_opcode(P->opc) == _cut_e) { diff --git a/C/c_interface.c b/C/c_interface.c index 0f8b3874b..54ea251b6 100755 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -2516,9 +2516,13 @@ YAP_RunGoal(Term t) ENV = B->cp_env; ENV = (CELL *)ENV[E_E]; CP = old_CP; + HR = B->cp_h; + TR = B->cp_tr; B = B->cp_b; LOCAL_AllowRestart = FALSE; - ASP = ENV; + SET_ASP(ENV, E_CB*sizeof(CELL)); + // make sure the slots are ok. + ASP = LCL0-(CurSlot+2+IntOfTerm(LCL0[-CurSlot-1])); LOCAL_CurSlot = CurSlot; } RECOVER_MACHINE_REGS(); diff --git a/C/tracer.c b/C/tracer.c index 2b6f18e56..f0ff4ecf3 100755 --- a/C/tracer.c +++ b/C/tracer.c @@ -391,7 +391,7 @@ toggle_low_level_trace(void) static Int p_start_low_level_trace( USES_REGS1 ) { - GLOBAL_stderr = Sopen_file("TRACER_LOG", "w"); + GLOBAL_stderr = Serror; //Sopen_file("TRACER_LOG", "w"); Yap_do_low_level_trace = TRUE; return(TRUE); } diff --git a/H/Regs.h b/H/Regs.h old mode 100644 new mode 100755 index 36266d856..f33da00d2 --- a/H/Regs.h +++ b/H/Regs.h @@ -722,3 +722,12 @@ CalculateStackGap( USES_REGS1 ) CreepFlag = EventFlag = StackGap( PASS_REGS1 ); } +#define SET_ASP(Y,S) SET_ASP__(Y,S PASS_REGS) + +static inline +void SET_ASP__(CELL *yreg, Int sz USES_REGS) { + ASP = (CELL *) (((char *) yreg) + sz); + if (ASP > (CELL *)PROTECT_FROZEN_B(B)) + ASP = (CELL *)PROTECT_FROZEN_B(B); +} + diff --git a/H/YapHandles.h b/H/YapHandles.h old mode 100644 new mode 100755 diff --git a/H/absmi.h b/H/absmi.h old mode 100644 new mode 100755 index 97c363eb7..812c42210 --- a/H/absmi.h +++ b/H/absmi.h @@ -1588,15 +1588,6 @@ prune(choiceptr cp USES_REGS) } } -#define SET_ASP(Y,S) SET_ASP__(Y,S PASS_REGS) - -static inline -void SET_ASP__(CELL *yreg, Int sz USES_REGS) { - ASP = (CELL *) (((char *) yreg) + sz); - if (ASP > (CELL *)PROTECT_FROZEN_B(B)) - ASP = (CELL *)PROTECT_FROZEN_B(B); -} - #if YAPOR #define INITIALIZE_PERMVAR(PTR, V) Bind_Local((PTR), (V)) #else