try to maintain a valid ASP even after a longjmp to top-level
This commit is contained in:
parent
2ce4427395
commit
08627579fc
5
C/exec.c
5
C/exec.c
@ -948,10 +948,12 @@ p_pred_goal_expansion_on(void) {
|
|||||||
return PRED_GOAL_EXPANSION_ON;
|
return PRED_GOAL_EXPANSION_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
exec_absmi(int top)
|
exec_absmi(int top)
|
||||||
{
|
{
|
||||||
int lval, out;
|
int lval, out;
|
||||||
|
|
||||||
if (top && (lval = sigsetjmp (Yap_RestartEnv, 1)) != 0) {
|
if (top && (lval = sigsetjmp (Yap_RestartEnv, 1)) != 0) {
|
||||||
switch(lval) {
|
switch(lval) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -965,6 +967,9 @@ exec_absmi(int top)
|
|||||||
restore_B();
|
restore_B();
|
||||||
/* H is not so important, because we're gonna backtrack */
|
/* H is not so important, because we're gonna backtrack */
|
||||||
restore_H();
|
restore_H();
|
||||||
|
/* set stack */
|
||||||
|
ASP = B;
|
||||||
|
Yap_StartSlots();
|
||||||
LOCK(SignalLock);
|
LOCK(SignalLock);
|
||||||
CreepFlag = CalculateStackGap();
|
CreepFlag = CalculateStackGap();
|
||||||
Yap_PrologMode = UserMode;
|
Yap_PrologMode = UserMode;
|
||||||
|
Reference in New Issue
Block a user