From d4b14648b02cfa6dcee254d37923e1c9ace0b760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Manuel=20de=20Morais=20Santos=20Costa?= Date: Tue, 12 Jan 2010 14:58:48 +0000 Subject: [PATCH] fix confusion with SWI handling of C-backtrackable predicates. --- C/c_interface.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/C/c_interface.c b/C/c_interface.c index 5e68e7640..edcf5a05a 100644 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -1341,10 +1341,12 @@ YAP_ExecuteFirst(PredEntry *pe, CPredicate exec_code) } else if (val == 1) { /* TRUE */ cut_succeed(); } else { - if ((val & REDO_PTR) == REDO_PTR) + /* + if ((val & REDO_PTR) == REDO_PTR) ctx->context = (int *)(val & ~REDO_PTR); - else + else ctx->context = (int *)((val & ~REDO_PTR)>>FRG_REDO_BITS); + */ return TRUE; } } else { @@ -1356,7 +1358,7 @@ YAP_ExecuteFirst(PredEntry *pe, CPredicate exec_code) Int YAP_ExecuteNext(PredEntry *pe, CPredicate exec_code) { - if (pe->PredFlags & SWIEnvPredFlag) { + if (pe->PredFlags & (SWIEnvPredFlag|CArgsPredFlag)) { Int val; CPredicateV codev = (CPredicateV)exec_code; struct foreign_context *ctx = (struct foreign_context *)(&EXTRA_CBACK_ARG(pe->ArityOfPE,1)); @@ -1372,10 +1374,12 @@ YAP_ExecuteNext(PredEntry *pe, CPredicate exec_code) } else if (val == 1) { /* TRUE */ cut_succeed(); } else { - if ((val & REDO_PTR) == REDO_PTR) + /* + if ((val & REDO_PTR) == REDO_PTR) ctx->context = (int *)(val & ~REDO_PTR); - else + else ctx->context = (int *)((val & ~REDO_PTR)>>FRG_REDO_BITS); + */ } return TRUE; }