more on slot management
This commit is contained in:
parent
b0b74fd0f8
commit
504ad22f92
@ -2238,12 +2238,6 @@ YAP_Error(int myerrno, Term t, char *buf,...)
|
|||||||
Yap_Error(myerrno,t,tmpbuf);
|
Yap_Error(myerrno,t,tmpbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int myputc (wchar_t ch)
|
|
||||||
{
|
|
||||||
putc(ch,stderr);
|
|
||||||
return ch;
|
|
||||||
}
|
|
||||||
|
|
||||||
X_API PredEntry *
|
X_API PredEntry *
|
||||||
YAP_FunctorToPred(Functor func)
|
YAP_FunctorToPred(Functor func)
|
||||||
{
|
{
|
||||||
@ -2279,7 +2273,8 @@ run_emulator(YAP_dogoalinfo *dgi USES_REGS)
|
|||||||
LOCAL_PrologMode = UserMode;
|
LOCAL_PrologMode = UserMode;
|
||||||
out = Yap_absmi(0);
|
out = Yap_absmi(0);
|
||||||
LOCAL_PrologMode = UserCCallMode;
|
LOCAL_PrologMode = UserCCallMode;
|
||||||
Yap_StartSlots(PASS_REGS1);
|
if (out)
|
||||||
|
Yap_StartSlots(PASS_REGS1);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2315,6 +2310,9 @@ YAP_RetryGoal(YAP_dogoalinfo *dgi)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
P = FAILCODE;
|
P = FAILCODE;
|
||||||
|
/* make sure we didn't leave live slots when we backtrack */
|
||||||
|
ASP = (CELL *)B;
|
||||||
|
Yap_PopSlots( PASS_REGS1 );
|
||||||
out = run_emulator(dgi PASS_REGS);
|
out = run_emulator(dgi PASS_REGS);
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
return out;
|
return out;
|
||||||
@ -2366,12 +2364,12 @@ YAP_LeaveGoal(int backtrack, YAP_dogoalinfo *dgi)
|
|||||||
/* ASP should be set to the top of the local stack when we
|
/* ASP should be set to the top of the local stack when we
|
||||||
did the call */
|
did the call */
|
||||||
ASP = B->cp_env;
|
ASP = B->cp_env;
|
||||||
|
Yap_PopSlots(PASS_REGS1);
|
||||||
/* YENV should be set to the current environment */
|
/* YENV should be set to the current environment */
|
||||||
YENV = ENV = (CELL *)((B->cp_env)[E_E]);
|
YENV = ENV = (CELL *)((B->cp_env)[E_E]);
|
||||||
B = B->cp_b;
|
B = B->cp_b;
|
||||||
//SET_BB(B);
|
//SET_BB(B);
|
||||||
HB = PROTECT_FROZEN_H(B);
|
HB = PROTECT_FROZEN_H(B);
|
||||||
Yap_PopSlots( PASS_REGS1 );
|
|
||||||
CP = dgi->cp;
|
CP = dgi->cp;
|
||||||
P = dgi->p;
|
P = dgi->p;
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
@ -3257,14 +3255,14 @@ YAP_Reset(void)
|
|||||||
// Yap_InitYaamRegs( worker_id );
|
// Yap_InitYaamRegs( worker_id );
|
||||||
GLOBAL_Initialised = TRUE;
|
GLOBAL_Initialised = TRUE;
|
||||||
ENV = LCL0;
|
ENV = LCL0;
|
||||||
ASP = B;
|
ASP = (CELL *)B;
|
||||||
/* the first real choice-point will also have AP=FAIL */
|
/* the first real choice-point will also have AP=FAIL */
|
||||||
/* always have an empty slots for people to use */
|
/* always have an empty slots for people to use */
|
||||||
CurSlot = 0;
|
CurSlot = 0;
|
||||||
Yap_StartSlots( PASS_REGS1 );
|
Yap_StartSlots( PASS_REGS1 );
|
||||||
P = CP = YESCODE;
|
P = CP = YESCODE;
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
return(TRUE);
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API void
|
X_API void
|
||||||
|
Reference in New Issue
Block a user