yaam knows not about handles, and they do not know about the yaam

This commit is contained in:
Vitor Santos Costa 2013-11-20 22:23:29 +00:00
parent ee179f316a
commit 6ba13c7b88

View File

@ -1089,7 +1089,6 @@ exec_absmi(int top USES_REGS)
restore_H(); restore_H();
/* set stack */ /* set stack */
ASP = (CELL *)PROTECT_FROZEN_B(B); ASP = (CELL *)PROTECT_FROZEN_B(B);
Yap_PopSlots( PASS_REGS1 );
LOCK(LOCAL_SignalLock); LOCK(LOCAL_SignalLock);
/* forget any signals active, we're reborne */ /* forget any signals active, we're reborne */
LOCAL_ActiveSignals = 0; LOCAL_ActiveSignals = 0;
@ -1119,7 +1118,6 @@ exec_absmi(int top USES_REGS)
LOCAL_PrologMode = UserMode; LOCAL_PrologMode = UserMode;
} }
} else { } else {
Yap_CloseSlots( PASS_REGS1 );
LOCAL_PrologMode = UserMode; LOCAL_PrologMode = UserMode;
} }
YENV = ASP; YENV = ASP;
@ -1210,7 +1208,6 @@ static int
execute_pred(PredEntry *ppe, CELL *pt USES_REGS) execute_pred(PredEntry *ppe, CELL *pt USES_REGS)
{ {
yamop *saved_p, *saved_cp; yamop *saved_p, *saved_cp;
Int saved_slot = CurSlot;
yamop *CodeAdr; yamop *CodeAdr;
Int out; Int out;
@ -1227,7 +1224,6 @@ execute_pred(PredEntry *ppe, CELL *pt USES_REGS)
UNLOCK(ppe->PELock); UNLOCK(ppe->PELock);
out = do_goal(CodeAdr, ppe->ArityOfPE, pt, FALSE PASS_REGS); out = do_goal(CodeAdr, ppe->ArityOfPE, pt, FALSE PASS_REGS);
} }
CurSlot = saved_slot;
if (out == 1) { if (out == 1) {
choiceptr cut_B; choiceptr cut_B;
@ -1739,6 +1735,7 @@ void
Yap_InitYaamRegs( int myworker_id ) Yap_InitYaamRegs( int myworker_id )
{ {
Term h0var; Term h0var;
// getchar();
#if PUSH_REGS #if PUSH_REGS
/* Guarantee that after a longjmp we go back to the original abstract /* Guarantee that after a longjmp we go back to the original abstract
machine registers */ machine registers */
@ -1783,17 +1780,18 @@ Yap_InitYaamRegs( int myworker_id )
CreepFlag = CalculateStackGap(); CreepFlag = CalculateStackGap();
/* 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;
REMOTE_GlobalArena(myworker_id) = TermNil; REMOTE_GlobalArena(myworker_id) = TermNil;
h0var = MkVarTerm();
#if defined(YAPOR) || defined(THREADS) #if defined(YAPOR) || defined(THREADS)
LOCAL = REMOTE(myworker_id); LOCAL = REMOTE(myworker_id);
worker_id = myworker_id; worker_id = myworker_id;
#endif /* THREADS */ #endif /* THREADS */
#if COROUTINING #if COROUTINING
REMOTE_WokenGoals(myworker_id) = Yap_NewTimedVar(TermNil); REMOTE_WokenGoals(myworker_id) = Yap_NewTimedVar(TermNil);
h0var = MkVarTerm();
REMOTE_AttsMutableList(myworker_id) = Yap_NewTimedVar(h0var); REMOTE_AttsMutableList(myworker_id) = Yap_NewTimedVar(h0var);
#endif #endif
REMOTE_CurSlot(myworker_id) = 0;
h0var = MkVarTerm();
REMOTE_GcGeneration(myworker_id) = Yap_NewTimedVar(h0var); REMOTE_GcGeneration(myworker_id) = Yap_NewTimedVar(h0var);
REMOTE_GcCurrentPhase(myworker_id) = 0L; REMOTE_GcCurrentPhase(myworker_id) = 0L;
REMOTE_GcPhase(myworker_id) = Yap_NewTimedVar(MkIntTerm(REMOTE_GcCurrentPhase(myworker_id))); REMOTE_GcPhase(myworker_id) = Yap_NewTimedVar(MkIntTerm(REMOTE_GcCurrentPhase(myworker_id)));
@ -1810,7 +1808,6 @@ Yap_InitYaamRegs( int myworker_id )
Yap_REGS.MYDDAS_GLOBAL_POINTER = NULL; Yap_REGS.MYDDAS_GLOBAL_POINTER = NULL;
#endif #endif
Yap_PrepGoal(0, NULL, NULL PASS_REGS); Yap_PrepGoal(0, NULL, NULL PASS_REGS);
Yap_StartSlots( PASS_REGS1 );
#ifdef TABLING #ifdef TABLING
/* ensure that LOCAL_top_dep_fr is always valid */ /* ensure that LOCAL_top_dep_fr is always valid */
if (REMOTE_top_dep_fr(myworker_id)) if (REMOTE_top_dep_fr(myworker_id))