From 0f027df00c6ede01458e70206193721bad6cbf2a Mon Sep 17 00:00:00 2001 From: vsc Date: Tue, 11 Jun 2002 05:43:01 +0000 Subject: [PATCH] fix backtrackable C-interface (patch from Christophe Billard). git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@526 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/absmi.c | 4 ++-- C/c_interface.c | 25 +++++++++++-------------- H/Yapproto.h | 4 ++-- changes4.3.html | 2 ++ library/system/sys.c | 4 +++- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/C/absmi.c b/C/absmi.c index f01b2b1a6..493782721 100644 --- a/C/absmi.c +++ b/C/absmi.c @@ -5760,7 +5760,7 @@ absmi(int inp) saveregs(); save_machine_regs(); - SREG = (CELL *) YapExecute(p); + SREG = (CELL *) YapExecute(p, (CPredicate)(p->TrueCodeOfPred)); } restore_machine_regs(); @@ -5888,7 +5888,7 @@ absmi(int inp) ASP = YENV; saveregs(); save_machine_regs(); - SREG = (CELL *) YapExecute(PREG->u.lds.p); + SREG = (CELL *) YapExecute(PREG->u.lds.p, (CPredicate)(PREG->u.lds.d)); restore_machine_regs(); setregs(); if (!SREG) { diff --git a/C/c_interface.c b/C/c_interface.c index d4586aa3a..1f2d357fb 100644 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -74,7 +74,6 @@ X_API Int STD_PROTO(Yapcut_fail,(void)); X_API Int STD_PROTO(Yapcut_succeed,(void)); X_API Int STD_PROTO(YapUnify,(Term,Term)); X_API Int STD_PROTO(YapUnify,(Term,Term)); - Int STD_PROTO(YapExecute,(PredEntry *)); X_API int STD_PROTO(YapReset,(void)); X_API Int STD_PROTO(YapInit,(yap_init_args *)); X_API Int STD_PROTO(YapFastInit,(char *)); @@ -482,37 +481,36 @@ typedef Int (*CPredicate7)(long,long,long,long,long,long,long); typedef Int (*CPredicate8)(long,long,long,long,long,long,long,long); Int -YapExecute(PredEntry *pe) +YapExecute(PredEntry *pe, CPredicate exec_code) { if (pe->PredFlags & CArgsPredFlag) { - CODEADDR code = pe->TrueCodeOfPred; switch (pe->ArityOfPE) { case 0: { - CPredicate code0 = (CPredicate)code; + CPredicate code0 = exec_code; return ((code0)()); } case 1: { - CPredicate1 code1 = (CPredicate1)code; + CPredicate1 code1 = (CPredicate1)exec_code; return ((code1)(YapInitSlot(Deref(ARG1)))); } case 2: { - CPredicate2 code2 = (CPredicate2)code; + CPredicate2 code2 = (CPredicate2)exec_code; return ((code2)(YapInitSlot(Deref(ARG1)), YapInitSlot(Deref(ARG2)))); } case 3: { - CPredicate3 code3 = (CPredicate3)code; + CPredicate3 code3 = (CPredicate3)exec_code; return ((code3)(YapInitSlot(Deref(ARG1)), YapInitSlot(Deref(ARG2)), YapInitSlot(Deref(ARG3)))); } case 4: { - CPredicate4 code4 = (CPredicate4)code; + CPredicate4 code4 = (CPredicate4)exec_code; return ((code4)(YapInitSlot(Deref(ARG1)), YapInitSlot(Deref(ARG2)), YapInitSlot(Deref(ARG3)), @@ -520,7 +518,7 @@ YapExecute(PredEntry *pe) } case 5: { - CPredicate5 code5 = (CPredicate5)code; + CPredicate5 code5 = (CPredicate5)exec_code; return ((code5)(YapInitSlot(Deref(ARG1)), YapInitSlot(Deref(ARG2)), YapInitSlot(Deref(ARG3)), @@ -528,7 +526,7 @@ YapExecute(PredEntry *pe) } case 6: { - CPredicate6 code6 = (CPredicate6)code; + CPredicate6 code6 = (CPredicate6)exec_code; return ((code6)(YapInitSlot(Deref(ARG1)), YapInitSlot(Deref(ARG2)), YapInitSlot(Deref(ARG3)), @@ -538,7 +536,7 @@ YapExecute(PredEntry *pe) } case 7: { - CPredicate7 code7 = (CPredicate7)code; + CPredicate7 code7 = (CPredicate7)exec_code; return ((code7)(YapInitSlot(Deref(ARG1)), YapInitSlot(Deref(ARG2)), YapInitSlot(Deref(ARG3)), @@ -549,7 +547,7 @@ YapExecute(PredEntry *pe) } case 8: { - CPredicate8 code8 = (CPredicate8)code; + CPredicate8 code8 = (CPredicate8)exec_code; return ((code8)(YapInitSlot(Deref(ARG1)), YapInitSlot(Deref(ARG2)), YapInitSlot(Deref(ARG3)), @@ -563,8 +561,7 @@ YapExecute(PredEntry *pe) return(FALSE); } } else { - CPredicate code = (CPredicate)(pe->TrueCodeOfPred); - return((code)()); + return((exec_code)()); } } diff --git a/H/Yapproto.h b/H/Yapproto.h index 1934d2981..b807c9a23 100644 --- a/H/Yapproto.h +++ b/H/Yapproto.h @@ -10,7 +10,7 @@ * File: Yap.proto * * mods: * * comments: Function declarations for YAP * -* version: $Id: Yapproto.h,v 1.20 2002-06-05 03:59:50 vsc Exp $ * +* version: $Id: Yapproto.h,v 1.21 2002-06-11 05:43:01 vsc Exp $ * *************************************************************************/ /* prototype file for Yap */ @@ -104,7 +104,7 @@ void STD_PROTO(InitBBPreds,(void)); void STD_PROTO(InitBigNums,(void)); /* c_interface.c */ -Int STD_PROTO(YapExecute,(struct pred_entry *)); +Int STD_PROTO(YapExecute,(struct pred_entry *, CPredicate)); /* cdmgr.c */ void STD_PROTO(mark_as_fast,(Term)); diff --git a/changes4.3.html b/changes4.3.html index 53f98ba45..df7a645a7 100644 --- a/changes4.3.html +++ b/changes4.3.html @@ -16,6 +16,8 @@

Yap-4.3.23: