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

View File

@ -380,6 +380,20 @@ Yap_bug_location(yamop *pc)
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 *
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);
RESET_VARIABLE(H0-1);
LCL0 = ASP = (CELL *) LOCAL_LocalBase;
CurrentTrailTop = (tr_fr_ptr)(LOCAL_TrailTop-MinTrailGap);
/* notice that an initial choice-point and environment
*must* be created since for the garbage collector to work */
B = NULL;

View File

@ -125,6 +125,7 @@ SetHeapRegs(int copying_threads USES_REGS)
/* Adjust stack addresses */
LOCAL_TrailBase = TrailAddrAdjust(LOCAL_TrailBase);
LOCAL_TrailTop = TrailAddrAdjust(LOCAL_TrailTop);
CurrentTrailTop = (tr_fr_ptr)(LOCAL_TrailTop-MinTrailGap);
if (LOCAL_GDiff) {
/* make sure we are not just expanding the delay stack */
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_TrailBase = REMOTE_TrailBase(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;
LOCAL_TrDiff = LOCAL_LDiff = LOCAL_GDiff = LOCAL_GDiff0 = LOCAL_DelayDiff = LOCAL_BaseDiff = size;
LOCAL_XDiff = LOCAL_HDiff = 0;

View File

@ -28,6 +28,10 @@ static char SccsId[] = "%W% %G%";
#endif /* !TABLING */
#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 */
@ -1124,6 +1128,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked++;
if (current < LOCAL_HGEN) {
LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", current);
}
}
PUSH_POINTER(current PASS_REGS);
@ -1137,6 +1143,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked++;
if (next-1 < LOCAL_HGEN) {
LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", next-1);
}
PUSH_POINTER(next-1 PASS_REGS);
}
@ -1177,6 +1185,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked--;
if (current < LOCAL_HGEN) {
LOCAL_total_oldies--;
} else {
DEBUG_printf0("%p-1\n", next-1);
}
}
POP_POINTER( PASS_REGS1 );
@ -1199,6 +1209,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked--;
if (current < LOCAL_HGEN) {
LOCAL_total_oldies--;
} else {
DEBUG_printf0("%p-1\n", next-1);
}
}
POP_POINTER( PASS_REGS1 );
@ -1244,6 +1256,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked++;
if (next < LOCAL_HGEN) {
LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", next);
}
PUSH_POINTER(next PASS_REGS);
}
@ -1294,6 +1308,9 @@ mark_variable(CELL_PTR current USES_REGS)
MARK(next+2);
if (next < LOCAL_HGEN) {
LOCAL_total_oldies+=3;
} else {
DEBUG_printf0("%p 1\n", next);
DEBUG_printf0("%p 3\n", next);
}
LOCAL_total_marked += 3;
PUSH_POINTER(next PASS_REGS);
@ -1306,6 +1323,9 @@ mark_variable(CELL_PTR current USES_REGS)
UInt sz = 1+SIZEOF_DOUBLE/SIZEOF_LONG_INT;
if (next < LOCAL_HGEN) {
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;
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;
MARK(next);
/* size is given by functor + friends */
if (next < LOCAL_HGEN)
if (next < LOCAL_HGEN) {
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;
PUSH_POINTER(next PASS_REGS);
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]);
}
#endif
MARK(next+sz);
MARK(next+sz);
PUSH_POINTER(next+sz PASS_REGS);
}
default:
@ -1344,6 +1368,8 @@ mark_variable(CELL_PTR current USES_REGS)
++LOCAL_total_marked;
if (next < LOCAL_HGEN) {
++LOCAL_total_oldies;
} else {
DEBUG_printf0("%p 1\n", next);
}
PUSH_POINTER(next PASS_REGS);
next++;
@ -1353,6 +1379,8 @@ mark_variable(CELL_PTR current USES_REGS)
LOCAL_total_marked++;
if (next < LOCAL_HGEN) {
LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", next);
}
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);
if (hp-1 < LOCAL_HGEN) {
LOCAL_total_oldies++;
} else {
DEBUG_printf0("%p 1\n", hp-1);
}
mark_variable(hp+1 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);
}
for (saved_var = gc_ENV - size; saved_var < gc_ENV - EnvSizeInCells; saved_var++) {
if (currv == sizeof(CELL)*8) {
if (pvbmap != NULL) {
pvbmap--;
@ -3239,6 +3268,7 @@ compact_heap( USES_REGS1 )
#endif /* TABLING */
);
for (current = H - 1; current >= start_from; current--) {
if (MARKED_PTR(current)) {
CELL ccell = UNMARK_CELL(*current);
@ -3261,7 +3291,9 @@ compact_heap( USES_REGS1 )
CELL *ptr = current-1;
UInt nofcells;
while (!MARKED_PTR(ptr)) ptr--;
while (!MARKED_PTR(ptr)) {
ptr--;
}
nofcells = current-ptr;
ptr++;
MARK(ptr);
@ -3273,8 +3305,11 @@ compact_heap( USES_REGS1 )
ptr[0] = EndSpecials;
dest -= nofcells;
current = ptr;
continue;
/* 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
found_marked++;

View File

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

View File

@ -165,6 +165,7 @@ void STD_PROTO(Yap_InitDBPreds,(void));
/* errors.c */
void STD_PROTO(Yap_exit,(int));
yamop *STD_PROTO(Yap_Error,(yap_error_number,Term,char *msg, ...));
yamop *STD_PROTO(Yap_NilError,(yap_error_number,char *msg, ...));
/* eval.c */
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
#undef BP_FREE
#endif
#define SHADOW_REGS 1
#define SHADOW_S 1
//#define SHADOW_Y 1
#define S_IN_MEM 1
#define Y_IN_MEM 1
#define TR_IN_MEM 1
#define USE_PREFETCH 1
#define LIMITED_PREFETCH 1
#endif /* __x86_64__ */
#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)
#if LIMITED_PREFETCH
#if LIMITED_PREFETCH||USE_PREFETCH
#define ALWAYS_START_PREFETCH(TYPE) \
{ register void *to_go; DO_PREFETCH(TYPE)
@ -448,7 +447,7 @@ restore_absmi_regs(REGSTORE * old_regs)
#define JMPNextW() \
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)
@ -682,20 +681,20 @@ Macros to check the limits of stacks
#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
#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
#endif
#if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING)
#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
#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 */
/***************************************************************
@ -725,7 +724,7 @@ Macros to check the limits of stacks
#define store_at_least_one_arg(arity) \
BEGP(pt0); \
pt0 = XREGS+(arity); \
do { register CELL x = pt0[0]; \
do { CELL x = pt0[0]; \
S_YREG = (S_YREG)-1; \
--pt0; \
(S_YREG)[0] = x; \
@ -733,7 +732,7 @@ Macros to check the limits of stacks
while ( pt0 > XREGS ); \
ENDP(pt0)
#if LOW_LEVEL_TRACER
#if LOW_LEVEL_TRACER && 0
#define COUNT_CPS() LOCAL_total_choicepoints++
#else
#define COUNT_CPS()

View File

@ -282,8 +282,8 @@ Binding Macros for Multiple Assignment Variables.
extern void Yap_WakeUp(CELL *v);
#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(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_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 (__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_Global_NonAtt(A,D) { *(A) = (D); TRAIL_GLOBAL(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]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--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
--with-cudd=DIR use CUDD package in DIR
--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
else
yap_cv_yapr=$with_yapr
YAPR_INCLUDES="-I${yap_cv_yapr}/share/R/include"
fi
else
yap_cv_yapr=no
@ -4931,9 +4930,9 @@ then
ENABLE_YAPR="@# "
elif test -e "$srcdir"/packages/YapR/Makefile.in
then
ENABLE_YAPR="@# "
else
ENABLE_YAPR=""
else
ENABLE_YAPR="@# "
fi
if test "$yap_cv_clpbn_bp" = no
@ -5018,10 +5017,6 @@ then
CFLAGS="-march=i486 $CFLAGS"
CXXFLAGS="-march=i486 $CXXFLAGS"
;;
i386*)
CFLAGS="-march=i386 $CFLAGS"
CXXFLAGS="-march=i386 $CXXFLAGS"
;;
esac
fi
fi
@ -6276,7 +6271,18 @@ fi
if test "$yap_cv_yapr" != "no"
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; }
if ${ac_cv_lib_R_main+:} false; then :
$as_echo_n "(cached) " >&6
@ -6313,45 +6319,6 @@ _ACEOF
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
@ -6432,7 +6399,7 @@ $as_echo "$yap_cv_odbc" >&6; }
then
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC"
case "$target_os" in
*darwin9*)
*darwin*)
LIBS="$LIBS -lodbc -framework CoreFoundation"
;;
**)

View File

@ -187,7 +187,7 @@ AC_ARG_WITH(gmp,
[yap_cv_gmp=yes])
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
YAPR_INCLUDES="-I/usr/share/R/include"
yap_cv_yapr=yes
@ -195,7 +195,6 @@ AC_ARG_WITH(yapr,
yap_cv_yapr=no
else
yap_cv_yapr=$with_yapr
YAPR_INCLUDES="-I${yap_cv_yapr}/share/R/include"
fi,
[yap_cv_yapr=no])
@ -466,9 +465,9 @@ then
ENABLE_YAPR="@# "
elif test -e "$srcdir"/packages/YapR/Makefile.in
then
ENABLE_YAPR="@# "
else
ENABLE_YAPR=""
else
ENABLE_YAPR="@# "
fi
if test "$yap_cv_clpbn_bp" = no
@ -557,10 +556,6 @@ then
CFLAGS="-march=i486 $CFLAGS"
CXXFLAGS="-march=i486 $CXXFLAGS"
;;
i386*)
CFLAGS="-march=i386 $CFLAGS"
CXXFLAGS="-march=i386 $CXXFLAGS"
;;
esac
fi
fi
@ -693,8 +688,19 @@ fi
if test "$yap_cv_yapr" != "no"
then
AC_CHECK_LIB(R,main)
AC_CHECK_LIB(Rmath,main)
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"
;;
**)
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
dnl if test "$yap_cv_cudd" != "no"
@ -739,7 +745,7 @@ then
then
YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC"
case "$target_os" in
*darwin9*)
*darwin*)
LIBS="$LIBS -lodbc -framework CoreFoundation"
;;
**)

View File

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