Merge branch 'master' of ssh://yap.git.sourceforge.net/gitroot/yap/yap-6.3

This commit is contained in:
Vitor Santos Costa 2011-10-04 10:44:12 +01:00
commit 185495c0ad
13 changed files with 235 additions and 204 deletions

218
C/absmi.c
View File

@ -806,7 +806,7 @@ Yap_absmi(int inp)
saveregs(); saveregs();
/* do a garbage collection first to check if we can recover memory */ /* do a garbage collection first to check if we can recover memory */
if (!Yap_growheap(FALSE, 0, NULL)) { if (!Yap_growheap(FALSE, 0, NULL)) {
Yap_Error(OUT_OF_HEAP_ERROR, TermNil, "YAP failed to grow heap: %s", LOCAL_ErrorMessage); Yap_NilError(OUT_OF_HEAP_ERROR, "YAP failed to grow heap: %s", LOCAL_ErrorMessage);
setregs(); setregs();
FAIL(); FAIL();
} }
@ -838,7 +838,7 @@ Yap_absmi(int inp)
cut_b = LCL0-(CELL *)(ASP[E_CB]); cut_b = LCL0-(CELL *)(ASP[E_CB]);
saveregs(); saveregs();
if(!Yap_growtrail (0, FALSE)) { if(!Yap_growtrail (0, FALSE)) {
Yap_Error(OUT_OF_TRAIL_ERROR,TermNil,"YAP failed to reserve %ld bytes in growtrail",sizeof(CELL) * K16); Yap_NilError(OUT_OF_TRAIL_ERROR,"YAP failed to reserve %ld bytes in growtrail",sizeof(CELL) * K16);
setregs(); setregs();
FAIL(); FAIL();
} }
@ -902,9 +902,9 @@ Yap_absmi(int inp)
#ifdef YAPOR #ifdef YAPOR
SCH_set_load(B_YREG); SCH_set_load(B_YREG);
#endif /* YAPOR */ #endif /* YAPOR */
PREG = NEXTOP(PREG, Otapl);
SET_BB(B_YREG); SET_BB(B_YREG);
ENDCACHE_Y(); ENDCACHE_Y();
PREG = NEXTOP(PREG, Otapl);
GONext(); GONext();
ENDOp(); ENDOp();
@ -1189,14 +1189,14 @@ Yap_absmi(int inp)
LOCAL_ReductionsCounter--; LOCAL_ReductionsCounter--;
if (LOCAL_ReductionsCounter == 0 && LOCAL_ReductionsCounterOn) { if (LOCAL_ReductionsCounter == 0 && LOCAL_ReductionsCounterOn) {
saveregs(); saveregs();
Yap_Error(CALL_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(CALL_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
LOCAL_PredEntriesCounter--; LOCAL_PredEntriesCounter--;
if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) {
saveregs(); saveregs();
Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -1214,7 +1214,7 @@ Yap_absmi(int inp)
/* act as if we had backtracked */ /* act as if we had backtracked */
ENV = B->cp_env; ENV = B->cp_env;
saveregs(); saveregs();
Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(RETRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -1222,7 +1222,7 @@ Yap_absmi(int inp)
if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) {
ENV = B->cp_env; ENV = B->cp_env;
saveregs(); saveregs();
Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -1251,14 +1251,14 @@ Yap_absmi(int inp)
LOCAL_RetriesCounter--; LOCAL_RetriesCounter--;
if (LOCAL_RetriesCounter == 0 && LOCAL_RetriesCounterOn) { if (LOCAL_RetriesCounter == 0 && LOCAL_RetriesCounterOn) {
saveregs(); saveregs();
Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(RETRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
LOCAL_PredEntriesCounter--; LOCAL_PredEntriesCounter--;
if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) {
saveregs(); saveregs();
Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -1295,14 +1295,14 @@ Yap_absmi(int inp)
LOCAL_RetriesCounter--; LOCAL_RetriesCounter--;
if (LOCAL_RetriesCounter == 0) { if (LOCAL_RetriesCounter == 0) {
saveregs(); saveregs();
Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(RETRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
LOCAL_PredEntriesCounter--; LOCAL_PredEntriesCounter--;
if (LOCAL_PredEntriesCounter == 0) { if (LOCAL_PredEntriesCounter == 0) {
saveregs(); saveregs();
Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -1330,14 +1330,14 @@ Yap_absmi(int inp)
LOCAL_RetriesCounter--; LOCAL_RetriesCounter--;
if (LOCAL_RetriesCounter == 0) { if (LOCAL_RetriesCounter == 0) {
saveregs(); saveregs();
Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(RETRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
LOCAL_PredEntriesCounter--; LOCAL_PredEntriesCounter--;
if (LOCAL_PredEntriesCounter == 0) { if (LOCAL_PredEntriesCounter == 0) {
saveregs(); saveregs();
Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -1375,14 +1375,14 @@ Yap_absmi(int inp)
LOCAL_RetriesCounter--; LOCAL_RetriesCounter--;
if (LOCAL_RetriesCounter == 0) { if (LOCAL_RetriesCounter == 0) {
saveregs(); saveregs();
Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(RETRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
LOCAL_PredEntriesCounter--; LOCAL_PredEntriesCounter--;
if (LOCAL_PredEntriesCounter == 0) { if (LOCAL_PredEntriesCounter == 0) {
saveregs(); saveregs();
Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -1544,7 +1544,7 @@ Yap_absmi(int inp)
} }
#endif #endif
PREG = NEXTOP(PREG, L); PREG = NEXTOP(PREG, L);
GONext(); JMPNext();
ENDBOp(); ENDBOp();
/* copy database term */ /* copy database term */
@ -1563,7 +1563,7 @@ Yap_absmi(int inp)
#if defined(YAPOR) || defined(THREADS) #if defined(YAPOR) || defined(THREADS)
PP = NULL; PP = NULL;
#endif #endif
Yap_Error(OUT_OF_ATTVARS_ERROR, TermNil, LOCAL_ErrorMessage); Yap_NilError(OUT_OF_ATTVARS_ERROR, LOCAL_ErrorMessage);
FAIL(); FAIL();
} }
} else { } else {
@ -1573,7 +1573,7 @@ Yap_absmi(int inp)
#if defined(YAPOR) || defined(THREADS) #if defined(YAPOR) || defined(THREADS)
PP = NULL; PP = NULL;
#endif #endif
Yap_Error(OUT_OF_STACK_ERROR, TermNil, LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR, LOCAL_ErrorMessage);
FAIL(); FAIL();
} }
} }
@ -1618,7 +1618,7 @@ Yap_absmi(int inp)
#ifdef DEPTH_LIMIT #ifdef DEPTH_LIMIT
DEPTH = YREG[E_DEPTH]; DEPTH = YREG[E_DEPTH];
#endif #endif
GONext(); JMPNext();
ENDBOp(); ENDBOp();
@ -1670,7 +1670,7 @@ Yap_absmi(int inp)
#ifdef DEPTH_LIMIT #ifdef DEPTH_LIMIT
DEPTH = YREG[E_DEPTH]; DEPTH = YREG[E_DEPTH];
#endif #endif
GONext(); JMPNext();
ENDBOp(); ENDBOp();
@ -1693,7 +1693,7 @@ Yap_absmi(int inp)
PREG = NEXTOP(PREG,Osbpa); PREG = NEXTOP(PREG,Osbpa);
saveregs(); saveregs();
if (!Yap_gcl(sz, arity, YENV, PREG)) { if (!Yap_gcl(sz, arity, YENV, PREG)) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
setregs(); setregs();
FAIL(); FAIL();
} else { } else {
@ -1783,14 +1783,14 @@ Yap_absmi(int inp)
LOCAL_RetriesCounter--; LOCAL_RetriesCounter--;
if (LOCAL_RetriesCounter == 0) { if (LOCAL_RetriesCounter == 0) {
saveregs(); saveregs();
Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(RETRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
LOCAL_PredEntriesCounter--; LOCAL_PredEntriesCounter--;
if (LOCAL_PredEntriesCounter == 0) { if (LOCAL_PredEntriesCounter == 0) {
saveregs(); saveregs();
Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -2023,7 +2023,7 @@ Yap_absmi(int inp)
#endif /* LOW_LEVEL_TRACER */ #endif /* LOW_LEVEL_TRACER */
#ifdef FROZEN_STACKS #ifdef FROZEN_STACKS
#ifdef YAPOR_SBA #ifdef YAPOR_SBA
if (pt0 < TR_FZ || pt0 > (tr_fr_ptr)LOCAL_TrailTop) if (pt0 < TR_FZ || pt0 > (ADDR)CurrentTrailTop+MinTrailGap)
#else #else
if (pt0 < TR_FZ) if (pt0 < TR_FZ)
#endif /* YAPOR_SBA */ #endif /* YAPOR_SBA */
@ -2073,7 +2073,7 @@ Yap_absmi(int inp)
#ifdef YAPOR_SBA #ifdef YAPOR_SBA
(ADDR) pt1 >= HeapTop (ADDR) pt1 >= HeapTop
#else #else
IN_BETWEEN(LOCAL_TrailBase, pt1, LOCAL_TrailTop) IN_BETWEEN(LOCAL_TrailBase, pt1, (ADDR)CurrentTrailTop+MinTrailGap)
#endif /* YAPOR_SBA */ #endif /* YAPOR_SBA */
) )
{ {
@ -2617,7 +2617,7 @@ Yap_absmi(int inp)
SET_ASP(YREG, PREG->u.Osbpp.s); SET_ASP(YREG, PREG->u.Osbpp.s);
saveregs(); saveregs();
if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, YREG, NEXTOP(PREG, Osbpp))) { if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, YREG, NEXTOP(PREG, Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
} }
setregs(); setregs();
@ -2646,7 +2646,7 @@ Yap_absmi(int inp)
!(LOCAL_ActiveSignals & ~YAP_CREEP_SIGNAL)) || !(LOCAL_ActiveSignals & ~YAP_CREEP_SIGNAL)) ||
(PREG->opc != Yap_opcode(_procceed) && (PREG->opc != Yap_opcode(_procceed) &&
PREG->opc != Yap_opcode(_cut_e))) { PREG->opc != Yap_opcode(_cut_e))) {
GONext(); JMPNext();
} }
PP = PREVOP(PREG,p)->u.p.p; PP = PREVOP(PREG,p)->u.p.p;
ASP = YREG+E_CB; ASP = YREG+E_CB;
@ -2671,7 +2671,7 @@ Yap_absmi(int inp)
} }
saveregs(); saveregs();
if (!Yap_gc(0, ENV, CPREG)) { if (!Yap_gc(0, ENV, CPREG)) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
} }
setregs(); setregs();
SREG = ASP; SREG = ASP;
@ -2850,7 +2850,7 @@ Yap_absmi(int inp)
ASP = (CELL *)PROTECT_FROZEN_B(B); ASP = (CELL *)PROTECT_FROZEN_B(B);
saveregs(); saveregs();
if (!Yap_gc(0, YREG, NEXTOP(PREG, Osbpp))) { if (!Yap_gc(0, YREG, NEXTOP(PREG, Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
} }
setregs(); setregs();
JMPNext(); JMPNext();
@ -2975,7 +2975,7 @@ Yap_absmi(int inp)
ASP = (CELL *)PROTECT_FROZEN_B(B); ASP = (CELL *)PROTECT_FROZEN_B(B);
saveregs(); saveregs();
if (!Yap_gc(((PredEntry *)(SREG))->ArityOfPE, (CELL *)YREG[E_E], (yamop *)YREG[E_CP])) { if (!Yap_gc(((PredEntry *)(SREG))->ArityOfPE, (CELL *)YREG[E_E], (yamop *)YREG[E_CP])) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
} }
setregs(); setregs();
/* hopefully, gc will succeeded, and we will retry /* hopefully, gc will succeeded, and we will retry
@ -2997,7 +2997,7 @@ Yap_absmi(int inp)
ASP = (CELL *)PROTECT_FROZEN_B(B); ASP = (CELL *)PROTECT_FROZEN_B(B);
saveregs(); saveregs();
if (!Yap_gc(((PredEntry *)(SREG))->ArityOfPE, ENV, CPREG)) { if (!Yap_gc(((PredEntry *)(SREG))->ArityOfPE, ENV, CPREG)) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
} }
setregs(); setregs();
/* hopefully, gc will succeeded, and we will retry /* hopefully, gc will succeeded, and we will retry
@ -3122,7 +3122,7 @@ Yap_absmi(int inp)
ARG2 = Yap_ListOfWokenGoals(); ARG2 = Yap_ListOfWokenGoals();
SREG = (CELL *) (WakeUpCode); SREG = (CELL *) (WakeUpCode);
/* no more goals to wake up */ /* no more goals to wake up */
Yap_UpdateTimedVar(LOCAL_WokenGoals, TermNil); Yap_UpdateTimedVar(LOCAL_WokenGoals,TermNil);
} else } else
#endif #endif
{ {
@ -5445,9 +5445,11 @@ Yap_absmi(int inp)
ENDOp(); ENDOp();
Op(unify_void, o); Op(unify_void, o);
SREG++; START_PREFETCH(o);
PREG = NEXTOP(PREG, o); PREG = NEXTOP(PREG, o);
SREG++;
GONext(); GONext();
END_PREFETCH();
ENDOp(); ENDOp();
OpW(unify_void_write, o); OpW(unify_void_write, o);
@ -7570,7 +7572,7 @@ Yap_absmi(int inp)
if (LOCAL_ReductionsCounter == 0 && LOCAL_ReductionsCounterOn) { if (LOCAL_ReductionsCounter == 0 && LOCAL_ReductionsCounterOn) {
UNLOCKPE(20,pe); UNLOCKPE(20,pe);
saveregs(); saveregs();
Yap_Error(CALL_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(CALL_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -7578,7 +7580,7 @@ Yap_absmi(int inp)
if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) {
UNLOCKPE(21,pe); UNLOCKPE(21,pe);
saveregs(); saveregs();
Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,"");
setregs(); setregs();
JMPNext(); JMPNext();
} }
@ -7902,7 +7904,7 @@ Yap_absmi(int inp)
} }
#endif #endif
} }
GONext(); JMPNext();
ENDBOp(); ENDBOp();
BOp(try_logical, OtaLl); BOp(try_logical, OtaLl);
@ -8164,7 +8166,7 @@ Yap_absmi(int inp)
deref_head(d0, swlnl_unk_p); deref_head(d0, swlnl_unk_p);
/* non variable */ /* non variable */
swlnl_nvar_p: swlnl_nvar_p:
if (IsPairTerm(d0)) { if (__builtin_expect(IsPairTerm(d0),1)) {
/* pair */ /* pair */
#endif #endif
copy_jmp_address(PREG->u.ollll.l1); copy_jmp_address(PREG->u.ollll.l1);
@ -8559,7 +8561,7 @@ Yap_absmi(int inp)
} }
PREG = NEXTOP(PREG, aFlp); PREG = NEXTOP(PREG, aFlp);
GONext(); JMPNext();
ENDBOp(); ENDBOp();
@ -9117,7 +9119,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, plus_vv_unk, plus_vv_nvar); deref_body(d0, pt0, plus_vv_unk, plus_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is _+B"); Yap_NilError(INSTANTIATION_ERROR, "X is _+B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9125,7 +9127,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, plus_vv_nvar_unk, plus_vv_nvar_nvar); deref_body(d1, pt0, plus_vv_nvar_unk, plus_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+B"); Yap_NilError(INSTANTIATION_ERROR, "X is A+B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9163,7 +9165,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, plus_vc_unk, plus_vc_nvar); deref_body(d0, pt0, plus_vc_unk, plus_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+ " Int_FORMAT, PREG->u.xxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is A+ " Int_FORMAT, PREG->u.xxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9206,7 +9208,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, plus_y_vv_unk, plus_y_vv_nvar); deref_body(d0, pt0, plus_y_vv_unk, plus_y_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+B"); Yap_NilError(INSTANTIATION_ERROR, "X is A+B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9214,7 +9216,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, plus_y_vv_nvar_unk, plus_y_vv_nvar_nvar); deref_body(d1, pt0, plus_y_vv_nvar_unk, plus_y_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+B"); Yap_NilError(INSTANTIATION_ERROR, "X is A+B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9255,7 +9257,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, plus_y_vc_unk, plus_y_vc_nvar); deref_body(d0, pt0, plus_y_vc_unk, plus_y_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+ " Int_FORMAT, PREG->u.yxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is A+ " Int_FORMAT, PREG->u.yxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9295,7 +9297,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, minus_vv_unk, minus_vv_nvar); deref_body(d0, pt0, minus_vv_unk, minus_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B"); Yap_NilError(INSTANTIATION_ERROR, "X is A-B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9303,7 +9305,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, minus_vv_nvar_unk, minus_vv_nvar_nvar); deref_body(d1, pt0, minus_vv_nvar_unk, minus_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B"); Yap_NilError(INSTANTIATION_ERROR, "X is A-B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9341,7 +9343,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, minus_cv_unk, minus_cv_nvar); deref_body(d0, pt0, minus_cv_unk, minus_cv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "-A", PREG->u.xxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "-A", PREG->u.xxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9384,7 +9386,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, minus_y_vv_unk, minus_y_vv_nvar); deref_body(d0, pt0, minus_y_vv_unk, minus_y_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B"); Yap_NilError(INSTANTIATION_ERROR, "X is A-B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9392,7 +9394,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, minus_y_vv_nvar_unk, minus_y_vv_nvar_nvar); deref_body(d1, pt0, minus_y_vv_nvar_unk, minus_y_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B"); Yap_NilError(INSTANTIATION_ERROR, "X is A-B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9433,7 +9435,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, minus_y_cv_unk, minus_y_cv_nvar); deref_body(d0, pt0, minus_y_cv_unk, minus_y_cv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "-A", PREG->u.yxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "-A", PREG->u.yxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9473,7 +9475,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, times_vv_unk, times_vv_nvar); deref_body(d0, pt0, times_vv_unk, times_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B"); Yap_NilError(INSTANTIATION_ERROR, "X is A*B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9481,7 +9483,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, times_vv_nvar_unk, times_vv_nvar_nvar); deref_body(d1, pt0, times_vv_nvar_unk, times_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B"); Yap_NilError(INSTANTIATION_ERROR, "X is A*B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9519,7 +9521,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, times_vc_unk, times_vc_nvar); deref_body(d0, pt0, times_vc_unk, times_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A* " Int_FORMAT, PREG->u.xxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is A* " Int_FORMAT, PREG->u.xxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9562,7 +9564,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, times_y_vv_unk, times_y_vv_nvar); deref_body(d0, pt0, times_y_vv_unk, times_y_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B"); Yap_NilError(INSTANTIATION_ERROR, "X is A*B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9570,7 +9572,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, times_y_vv_nvar_unk, times_y_vv_nvar_nvar); deref_body(d1, pt0, times_y_vv_nvar_unk, times_y_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B"); Yap_NilError(INSTANTIATION_ERROR, "X is A*B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9611,7 +9613,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, times_y_vc_unk, times_y_vc_nvar); deref_body(d0, pt0, times_y_vc_unk, times_y_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A* " Int_FORMAT, PREG->u.yxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is A* " Int_FORMAT, PREG->u.yxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9634,7 +9636,7 @@ Yap_absmi(int inp)
Int div = IntOfTerm(d1); Int div = IntOfTerm(d1);
if (div == 0) { if (div == 0) {
saveregs(); saveregs();
Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR,TermNil,"// /2"); Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2");
setregs(); setregs();
FAIL(); FAIL();
} }
@ -9658,7 +9660,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_vv_unk, div_vv_nvar); deref_body(d0, pt0, div_vv_unk, div_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9666,7 +9668,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, div_vv_nvar_unk, div_vv_nvar_nvar); deref_body(d1, pt0, div_vv_nvar_unk, div_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9704,7 +9706,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_vc_unk, div_vc_nvar); deref_body(d0, pt0, div_vc_unk, div_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9723,7 +9725,7 @@ Yap_absmi(int inp)
Int div = IntOfTerm(d0); Int div = IntOfTerm(d0);
if (div == 0){ if (div == 0){
saveregs(); saveregs();
Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR,TermNil,"// /2"); Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2");
setregs(); setregs();
FAIL(); FAIL();
} }
@ -9747,7 +9749,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_cv_unk, div_cv_nvar); deref_body(d0, pt0, div_cv_unk, div_cv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "// A", PREG->u.xxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "// A", PREG->u.xxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9770,7 +9772,7 @@ Yap_absmi(int inp)
Int div = IntOfTerm(d1); Int div = IntOfTerm(d1);
if (div == 0) { if (div == 0) {
saveregs(); saveregs();
Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR,TermNil,"// /2"); Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2");
setregs(); setregs();
FAIL(); FAIL();
} }
@ -9797,7 +9799,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_y_vv_unk, div_y_vv_nvar); deref_body(d0, pt0, div_y_vv_unk, div_y_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9805,7 +9807,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, div_y_vv_nvar_unk, div_y_vv_nvar_nvar); deref_body(d1, pt0, div_y_vv_nvar_unk, div_y_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9846,7 +9848,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_y_vc_unk, div_y_vc_nvar); deref_body(d0, pt0, div_y_vc_unk, div_y_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9865,7 +9867,7 @@ Yap_absmi(int inp)
Int div = IntOfTerm(d0); Int div = IntOfTerm(d0);
if (div == 0) { if (div == 0) {
saveregs(); saveregs();
Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR,TermNil,"// /2"); Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2");
setregs(); setregs();
FAIL(); FAIL();
} }
@ -9893,7 +9895,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_y_cv_unk, div_y_cv_nvar); deref_body(d0, pt0, div_y_cv_unk, div_y_cv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "// A", PREG->u.yxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "// A", PREG->u.yxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9934,7 +9936,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, and_vv_unk, and_vv_nvar); deref_body(d0, pt0, and_vv_unk, and_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B"); Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9942,7 +9944,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, and_vv_nvar_unk, and_vv_nvar_nvar); deref_body(d1, pt0, and_vv_nvar_unk, and_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B"); Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -9980,7 +9982,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, and_vc_unk, and_vc_nvar); deref_body(d0, pt0, and_vc_unk, and_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A /\\ " Int_FORMAT , PREG->u.xxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is A /\\ " Int_FORMAT , PREG->u.xxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10023,7 +10025,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, and_y_vv_unk, and_y_vv_nvar); deref_body(d0, pt0, and_y_vv_unk, and_y_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B"); Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10031,7 +10033,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, and_y_vv_nvar_unk, and_y_vv_nvar_nvar); deref_body(d1, pt0, and_y_vv_nvar_unk, and_y_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B"); Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10072,7 +10074,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, and_y_vc_unk, and_y_vc_nvar); deref_body(d0, pt0, and_y_vc_unk, and_y_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A /\\ " Int_FORMAT , PREG->u.yxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is A /\\ " Int_FORMAT , PREG->u.yxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10113,7 +10115,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, or_vv_unk, or_vv_nvar); deref_body(d0, pt0, or_vv_unk, or_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B"); Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10121,7 +10123,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, or_vv_nvar_unk, or_vv_nvar_nvar); deref_body(d1, pt0, or_vv_nvar_unk, or_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B"); Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10158,7 +10160,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, or_vc_unk, or_vc_nvar); deref_body(d0, pt0, or_vc_unk, or_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A \\/ " Int_FORMAT , PREG->u.xxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is A \\/ " Int_FORMAT , PREG->u.xxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10201,7 +10203,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, or_y_vv_unk, or_y_vv_nvar); deref_body(d0, pt0, or_y_vv_unk, or_y_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B"); Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10209,7 +10211,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, or_y_vv_nvar_unk, or_y_vv_nvar_nvar); deref_body(d1, pt0, or_y_vv_nvar_unk, or_y_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B"); Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10250,7 +10252,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, or_y_vc_unk, or_y_vc_nvar); deref_body(d0, pt0, or_y_vc_unk, or_y_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A \\/ " Int_FORMAT , PREG->u.yxn.c); Yap_NilError(INSTANTIATION_ERROR, "X is A \\/ " Int_FORMAT , PREG->u.yxn.c);
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10294,7 +10296,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_vv_unk, sll_vv_nvar); deref_body(d0, pt0, sll_vv_unk, sll_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A<<B"); Yap_NilError(INSTANTIATION_ERROR, "X is A<<B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10302,7 +10304,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, sll_vv_nvar_unk, sll_vv_nvar_nvar); deref_body(d1, pt0, sll_vv_nvar_unk, sll_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A<<B"); Yap_NilError(INSTANTIATION_ERROR, "X is A<<B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10340,7 +10342,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_vc_unk, sll_vc_nvar); deref_body(d0, pt0, sll_vc_unk, sll_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A<<B"); Yap_NilError(INSTANTIATION_ERROR, "X is A<<B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10381,7 +10383,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_cv_unk, sll_cv_nvar); deref_body(d0, pt0, sll_cv_unk, sll_cv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A<<B"); Yap_NilError(INSTANTIATION_ERROR, "X is A<<B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10428,7 +10430,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_y_vv_unk, sll_y_vv_nvar); deref_body(d0, pt0, sll_y_vv_unk, sll_y_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A<<B"); Yap_NilError(INSTANTIATION_ERROR, "X is A<<B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10436,7 +10438,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, sll_y_vv_nvar_unk, sll_y_vv_nvar_nvar); deref_body(d1, pt0, sll_y_vv_nvar_unk, sll_y_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A<<B"); Yap_NilError(INSTANTIATION_ERROR, "X is A<<B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10477,7 +10479,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_y_vc_unk, sll_y_vc_nvar); deref_body(d0, pt0, sll_y_vc_unk, sll_y_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A<<B"); Yap_NilError(INSTANTIATION_ERROR, "X is A<<B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10522,7 +10524,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_y_cv_unk, sll_y_cv_nvar); deref_body(d0, pt0, sll_y_cv_unk, sll_y_cv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A<<B"); Yap_NilError(INSTANTIATION_ERROR, "X is A<<B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10566,7 +10568,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_vv_unk, slr_vv_nvar); deref_body(d0, pt0, slr_vv_unk, slr_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10574,7 +10576,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, slr_vv_nvar_unk, slr_vv_nvar_nvar); deref_body(d1, pt0, slr_vv_nvar_unk, slr_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10612,7 +10614,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_vc_unk, slr_vc_nvar); deref_body(d0, pt0, slr_vc_unk, slr_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10653,7 +10655,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_cv_unk, slr_cv_nvar); deref_body(d0, pt0, slr_cv_unk, slr_cv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10700,7 +10702,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_y_vv_unk, slr_y_vv_nvar); deref_body(d0, pt0, slr_y_vv_unk, slr_y_vv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10708,7 +10710,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, slr_y_vv_nvar_unk, slr_y_vv_nvar_nvar); deref_body(d1, pt0, slr_y_vv_nvar_unk, slr_y_vv_nvar_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -10749,7 +10751,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_y_vc_unk, slr_y_vc_nvar); deref_body(d0, pt0, slr_y_vc_unk, slr_y_vc_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
setregs(); setregs();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -10792,7 +10794,7 @@ Yap_absmi(int inp)
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_y_cv_unk, slr_y_cv_nvar); deref_body(d0, pt0, slr_y_cv_unk, slr_y_cv_nvar);
saveregs(); saveregs();
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
setregs(); setregs();
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
@ -11856,7 +11858,7 @@ Yap_absmi(int inp)
/* make sure we have something to show for our trouble */ /* make sure we have something to show for our trouble */
saveregs(); saveregs();
if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,xxx),Osbpp))) { if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,xxx),Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
setregs(); setregs();
JMPNext(); JMPNext();
} else { } else {
@ -11973,7 +11975,7 @@ Yap_absmi(int inp)
/* make sure we have something to show for our trouble */ /* make sure we have something to show for our trouble */
saveregs(); saveregs();
if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,xxc),Osbpp))) { if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,xxc),Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
setregs(); setregs();
JMPNext(); JMPNext();
} else { } else {
@ -12083,7 +12085,7 @@ Yap_absmi(int inp)
/* make sure we have something to show for our trouble */ /* make sure we have something to show for our trouble */
saveregs(); saveregs();
if (!Yap_gc(0, YREG, NEXTOP(NEXTOP(PREG,xxn),Osbpp))) { if (!Yap_gc(0, YREG, NEXTOP(NEXTOP(PREG,xxn),Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
setregs(); setregs();
JMPNext(); JMPNext();
} else { } else {
@ -12190,7 +12192,7 @@ Yap_absmi(int inp)
/* make sure we have something to show for our trouble */ /* make sure we have something to show for our trouble */
saveregs(); saveregs();
if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxx),Osbpp))) { if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxx),Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
setregs(); setregs();
JMPNext(); JMPNext();
} else { } else {
@ -12317,7 +12319,7 @@ Yap_absmi(int inp)
/* make sure we have something to show for our trouble */ /* make sure we have something to show for our trouble */
saveregs(); saveregs();
if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxn),Osbpp))) { if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxn),Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
setregs(); setregs();
JMPNext(); JMPNext();
} else { } else {
@ -12445,7 +12447,7 @@ Yap_absmi(int inp)
/* make sure we have something to show for our trouble */ /* make sure we have something to show for our trouble */
saveregs(); saveregs();
if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxn),Osbpp))) { if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxn),Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
setregs(); setregs();
JMPNext(); JMPNext();
} else { } else {
@ -12821,7 +12823,7 @@ Yap_absmi(int inp)
/* make sure we have something to show for our trouble */ /* make sure we have something to show for our trouble */
saveregs(); saveregs();
if (!Yap_gcl((1+d1)*sizeof(CELL), 3, YREG, NEXTOP(NEXTOP(PREG,e),Osbmp))) { if (!Yap_gcl((1+d1)*sizeof(CELL), 3, YREG, NEXTOP(NEXTOP(PREG,e),Osbmp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
setregs(); setregs();
JMPNext(); JMPNext();
} else { } else {
@ -13066,7 +13068,7 @@ Yap_absmi(int inp)
} }
saveregs_and_ycache(); saveregs_and_ycache();
if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, ENV, NEXTOP(PREG, Osbpp))) { if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, ENV, NEXTOP(PREG, Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
} }
setregs_and_ycache(); setregs_and_ycache();
goto execute2_end; goto execute2_end;
@ -13271,7 +13273,7 @@ Yap_absmi(int inp)
} }
saveregs_and_ycache(); saveregs_and_ycache();
if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, ENV, NEXTOP(PREG, Osbmp))) { if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, ENV, NEXTOP(PREG, Osbmp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
} }
setregs_and_ycache(); setregs_and_ycache();
goto execute_end; goto execute_end;
@ -13501,7 +13503,7 @@ Yap_absmi(int inp)
UNLOCK(LOCAL_SignalLock); UNLOCK(LOCAL_SignalLock);
saveregs_and_ycache(); saveregs_and_ycache();
if (!Yap_growheap(FALSE, 0, NULL)) { if (!Yap_growheap(FALSE, 0, NULL)) {
Yap_Error(OUT_OF_HEAP_ERROR, TermNil, "YAP failed to grow heap: %s", LOCAL_ErrorMessage); Yap_NilError(OUT_OF_HEAP_ERROR, "YAP failed to grow heap: %s", LOCAL_ErrorMessage);
setregs_and_ycache(); setregs_and_ycache();
FAIL(); FAIL();
} }
@ -13521,7 +13523,7 @@ Yap_absmi(int inp)
#endif #endif
saveregs_and_ycache(); saveregs_and_ycache();
if(!Yap_growtrail (0, FALSE)) { if(!Yap_growtrail (0, FALSE)) {
Yap_Error(OUT_OF_TRAIL_ERROR,TermNil,"YAP failed to reserve %ld bytes in growtrail",sizeof(CELL) * K16); Yap_NilError(OUT_OF_TRAIL_ERROR,"YAP failed to reserve %ld bytes in growtrail",sizeof(CELL) * K16);
setregs_and_ycache(); setregs_and_ycache();
FAIL(); FAIL();
} }
@ -13545,7 +13547,7 @@ Yap_absmi(int inp)
UNLOCK(LOCAL_SignalLock); UNLOCK(LOCAL_SignalLock);
saveregs_and_ycache(); saveregs_and_ycache();
if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, ENV, NEXTOP(PREG, Osbpp))) { if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, ENV, NEXTOP(PREG, Osbpp))) {
Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage);
} }
setregs_and_ycache(); setregs_and_ycache();
goto execute_after_comma; goto execute_after_comma;

View File

@ -545,17 +545,19 @@ X_API Term STD_PROTO(YAP_NewOpaqueObject,(int, size_t));
X_API void *STD_PROTO(YAP_OpaqueObjectFromTerm,(Term)); X_API void *STD_PROTO(YAP_OpaqueObjectFromTerm,(Term));
static int static int
dogc(void) dogc( USES_REGS1 )
{ {
CACHE_REGS
UInt arity; UInt arity;
yamop *nextpc;
if (P && PREVOP(P,Osbpp)->opc == Yap_opcode(_call_usercpred)) { if (P && PREVOP(P,Osbpp)->opc == Yap_opcode(_call_usercpred)) {
arity = PREVOP(P,Osbpp)->u.Osbpp.p->ArityOfPE; arity = PREVOP(P,Osbpp)->u.Osbpp.p->ArityOfPE;
nextpc = P;
} else { } else {
arity = 0; arity = 0;
nextpc = CP;
} }
if (!Yap_gc(arity, ENV, CP)) { if (!Yap_gc(arity, ENV, nextpc)) {
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
@ -943,10 +945,11 @@ YAP_MkPairTerm(Term t1, Term t2)
if (H > ASP-1024) { if (H > ASP-1024) {
Int sl1 = Yap_InitSlot(t1 PASS_REGS); Int sl1 = Yap_InitSlot(t1 PASS_REGS);
Int sl2 = Yap_InitSlot(t2 PASS_REGS); Int sl2 = Yap_InitSlot(t2 PASS_REGS);
if (!dogc()) { RECOVER_H();
RECOVER_H(); if (!dogc( PASS_REGS1 )) {
return TermNil; return TermNil;
} }
BACKUP_H();
t1 = Yap_GetFromSlot(sl1 PASS_REGS); t1 = Yap_GetFromSlot(sl1 PASS_REGS);
t2 = Yap_GetFromSlot(sl2 PASS_REGS); t2 = Yap_GetFromSlot(sl2 PASS_REGS);
Yap_RecoverSlots(2 PASS_REGS); Yap_RecoverSlots(2 PASS_REGS);
@ -1942,7 +1945,7 @@ YAP_ReadBuffer(char *s, Term *tp)
while ((t = Yap_StringToTerm(s,tp)) == 0L) { while ((t = Yap_StringToTerm(s,tp)) == 0L) {
if (LOCAL_ErrorMessage) { if (LOCAL_ErrorMessage) {
if (!strcmp(LOCAL_ErrorMessage,"Stack Overflow")) { if (!strcmp(LOCAL_ErrorMessage,"Stack Overflow")) {
if (!dogc()) { if (!dogc( PASS_REGS1 )) {
*tp = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage)); *tp = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
LOCAL_ErrorMessage = NULL; LOCAL_ErrorMessage = NULL;
RECOVER_H(); RECOVER_H();
@ -3462,7 +3465,7 @@ YAP_OpenList(int n)
BACKUP_H(); BACKUP_H();
if (H+2*n > ASP-1024) { if (H+2*n > ASP-1024) {
if (!dogc()) { if (!dogc( PASS_REGS1 )) {
RECOVER_H(); RECOVER_H();
return FALSE; return FALSE;
} }

View File

@ -380,6 +380,20 @@ Yap_bug_location(yamop *pc)
static char tmpbuf[YAP_BUF_SIZE]; static char tmpbuf[YAP_BUF_SIZE];
yamop *
Yap_NilError(yap_error_number type, char *format,...)
{
va_list ap;
yamop *res;
va_start (ap, format);
/* now build the error string */
res = Yap_Error(type, TermNil, format, ap);
va_end (ap);
return res;
}
yamop * yamop *
Yap_Error(yap_error_number type, Term where, char *format,...) Yap_Error(yap_error_number type, Term where, char *format,...)
{ {

View File

@ -1630,6 +1630,7 @@ Yap_InitYaamRegs(void)
H = H0 = ((CELL *) LOCAL_GlobalBase)+ Yap_AttsSize/sizeof(CELL); H = H0 = ((CELL *) LOCAL_GlobalBase)+ Yap_AttsSize/sizeof(CELL);
RESET_VARIABLE(H0-1); RESET_VARIABLE(H0-1);
LCL0 = ASP = (CELL *) LOCAL_LocalBase; LCL0 = ASP = (CELL *) LOCAL_LocalBase;
CurrentTrailTop = (tr_fr_ptr)(LOCAL_TrailTop-MinTrailGap);
/* notice that an initial choice-point and environment /* notice that an initial choice-point and environment
*must* be created since for the garbage collector to work */ *must* be created since for the garbage collector to work */
B = NULL; B = NULL;

View File

@ -125,6 +125,7 @@ SetHeapRegs(int copying_threads USES_REGS)
/* Adjust stack addresses */ /* Adjust stack addresses */
LOCAL_TrailBase = TrailAddrAdjust(LOCAL_TrailBase); LOCAL_TrailBase = TrailAddrAdjust(LOCAL_TrailBase);
LOCAL_TrailTop = TrailAddrAdjust(LOCAL_TrailTop); LOCAL_TrailTop = TrailAddrAdjust(LOCAL_TrailTop);
CurrentTrailTop = (tr_fr_ptr)(LOCAL_TrailTop-MinTrailGap);
if (LOCAL_GDiff) { if (LOCAL_GDiff) {
/* make sure we are not just expanding the delay stack */ /* make sure we are not just expanding the delay stack */
LOCAL_GlobalBase = BaseAddrAdjust(LOCAL_GlobalBase); LOCAL_GlobalBase = BaseAddrAdjust(LOCAL_GlobalBase);
@ -1850,6 +1851,7 @@ Yap_CopyThreadStacks(int worker_q, int worker_p, int incremental)
LOCAL_LocalBase = REMOTE_LocalBase(worker_p); LOCAL_LocalBase = REMOTE_LocalBase(worker_p);
LOCAL_TrailBase = REMOTE_TrailBase(worker_p); LOCAL_TrailBase = REMOTE_TrailBase(worker_p);
LOCAL_TrailTop = REMOTE_TrailTop(worker_p); LOCAL_TrailTop = REMOTE_TrailTop(worker_p);
CurrentTrailTop = (tr_fr_ptr)(LOCAL_TrailTop-MinTrailGap);
size = REMOTE_ThreadHandle(worker_q).stack_address-REMOTE_ThreadHandle(worker_p).stack_address; size = REMOTE_ThreadHandle(worker_q).stack_address-REMOTE_ThreadHandle(worker_p).stack_address;
LOCAL_TrDiff = LOCAL_LDiff = LOCAL_GDiff = LOCAL_GDiff0 = LOCAL_DelayDiff = LOCAL_BaseDiff = size; LOCAL_TrDiff = LOCAL_LDiff = LOCAL_GDiff = LOCAL_GDiff0 = LOCAL_DelayDiff = LOCAL_BaseDiff = size;
LOCAL_XDiff = LOCAL_HDiff = 0; LOCAL_XDiff = LOCAL_HDiff = 0;

View File

@ -28,6 +28,10 @@ static char SccsId[] = "%W% %G%";
#endif /* !TABLING */ #endif /* !TABLING */
#define HYBRID_SCHEME 1 #define HYBRID_SCHEME 1
#define DEBUG_printf0(A,B)
#define DEBUG_printf1(A,B,C)
#define DEBUG_printf20(A,B)
#define DEBUG_printf21(A,B,C)
/* global variables for garbage collection */ /* global variables for garbage collection */
@ -1124,6 +1128,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked++; LOCAL_total_marked++;
if (current < LOCAL_HGEN) { if (current < LOCAL_HGEN) {
LOCAL_total_oldies++; LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", current);
} }
} }
PUSH_POINTER(current PASS_REGS); PUSH_POINTER(current PASS_REGS);
@ -1137,6 +1143,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked++; LOCAL_total_marked++;
if (next-1 < LOCAL_HGEN) { if (next-1 < LOCAL_HGEN) {
LOCAL_total_oldies++; LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", next-1);
} }
PUSH_POINTER(next-1 PASS_REGS); PUSH_POINTER(next-1 PASS_REGS);
} }
@ -1177,6 +1185,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked--; LOCAL_total_marked--;
if (current < LOCAL_HGEN) { if (current < LOCAL_HGEN) {
LOCAL_total_oldies--; LOCAL_total_oldies--;
} else {
DEBUG_printf0("%p-1\n", next-1);
} }
} }
POP_POINTER( PASS_REGS1 ); POP_POINTER( PASS_REGS1 );
@ -1199,6 +1209,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked--; LOCAL_total_marked--;
if (current < LOCAL_HGEN) { if (current < LOCAL_HGEN) {
LOCAL_total_oldies--; LOCAL_total_oldies--;
} else {
DEBUG_printf0("%p-1\n", next-1);
} }
} }
POP_POINTER( PASS_REGS1 ); POP_POINTER( PASS_REGS1 );
@ -1244,6 +1256,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked++; LOCAL_total_marked++;
if (next < LOCAL_HGEN) { if (next < LOCAL_HGEN) {
LOCAL_total_oldies++; LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", next);
} }
PUSH_POINTER(next PASS_REGS); PUSH_POINTER(next PASS_REGS);
} }
@ -1294,6 +1308,9 @@ mark_variable(CELL_PTR current USES_REGS)
MARK(next+2); MARK(next+2);
if (next < LOCAL_HGEN) { if (next < LOCAL_HGEN) {
LOCAL_total_oldies+=3; LOCAL_total_oldies+=3;
} else {
DEBUG_printf0("%p 1\n", next);
DEBUG_printf0("%p 3\n", next);
} }
LOCAL_total_marked += 3; LOCAL_total_marked += 3;
PUSH_POINTER(next PASS_REGS); PUSH_POINTER(next PASS_REGS);
@ -1306,6 +1323,9 @@ mark_variable(CELL_PTR current USES_REGS)
UInt sz = 1+SIZEOF_DOUBLE/SIZEOF_LONG_INT; UInt sz = 1+SIZEOF_DOUBLE/SIZEOF_LONG_INT;
if (next < LOCAL_HGEN) { if (next < LOCAL_HGEN) {
LOCAL_total_oldies+= 1+sz; LOCAL_total_oldies+= 1+sz;
} else {
DEBUG_printf0("%p 1\n", next);
DEBUG_printf1("%p %ld\n", next, (long int)(sz+1));
} }
LOCAL_total_marked += 1+sz; LOCAL_total_marked += 1+sz;
PUSH_POINTER(next+sz PASS_REGS); PUSH_POINTER(next+sz PASS_REGS);
@ -1318,8 +1338,12 @@ mark_variable(CELL_PTR current USES_REGS)
((MP_INT *)(next+2))->_mp_alloc*sizeof(mp_limb_t))/CellSize; ((MP_INT *)(next+2))->_mp_alloc*sizeof(mp_limb_t))/CellSize;
MARK(next); MARK(next);
/* size is given by functor + friends */ /* size is given by functor + friends */
if (next < LOCAL_HGEN) if (next < LOCAL_HGEN) {
LOCAL_total_oldies += 2+sz; LOCAL_total_oldies += 2+sz;
} else {
DEBUG_printf0("%p 1\n", next);
DEBUG_printf1("%p %ld\n", next, (long int)(sz+2));
}
LOCAL_total_marked += 2+sz; LOCAL_total_marked += 2+sz;
PUSH_POINTER(next PASS_REGS); PUSH_POINTER(next PASS_REGS);
sz++; sz++;
@ -1328,7 +1352,7 @@ mark_variable(CELL_PTR current USES_REGS)
fprintf(stderr,"[ Error: could not find EndSpecials at blob %p type " UInt_FORMAT " ]\n", next, next[1]); fprintf(stderr,"[ Error: could not find EndSpecials at blob %p type " UInt_FORMAT " ]\n", next, next[1]);
} }
#endif #endif
MARK(next+sz); MARK(next+sz);
PUSH_POINTER(next+sz PASS_REGS); PUSH_POINTER(next+sz PASS_REGS);
} }
default: default:
@ -1344,6 +1368,8 @@ mark_variable(CELL_PTR current USES_REGS)
++LOCAL_total_marked; ++LOCAL_total_marked;
if (next < LOCAL_HGEN) { if (next < LOCAL_HGEN) {
++LOCAL_total_oldies; ++LOCAL_total_oldies;
} else {
DEBUG_printf0("%p 1\n", next);
} }
PUSH_POINTER(next PASS_REGS); PUSH_POINTER(next PASS_REGS);
next++; next++;
@ -1353,6 +1379,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked++; LOCAL_total_marked++;
if (next < LOCAL_HGEN) { if (next < LOCAL_HGEN) {
LOCAL_total_oldies++; LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", next);
} }
PUSH_POINTER(next PASS_REGS); PUSH_POINTER(next PASS_REGS);
} }
@ -1625,6 +1653,8 @@ mark_trail(tr_fr_ptr trail_ptr, tr_fr_ptr trail_base, CELL *gc_H, choiceptr gc_B
PUSH_POINTER(hp-1 PASS_REGS); PUSH_POINTER(hp-1 PASS_REGS);
if (hp-1 < LOCAL_HGEN) { if (hp-1 < LOCAL_HGEN) {
LOCAL_total_oldies++; LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", hp-1);
} }
mark_variable(hp+1 PASS_REGS); mark_variable(hp+1 PASS_REGS);
mark_variable(hp+2 PASS_REGS); mark_variable(hp+2 PASS_REGS);
@ -2728,7 +2758,6 @@ sweep_environments(CELL_PTR gc_ENV, OPREG size, CELL *pvbmap USES_REGS)
bmap = (Int)(((CELL)bmap) << currv); bmap = (Int)(((CELL)bmap) << currv);
} }
for (saved_var = gc_ENV - size; saved_var < gc_ENV - EnvSizeInCells; saved_var++) { for (saved_var = gc_ENV - size; saved_var < gc_ENV - EnvSizeInCells; saved_var++) {
if (currv == sizeof(CELL)*8) { if (currv == sizeof(CELL)*8) {
if (pvbmap != NULL) { if (pvbmap != NULL) {
pvbmap--; pvbmap--;
@ -3239,6 +3268,7 @@ compact_heap( USES_REGS1 )
#endif /* TABLING */ #endif /* TABLING */
); );
for (current = H - 1; current >= start_from; current--) { for (current = H - 1; current >= start_from; current--) {
if (MARKED_PTR(current)) { if (MARKED_PTR(current)) {
CELL ccell = UNMARK_CELL(*current); CELL ccell = UNMARK_CELL(*current);
@ -3261,7 +3291,9 @@ compact_heap( USES_REGS1 )
CELL *ptr = current-1; CELL *ptr = current-1;
UInt nofcells; UInt nofcells;
while (!MARKED_PTR(ptr)) ptr--; while (!MARKED_PTR(ptr)) {
ptr--;
}
nofcells = current-ptr; nofcells = current-ptr;
ptr++; ptr++;
MARK(ptr); MARK(ptr);
@ -3273,8 +3305,11 @@ compact_heap( USES_REGS1 )
ptr[0] = EndSpecials; ptr[0] = EndSpecials;
dest -= nofcells; dest -= nofcells;
current = ptr; current = ptr;
continue;
/* process the functor on a separate cycle */ /* process the functor on a separate cycle */
DEBUG_printf21("%p %ld\n", current-1, (long int)(nofcells+1));
continue;
} else {
DEBUG_printf20("%p 1\n", current);
} }
#ifdef DEBUG #ifdef DEBUG
found_marked++; found_marked++;

View File

@ -37,7 +37,7 @@
#endif #endif
#ifdef __x86_64__ #ifdef __x86_64__
#undef PUSH_REGS #define PUSH_REGS 1
#undef PUSH_X #undef PUSH_X
#endif #endif
@ -97,22 +97,23 @@ typedef struct regstore_t
tr_fr_ptr TR_; /* 24 top of trail */ tr_fr_ptr TR_; /* 24 top of trail */
CELL *H_; /* 25 top of heap (global) stack */ CELL *H_; /* 25 top of heap (global) stack */
choiceptr B_; /* 26 latest choice point */ choiceptr B_; /* 26 latest choice point */
#ifdef DEPTH_LIMIT
CELL DEPTH_; /* 27 */
#endif /* DEPTH_LIMIT */
yamop *CP_; /* 28 continuation program counter */
CELL *ENV_; /* 1 current environment */
#ifdef CUT_C #ifdef CUT_C
cut_c_str_ptr CUT_C_TOP; cut_c_str_ptr CUT_C_TOP;
#endif #endif
#if defined CUT_C && (defined MYDDAS_ODBC || defined MYDDAS_MYSQL) #if defined CUT_C && (defined MYDDAS_ODBC || defined MYDDAS_MYSQL)
MYDDAS_GLOBAL MYDDAS_GLOBAL_POINTER; MYDDAS_GLOBAL MYDDAS_GLOBAL_POINTER;
#endif #endif
#ifdef DEPTH_LIMIT
CELL DEPTH_; /* 27 */
#endif /* DEPTH_LIMIT */
yamop *CP_; /* 28 continuation program counter */
yamop *P_; /* 7 prolog machine program counter */ yamop *P_; /* 7 prolog machine program counter */
CELL *YENV_; /* 5 current environment (may differ from ENV)*/ CELL *YENV_; /* 5 current environment (may differ from ENV)*/
CELL *S_; /* 6 structure pointer */ CELL *S_; /* 6 structure pointer */
CELL *ENV_; /* 1 current environment */
CELL *ASP_; /* 8 top of local stack */ CELL *ASP_; /* 8 top of local stack */
CELL *LCL0_; /* 3 local stack base */ CELL *LCL0_; /* 3 local stack base */
tr_fr_ptr CurrentTrailTop_; /* 10 Auxiliary stack top */
ADDR AuxBase_; /* 9 Auxiliary base pointer */ ADDR AuxBase_; /* 9 Auxiliary base pointer */
CELL *AuxSp_; /* 9 Auxiliary stack pointer */ CELL *AuxSp_; /* 9 Auxiliary stack pointer */
ADDR AuxTop_; /* 10 Auxiliary stack top */ ADDR AuxTop_; /* 10 Auxiliary stack top */
@ -630,6 +631,7 @@ EXTERN inline void restore_B(void) {
#define AuxBase Yap_REGS.AuxBase_ #define AuxBase Yap_REGS.AuxBase_
#define AuxSp Yap_REGS.AuxSp_ #define AuxSp Yap_REGS.AuxSp_
#define AuxTop Yap_REGS.AuxTop_ #define AuxTop Yap_REGS.AuxTop_
#define CurrentTrailTop Yap_REGS.CurrentTrailTop_
#define EX Yap_REGS.EX_ #define EX Yap_REGS.EX_
#define DEPTH Yap_REGS.DEPTH_ #define DEPTH Yap_REGS.DEPTH_
#if defined(YAPOR_SBA) || defined(TABLING) #if defined(YAPOR_SBA) || defined(TABLING)

View File

@ -165,6 +165,7 @@ void STD_PROTO(Yap_InitDBPreds,(void));
/* errors.c */ /* errors.c */
void STD_PROTO(Yap_exit,(int)); void STD_PROTO(Yap_exit,(int));
yamop *STD_PROTO(Yap_Error,(yap_error_number,Term,char *msg, ...)); yamop *STD_PROTO(Yap_Error,(yap_error_number,Term,char *msg, ...));
yamop *STD_PROTO(Yap_NilError,(yap_error_number,char *msg, ...));
/* eval.c */ /* eval.c */
void STD_PROTO(Yap_InitEval,(void)); void STD_PROTO(Yap_InitEval,(void));

View File

@ -96,13 +96,12 @@ register struct yami* P1REG asm ("bp"); /* can't use yamop before Yap.h */
#ifdef BP_FREE #ifdef BP_FREE
#undef BP_FREE #undef BP_FREE
#endif #endif
#define SHADOW_REGS 1
#define SHADOW_S 1 #define SHADOW_S 1
//#define SHADOW_Y 1 //#define SHADOW_Y 1
#define S_IN_MEM 1 #define S_IN_MEM 1
#define Y_IN_MEM 1 #define Y_IN_MEM 1
#define TR_IN_MEM 1 #define TR_IN_MEM 1
#define USE_PREFETCH 1 #define LIMITED_PREFETCH 1
#endif /* __x86_64__ */ #endif /* __x86_64__ */
#else /* other compilers */ #else /* other compilers */
@ -361,7 +360,7 @@ restore_absmi_regs(REGSTORE * old_regs)
#define DO_PREFETCH_W(TYPE) to_go = (void *)(NEXTOP(PREG,TYPE)->u.o.opcw) #define DO_PREFETCH_W(TYPE) to_go = (void *)(NEXTOP(PREG,TYPE)->u.o.opcw)
#if LIMITED_PREFETCH #if LIMITED_PREFETCH||USE_PREFETCH
#define ALWAYS_START_PREFETCH(TYPE) \ #define ALWAYS_START_PREFETCH(TYPE) \
{ register void *to_go; DO_PREFETCH(TYPE) { register void *to_go; DO_PREFETCH(TYPE)
@ -448,7 +447,7 @@ restore_absmi_regs(REGSTORE * old_regs)
#define JMPNextW() \ #define JMPNextW() \
JMP((void *)(PREG->u.o.opcw)) JMP((void *)(PREG->u.o.opcw))
#if USE_THREADED_CODE && LIMITED_PREFETCH #if USE_THREADED_CODE && (LIMITED_PREFETCH || USE_PREFETCH)
#define ALWAYS_GONext() JMP(to_go) #define ALWAYS_GONext() JMP(to_go)
@ -682,20 +681,20 @@ Macros to check the limits of stacks
#else #else
#define check_trail(x) if (Unsigned(LOCAL_TrailTop) - Unsigned(x) < MinTrailGap) \ #define check_trail(x) if (__builtin_expect((Unsigned(CurrentTrailTop) < Unsigned(x)),0)) \
goto notrailleft goto notrailleft
#define check_trail_in_indexing(x) if (Unsigned(LOCAL_TrailTop) - Unsigned(x) < MinTrailGap) \ #define check_trail_in_indexing(x) if (__builtin_expect((Unsigned(CurrentTrailTop) < Unsigned(x)),0)) \
goto notrailleft_from_index goto notrailleft_from_index
#endif #endif
#if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING) #if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING)
#define check_stack(Label, GLOB) \ #define check_stack(Label, GLOB) \
if ( (Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,GLOB))) < CreepFlag ) goto Label if (__builtin_expect( ((Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,GLOB))) < CreepFlag), 0) ) goto Label
#else #else
#define check_stack(Label, GLOB) \ #define check_stack(Label, GLOB) \
if ( (Int)(Unsigned(ENV_YREG) - Unsigned(GLOB)) < CreepFlag ) goto Label if (__builtin_expect(((Int)(Unsigned(ENV_YREG) - Unsigned(GLOB)) < CreepFlag ), 0) ) goto Label
#endif /* YAPOR_SBA && YAPOR */ #endif /* YAPOR_SBA && YAPOR */
/*************************************************************** /***************************************************************
@ -725,7 +724,7 @@ Macros to check the limits of stacks
#define store_at_least_one_arg(arity) \ #define store_at_least_one_arg(arity) \
BEGP(pt0); \ BEGP(pt0); \
pt0 = XREGS+(arity); \ pt0 = XREGS+(arity); \
do { register CELL x = pt0[0]; \ do { CELL x = pt0[0]; \
S_YREG = (S_YREG)-1; \ S_YREG = (S_YREG)-1; \
--pt0; \ --pt0; \
(S_YREG)[0] = x; \ (S_YREG)[0] = x; \
@ -733,7 +732,7 @@ Macros to check the limits of stacks
while ( pt0 > XREGS ); \ while ( pt0 > XREGS ); \
ENDP(pt0) ENDP(pt0)
#if LOW_LEVEL_TRACER #if LOW_LEVEL_TRACER && 0
#define COUNT_CPS() LOCAL_total_choicepoints++ #define COUNT_CPS() LOCAL_total_choicepoints++
#else #else
#define COUNT_CPS() #define COUNT_CPS()

View File

@ -282,8 +282,8 @@ Binding Macros for Multiple Assignment Variables.
extern void Yap_WakeUp(CELL *v); extern void Yap_WakeUp(CELL *v);
#define Bind_Local(A,D) { TRAIL_LOCAL(A,D); *(A) = (D); } #define Bind_Local(A,D) { TRAIL_LOCAL(A,D); *(A) = (D); }
#define Bind_Global(A,D) { *(A) = (D); if (GlobalIsAttVar(A)) Yap_WakeUp(A); else TRAIL_GLOBAL(A,D); } #define Bind_Global(A,D) { *(A) = (D); if (__builtin_expect(GlobalIsAttVar(A),0)) Yap_WakeUp(A); else TRAIL_GLOBAL(A,D); }
#define Bind(A,D) { *(A) = (D); if (A < H) { if (GlobalIsAttVar(A)) Yap_WakeUp(A); else TRAIL_GLOBAL(A,D); } else { TRAIL_LOCAL(A,D); } } #define Bind(A,D) { *(A) = (D); if (A < H) { if (__builtin_expect(GlobalIsAttVar(A),0)) Yap_WakeUp(A); else TRAIL_GLOBAL(A,D); } else { TRAIL_LOCAL(A,D); } }
#define Bind_NonAtt(A,D) { *(A) = (D); TRAIL(A,D); } #define Bind_NonAtt(A,D) { *(A) = (D); TRAIL(A,D); }
#define Bind_Global_NonAtt(A,D) { *(A) = (D); TRAIL_GLOBAL(A,D); } #define Bind_Global_NonAtt(A,D) { *(A) = (D); TRAIL_GLOBAL(A,D); }
#define Bind_and_Trail(A,D) { *(A) = (D); DO_TRAIL(A, D); } #define Bind_and_Trail(A,D) { *(A) = (D); DO_TRAIL(A, D); }

65
configure vendored
View File

@ -1481,7 +1481,7 @@ Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-gmp=DIR use GNU Multiple Precision in DIR --with-gmp=DIR use GNU Multiple Precision in DIR
--with-yapr=DIR use GNU Multiple Precision in DIR --with-yapr=DIR interface to R language, R installed in DIR
--enable-minisat use minisat interface --enable-minisat use minisat interface
--with-cudd=DIR use CUDD package in DIR --with-cudd=DIR use CUDD package in DIR
--with-java=JAVA_HOME use Java instalation in JAVA_HOME --with-java=JAVA_HOME use Java instalation in JAVA_HOME
@ -4432,7 +4432,6 @@ if test "${with_yapr+set}" = set; then :
yap_cv_yapr=no yap_cv_yapr=no
else else
yap_cv_yapr=$with_yapr yap_cv_yapr=$with_yapr
YAPR_INCLUDES="-I${yap_cv_yapr}/share/R/include"
fi fi
else else
yap_cv_yapr=no yap_cv_yapr=no
@ -4931,9 +4930,9 @@ then
ENABLE_YAPR="@# " ENABLE_YAPR="@# "
elif test -e "$srcdir"/packages/YapR/Makefile.in elif test -e "$srcdir"/packages/YapR/Makefile.in
then then
ENABLE_YAPR="@# "
else
ENABLE_YAPR="" ENABLE_YAPR=""
else
ENABLE_YAPR="@# "
fi fi
if test "$yap_cv_clpbn_bp" = no if test "$yap_cv_clpbn_bp" = no
@ -5018,10 +5017,6 @@ then
CFLAGS="-march=i486 $CFLAGS" CFLAGS="-march=i486 $CFLAGS"
CXXFLAGS="-march=i486 $CXXFLAGS" CXXFLAGS="-march=i486 $CXXFLAGS"
;; ;;
i386*)
CFLAGS="-march=i386 $CFLAGS"
CXXFLAGS="-march=i386 $CXXFLAGS"
;;
esac esac
fi fi
fi fi
@ -6276,7 +6271,18 @@ fi
if test "$yap_cv_yapr" != "no" if test "$yap_cv_yapr" != "no"
then then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lR" >&5 if test "$yap_cv_yapr" = "yes"
then
case "$target_os" in
*darwin*)
YAPR_INCLUDES="-I/Library/Frameworks/R.framework/Headers"
EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -framework R -L /Library/Frameworks/R.framework/Libraries"
;;
**)
YAPR_INCLUDES="-I/usr/include/R -I/usr/share/R/include"
esac
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lR" >&5
$as_echo_n "checking for main in -lR... " >&6; } $as_echo_n "checking for main in -lR... " >&6; }
if ${ac_cv_lib_R_main+:} false; then : if ${ac_cv_lib_R_main+:} false; then :
$as_echo_n "(cached) " >&6 $as_echo_n "(cached) " >&6
@ -6313,45 +6319,6 @@ _ACEOF
LIBS="-lR $LIBS" LIBS="-lR $LIBS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lRmath" >&5
$as_echo_n "checking for main in -lRmath... " >&6; }
if ${ac_cv_lib_Rmath_main+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lRmath $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
return main ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_Rmath_main=yes
else
ac_cv_lib_Rmath_main=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Rmath_main" >&5
$as_echo "$ac_cv_lib_Rmath_main" >&6; }
if test "x$ac_cv_lib_Rmath_main" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBRMATH 1
_ACEOF
LIBS="-lRmath $LIBS"
fi fi
fi fi
@ -6432,7 +6399,7 @@ $as_echo "$yap_cv_odbc" >&6; }
then then
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC" YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC"
case "$target_os" in case "$target_os" in
*darwin9*) *darwin*)
LIBS="$LIBS -lodbc -framework CoreFoundation" LIBS="$LIBS -lodbc -framework CoreFoundation"
;; ;;
**) **)

View File

@ -187,7 +187,7 @@ AC_ARG_WITH(gmp,
[yap_cv_gmp=yes]) [yap_cv_gmp=yes])
AC_ARG_WITH(yapr, AC_ARG_WITH(yapr,
[ --with-yapr[=DIR] use GNU Multiple Precision in DIR], [ --with-yapr[=DIR] interface to R language, R installed in DIR],
if test "$withval" = yes; then if test "$withval" = yes; then
YAPR_INCLUDES="-I/usr/share/R/include" YAPR_INCLUDES="-I/usr/share/R/include"
yap_cv_yapr=yes yap_cv_yapr=yes
@ -195,7 +195,6 @@ AC_ARG_WITH(yapr,
yap_cv_yapr=no yap_cv_yapr=no
else else
yap_cv_yapr=$with_yapr yap_cv_yapr=$with_yapr
YAPR_INCLUDES="-I${yap_cv_yapr}/share/R/include"
fi, fi,
[yap_cv_yapr=no]) [yap_cv_yapr=no])
@ -466,9 +465,9 @@ then
ENABLE_YAPR="@# " ENABLE_YAPR="@# "
elif test -e "$srcdir"/packages/YapR/Makefile.in elif test -e "$srcdir"/packages/YapR/Makefile.in
then then
ENABLE_YAPR="@# "
else
ENABLE_YAPR="" ENABLE_YAPR=""
else
ENABLE_YAPR="@# "
fi fi
if test "$yap_cv_clpbn_bp" = no if test "$yap_cv_clpbn_bp" = no
@ -557,10 +556,6 @@ then
CFLAGS="-march=i486 $CFLAGS" CFLAGS="-march=i486 $CFLAGS"
CXXFLAGS="-march=i486 $CXXFLAGS" CXXFLAGS="-march=i486 $CXXFLAGS"
;; ;;
i386*)
CFLAGS="-march=i386 $CFLAGS"
CXXFLAGS="-march=i386 $CXXFLAGS"
;;
esac esac
fi fi
fi fi
@ -693,8 +688,19 @@ fi
if test "$yap_cv_yapr" != "no" if test "$yap_cv_yapr" != "no"
then then
AC_CHECK_LIB(R,main) if test "$yap_cv_yapr" = "yes"
AC_CHECK_LIB(Rmath,main) then
case "$target_os" in
*darwin*)
YAPR_INCLUDES="-I/Library/Frameworks/R.framework/Headers"
EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -framework R -L /Library/Frameworks/R.framework/Libraries"
;;
**)
dnl one of the two may work (Fedora vs Ubuntu)
YAPR_INCLUDES="-I/usr/include/R -I/usr/share/R/include"
esac
fi
AC_CHECK_LIB(R,main)
fi fi
dnl if test "$yap_cv_cudd" != "no" dnl if test "$yap_cv_cudd" != "no"
@ -739,7 +745,7 @@ then
then then
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC" YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC"
case "$target_os" in case "$target_os" in
*darwin9*) *darwin*)
LIBS="$LIBS -lodbc -framework CoreFoundation" LIBS="$LIBS -lodbc -framework CoreFoundation"
;; ;;
**) **)

View File

@ -24,15 +24,14 @@
% length of a list. % length of a list.
length(L,M) :- var(M), !, '$$_length1'(L,0,M). length(L,M) :- ( var(M) -> '$$_length1'(L,M,0) ; '$$_length2'(L, M) ).
length(L,M) :- '$$_length2'(M,L).
'$$_length1'([], M, M). '$$_length1'([], M, M).
'$$_length1'([_|L], N, O) :- '$$_length1'([_|L], O, N) :-
M is N + 1, M is N + 1,
'$$_length1'(L, M, O). '$$_length1'(L, O, M).
'$$_length2'(N, L) :- '$$_length2'(L, N) :-
( N =:= 0 ( N =:= 0
-> ->
L = [] L = []
@ -40,7 +39,7 @@ length(L,M) :- '$$_length2'(M,L).
N > 0, N > 0,
N1 is N - 1, N1 is N - 1,
L = [_|L1], L = [_|L1],
'$$_length2'(N1, L1) '$$_length2'(L1, N1)
). ).