From 014a0ec5bca7e1cb60367d4eee0f49f0451873b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sat, 19 Jan 2013 22:13:43 +0000 Subject: [PATCH] CurSlot maintenance --- C/c_interface.c | 5 +++-- C/exec.c | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/C/c_interface.c b/C/c_interface.c index d04f6cfbd..e7565722e 100644 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -2510,11 +2510,13 @@ YAP_RunGoalOnce(Term t) Term out; yamop *old_CP = CP; Int oldPrologMode = LOCAL_PrologMode; + Int oldSlot = CurSlot; BACKUP_MACHINE_REGS(); LOCAL_PrologMode = UserMode; out = Yap_RunTopGoal(t); LOCAL_PrologMode = oldPrologMode; + CurSlot = oldSlot; if (!(oldPrologMode & UserCCallMode)) { /* called from top-level */ LOCAL_AllowRestart = FALSE; @@ -2545,10 +2547,9 @@ YAP_RunGoalOnce(Term t) B = cut_pt; } ASP = B->cp_env; - Yap_PopSlots( PASS_REGS1 ); ENV = (CELL *)ASP[E_E]; B = (choiceptr)ASP[E_CB]; -#ifdef DEPTH_LIMIT +#ifdef DEPTH_LIMITxs DEPTH = ASP[E_DEPTH]; #endif P = (yamop *)ASP[E_CP]; diff --git a/C/exec.c b/C/exec.c index c0e0138df..782886158 100644 --- a/C/exec.c +++ b/C/exec.c @@ -1198,6 +1198,7 @@ static int execute_pred(PredEntry *ppe, CELL *pt USES_REGS) { yamop *saved_p, *saved_cp; + Int saved_slot = CurSlot; yamop *CodeAdr; Int out; @@ -1214,6 +1215,7 @@ execute_pred(PredEntry *ppe, CELL *pt USES_REGS) UNLOCK(ppe->PELock); out = do_goal(CodeAdr, ppe->ArityOfPE, pt, FALSE PASS_REGS); } + CurSlot = saved_slot; if (out == 1) { choiceptr cut_B; @@ -1252,13 +1254,12 @@ execute_pred(PredEntry *ppe, CELL *pt USES_REGS) DEPTH= ENV[E_DEPTH]; #endif ENV = (CELL *)(ENV[E_E]); - Yap_StartSlots( PASS_REGS1 ); /* we have failed, and usually we would backtrack to this B, trouble is, we may also have a delayed cut to do */ if (B != NULL) HB = B->cp_h; YENV = ENV; - return(TRUE); + return TRUE; } else if (out == 0) { P = saved_p; CP = saved_cp;