rename BinaryTestPredFlag to BinaryPredFlag
get rid of small annoying arithmetic bugs
This commit is contained in:
parent
30e946cc30
commit
8a3978e3e1
@ -162,7 +162,7 @@ void verifica_predicados(struct Clauses *clause)
|
|||||||
PredEntry *p=RepPredProp((Prop) inter_code->new4);
|
PredEntry *p=RepPredProp((Prop) inter_code->new4);
|
||||||
inter_code->op=safe_call_op;
|
inter_code->op=safe_call_op;
|
||||||
inter_code->new4= (unsigned long) p->cs.f_code;
|
inter_code->new4= (unsigned long) p->cs.f_code;
|
||||||
if (Flags & BinaryTestPredFlag) inter_code->new1=2;
|
if (Flags & BinaryPredFlag) inter_code->new1=2;
|
||||||
else inter_code->new1=0;
|
else inter_code->new1=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -204,7 +204,7 @@ void verifica_predicados(struct Clauses *clause)
|
|||||||
} else {/* safe_call */
|
} else {/* safe_call */
|
||||||
inter_code->op=safe_call_op;
|
inter_code->op=safe_call_op;
|
||||||
inter_code->new4= (unsigned long) p->cs.f_code;
|
inter_code->new4= (unsigned long) p->cs.f_code;
|
||||||
if (Flags & BinaryTestPredFlag) inter_code->new1=2;
|
if (Flags & BinaryPredFlag) inter_code->new1=2;
|
||||||
else inter_code->new1=0;
|
else inter_code->new1=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
186
C/absmi.c
186
C/absmi.c
@ -8854,6 +8854,12 @@ Yap_absmi(int inp)
|
|||||||
GONext();
|
GONext();
|
||||||
ENDOp();
|
ENDOp();
|
||||||
|
|
||||||
|
Op(index_long, e);
|
||||||
|
PREG = NEXTOP(PREG, e);
|
||||||
|
I_R = MkIntTerm(SREG[0] & (MAX_ABS_INT-1));
|
||||||
|
GONext();
|
||||||
|
ENDOp();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************\
|
/************************************************************************\
|
||||||
@ -10969,7 +10975,7 @@ Yap_absmi(int inp)
|
|||||||
if (i2 < 0)
|
if (i2 < 0)
|
||||||
d0 = do_sll(d1, -i2);
|
d0 = do_sll(d1, -i2);
|
||||||
else
|
else
|
||||||
d0 = MkIntTerm(d1 >> i2);
|
d0 = MkIntegerTerm(d1 >> i2);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
saveregs();
|
saveregs();
|
||||||
@ -11101,7 +11107,7 @@ Yap_absmi(int inp)
|
|||||||
if (i2 < 0)
|
if (i2 < 0)
|
||||||
d0 = do_sll(d1, -i2);
|
d0 = do_sll(d1, -i2);
|
||||||
else
|
else
|
||||||
d0 = MkIntTerm(d1 >> i2);
|
d0 = MkIntegerTerm(d1 >> i2);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
saveregs();
|
saveregs();
|
||||||
@ -11650,7 +11656,7 @@ Yap_absmi(int inp)
|
|||||||
Float d0;
|
Float d0;
|
||||||
if (Yap_isint[PREG->u.sdll.s])
|
if (Yap_isint[PREG->u.sdll.s])
|
||||||
d0 = Yap_Ints[PREG->u.sdll.s];
|
d0 = Yap_Ints[PREG->u.sdll.s];
|
||||||
else
|
else
|
||||||
d0 = Yap_Floats[PREG->u.sdll.s];
|
d0 = Yap_Floats[PREG->u.sdll.s];
|
||||||
if ( d0 > CpFloatUnaligned(PREG->u.sdll.d)) {
|
if ( d0 > CpFloatUnaligned(PREG->u.sdll.d)) {
|
||||||
PREG = PREG->u.sdll.T;
|
PREG = PREG->u.sdll.T;
|
||||||
@ -11680,29 +11686,31 @@ Yap_absmi(int inp)
|
|||||||
Op(lt, ssll);
|
Op(lt, ssll);
|
||||||
if (Yap_isint[PREG->u.ssll.s1]) {
|
if (Yap_isint[PREG->u.ssll.s1]) {
|
||||||
if (Yap_isint[PREG->u.ssll.s2]) {
|
if (Yap_isint[PREG->u.ssll.s2]) {
|
||||||
if (Yap_Ints[PREG->u.ssll.s2] < Yap_Ints[PREG->u.ssll.s2]) {
|
if (Yap_Ints[PREG->u.ssll.s1] < Yap_Ints[PREG->u.ssll.s2]) {
|
||||||
PREG = PREG->u.snll.T;
|
PREG = PREG->u.ssll.T;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Yap_Ints[PREG->u.ssll.s2] < Yap_Floats[PREG->u.ssll.s2]) {
|
if (Yap_Ints[PREG->u.ssll.s1] < Yap_Floats[PREG->u.ssll.s2]) {
|
||||||
PREG = PREG->u.snll.T;
|
PREG = PREG->u.ssll.T;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Yap_isint[PREG->u.ssll.s2]) {
|
if (Yap_isint[PREG->u.ssll.s2]) {
|
||||||
if (Yap_Floats[PREG->u.ssll.s2] < Yap_Ints[PREG->u.ssll.s2]) {
|
if (Yap_Floats[PREG->u.ssll.s1] < Yap_Ints[PREG->u.ssll.s2]) {
|
||||||
PREG = PREG->u.snll.T;
|
PREG = PREG->u.ssll.T;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Yap_Floats[PREG->u.ssll.s2] < Yap_Floats[PREG->u.ssll.s2]) {
|
if (Yap_Floats[PREG->u.ssll.s1] < Yap_Floats[PREG->u.ssll.s2]) {
|
||||||
PREG = PREG->u.snll.T;
|
PREG = PREG->u.ssll.T;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
PREG = PREG->u.ssll.F;
|
||||||
|
GONext();
|
||||||
ENDOp();
|
ENDOp();
|
||||||
|
|
||||||
Op(gtc_float, sdll);
|
Op(gtc_float, sdll);
|
||||||
@ -11756,7 +11764,7 @@ Yap_absmi(int inp)
|
|||||||
{
|
{
|
||||||
int off = PREG->u.ssn.s0;
|
int off = PREG->u.ssn.s0;
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
Yap_Floats[off] = Yap_Ints[PREG->u.ssn.s1]+PREG->u.ssn.n;
|
Yap_Ints[off] = Yap_Ints[PREG->u.ssn.s1]+PREG->u.ssn.n;
|
||||||
Yap_isint[off] = TRUE;
|
Yap_isint[off] = TRUE;
|
||||||
if (add_overflow(Yap_Ints[off],Yap_Ints[PREG->u.ssn.s1],PREG->u.ssn.n)) {
|
if (add_overflow(Yap_Ints[off],Yap_Ints[PREG->u.ssn.s1],PREG->u.ssn.n)) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
@ -11778,21 +11786,21 @@ Yap_absmi(int inp)
|
|||||||
if (Yap_isint[PREG->u.sss.s2]) {
|
if (Yap_isint[PREG->u.sss.s2]) {
|
||||||
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]+Yap_Ints[PREG->u.sss.s2];
|
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]+Yap_Ints[PREG->u.sss.s2];
|
||||||
Yap_isint[off] = TRUE;
|
Yap_isint[off] = TRUE;
|
||||||
if (add_overflow(Yap_Ints[off],Yap_Ints[PREG->u.sss.s1],PREG->u.sss.s2)) {
|
if (add_overflow(Yap_Ints[off],Yap_Ints[PREG->u.sss.s1],Yap_Ints[PREG->u.sss.s2])) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
} else {
|
}
|
||||||
Yap_Floats[off] = Yap_Ints[PREG->u.sss.s1]+Yap_Floats[PREG->u.sss.s2];
|
|
||||||
Yap_isint[off] = FALSE;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (Yap_isint[PREG->u.sss.s2]) {
|
Yap_Floats[off] = Yap_Ints[PREG->u.sss.s1]+Yap_Floats[PREG->u.sss.s2];
|
||||||
Yap_Floats[off] = Yap_Floats[PREG->u.sss.s1]+Yap_Ints[PREG->u.sss.s2];
|
|
||||||
} else {
|
|
||||||
Yap_Floats[off] = Yap_Floats[PREG->u.sss.s1]+Yap_Floats[PREG->u.sss.s2];
|
|
||||||
}
|
|
||||||
Yap_isint[off] = FALSE;
|
Yap_isint[off] = FALSE;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Yap_isint[off] = FALSE;
|
||||||
|
if (Yap_isint[PREG->u.sss.s2]) {
|
||||||
|
Yap_Floats[off] = Yap_Floats[PREG->u.sss.s1]+Yap_Ints[PREG->u.sss.s2];
|
||||||
|
} else {
|
||||||
|
Yap_Floats[off] = Yap_Floats[PREG->u.sss.s1]+Yap_Floats[PREG->u.sss.s2];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PREG = NEXTOP(PREG, sss);
|
PREG = NEXTOP(PREG, sss);
|
||||||
@ -11817,7 +11825,7 @@ Yap_absmi(int inp)
|
|||||||
{
|
{
|
||||||
int off = PREG->u.ssn.s0;
|
int off = PREG->u.ssn.s0;
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
Yap_Floats[off] = PREG->u.ssn.n-Yap_Ints[PREG->u.ssn.s1];
|
Yap_Ints[off] = PREG->u.ssn.n-Yap_Ints[PREG->u.ssn.s1];
|
||||||
Yap_isint[off] = TRUE;
|
Yap_isint[off] = TRUE;
|
||||||
if (sub_overflow(Yap_Ints[off],PREG->u.ssn.n,Yap_Ints[PREG->u.ssn.s1])) {
|
if (sub_overflow(Yap_Ints[off],PREG->u.ssn.n,Yap_Ints[PREG->u.ssn.s1])) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
@ -11874,7 +11882,7 @@ Yap_absmi(int inp)
|
|||||||
{
|
{
|
||||||
int off = PREG->u.ssn.s0;
|
int off = PREG->u.ssn.s0;
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
Yap_Floats[off] = Yap_Ints[PREG->u.ssn.s1]*PREG->u.ssn.n;
|
Yap_Ints[off] = Yap_Ints[PREG->u.ssn.s1]*PREG->u.ssn.n;
|
||||||
Yap_isint[off] = TRUE;
|
Yap_isint[off] = TRUE;
|
||||||
if (mul_overflow(Yap_Ints[off],Yap_Ints[PREG->u.ssn.s1],PREG->u.ssn.n)) {
|
if (mul_overflow(Yap_Ints[off],Yap_Ints[PREG->u.ssn.s1],PREG->u.ssn.n)) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
@ -11896,9 +11904,10 @@ Yap_absmi(int inp)
|
|||||||
if (Yap_isint[PREG->u.sss.s2]) {
|
if (Yap_isint[PREG->u.sss.s2]) {
|
||||||
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]*Yap_Ints[PREG->u.sss.s2];
|
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]*Yap_Ints[PREG->u.sss.s2];
|
||||||
Yap_isint[off] = TRUE;
|
Yap_isint[off] = TRUE;
|
||||||
if (mul_overflow(Yap_Ints[off],Yap_Ints[PREG->u.sss.s1],PREG->u.sss.s2)) {
|
if (mul_overflow(Yap_Ints[off],Yap_Ints[PREG->u.sss.s1],Yap_Ints[PREG->u.sss.s2])) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Yap_Floats[off] = Yap_Ints[PREG->u.sss.s1]*Yap_Floats[PREG->u.sss.s2];
|
Yap_Floats[off] = Yap_Ints[PREG->u.sss.s1]*Yap_Floats[PREG->u.sss.s2];
|
||||||
Yap_isint[off] = FALSE;
|
Yap_isint[off] = FALSE;
|
||||||
@ -11910,7 +11919,6 @@ Yap_absmi(int inp)
|
|||||||
Yap_Floats[off] = Yap_Floats[PREG->u.sss.s1]*Yap_Floats[PREG->u.sss.s2];
|
Yap_Floats[off] = Yap_Floats[PREG->u.sss.s1]*Yap_Floats[PREG->u.sss.s2];
|
||||||
}
|
}
|
||||||
Yap_isint[off] = FALSE;
|
Yap_isint[off] = FALSE;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PREG = NEXTOP(PREG, sss);
|
PREG = NEXTOP(PREG, sss);
|
||||||
@ -11961,7 +11969,12 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(idiv_c1, ssn);
|
Op(idiv_c1, ssn);
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
if (Yap_Ints[PREG->u.ssn.s1] == 0) {
|
Int qu0 = Yap_Ints[PREG->u.ssn.s1];
|
||||||
|
if (qu0 == 0) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
|
if (Int_MIN == PREG->u.ssn.n && qu0 == -1) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
@ -11977,7 +11990,12 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(idiv_c2, ssn);
|
Op(idiv_c2, ssn);
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
Yap_Ints[PREG->u.ssn.s0] = Yap_Ints[PREG->u.ssn.s1]/PREG->u.ssn.n;
|
Int div = PREG->u.ssn.n;
|
||||||
|
if (Int_MIN == Yap_Ints[PREG->u.ssn.s1] && div == -1) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
|
Yap_Ints[PREG->u.ssn.s0] = Yap_Ints[PREG->u.ssn.s1]/div;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -11993,7 +12011,13 @@ Yap_absmi(int inp)
|
|||||||
if (Yap_isint[PREG->u.sss.s1] &&
|
if (Yap_isint[PREG->u.sss.s1] &&
|
||||||
Yap_isint[PREG->u.sss.s2] &&
|
Yap_isint[PREG->u.sss.s2] &&
|
||||||
Yap_Ints[PREG->u.sss.s2] != 0) {
|
Yap_Ints[PREG->u.sss.s2] != 0) {
|
||||||
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]/Yap_Ints[PREG->u.sss.s2];
|
Int i1 = Yap_Ints[PREG->u.sss.s1];
|
||||||
|
Int i2 = Yap_Ints[PREG->u.sss.s2];
|
||||||
|
if (i1 == Int_MIN && i2 == -1) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
|
Yap_Ints[off] = i1/i2;
|
||||||
Yap_isint[off] = TRUE;
|
Yap_isint[off] = TRUE;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
@ -12006,11 +12030,19 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(mod_c1, ssn);
|
Op(mod_c1, ssn);
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
if (Yap_Ints[PREG->u.ssn.s1] == 0) {
|
Int mod, div = Yap_Ints[PREG->u.ssn.s1];
|
||||||
|
if (div == 0) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
Yap_Ints[PREG->u.ssn.s0] = PREG->u.ssn.n % Yap_Ints[PREG->u.ssn.s1];
|
if (div == -1 && PREG->u.ssn.n == Int_MIN) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
|
mod = PREG->u.ssn.n % div;
|
||||||
|
if (mod && (mod ^ div) < 0)
|
||||||
|
mod += div;
|
||||||
|
Yap_Ints[PREG->u.ssn.s0] = mod;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -12022,7 +12054,15 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(mod_c2, ssn);
|
Op(mod_c2, ssn);
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
Yap_Ints[PREG->u.ssn.s0] = Yap_Ints[PREG->u.ssn.s1]%PREG->u.ssn.n;
|
Int mod, div = PREG->u.ssn.n;
|
||||||
|
if (div == -1 && Yap_Ints[PREG->u.ssn.s1] == Int_MIN) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
|
mod = Yap_Ints[PREG->u.ssn.s1]%div;
|
||||||
|
if (mod && (mod ^ div) < 0)
|
||||||
|
mod += div;
|
||||||
|
Yap_Ints[PREG->u.ssn.s0] = mod;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -12035,10 +12075,19 @@ Yap_absmi(int inp)
|
|||||||
Op(mod, sss);
|
Op(mod, sss);
|
||||||
{
|
{
|
||||||
int off = PREG->u.sss.s0;
|
int off = PREG->u.sss.s0;
|
||||||
|
Int mod, div = Yap_Ints[PREG->u.sss.s2];
|
||||||
if (Yap_isint[PREG->u.sss.s1] &&
|
if (Yap_isint[PREG->u.sss.s1] &&
|
||||||
Yap_isint[PREG->u.sss.s2] &&
|
Yap_isint[PREG->u.sss.s2] &&
|
||||||
Yap_Ints[PREG->u.sss.s2] != 0) {
|
div != 0) {
|
||||||
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]%Yap_Ints[PREG->u.sss.s2];
|
Int i1 = Yap_Ints[PREG->u.sss.s1];
|
||||||
|
if (i1 == Int_MIN && div == -1) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
|
mod = i1%div;
|
||||||
|
if (mod && (mod ^ div) < 0)
|
||||||
|
mod += div;
|
||||||
|
Yap_Ints[off] = mod;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -12051,11 +12100,16 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(rem_c1, ssn);
|
Op(rem_c1, ssn);
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
if (Yap_Ints[PREG->u.ssn.s1] == 0) {
|
Int div = Yap_Ints[PREG->u.ssn.s1];
|
||||||
|
if (div == 0) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
Yap_Ints[PREG->u.ssn.s0] = PREG->u.ssn.n%Yap_Ints[PREG->u.ssn.s1];
|
if (PREG->u.ssn.n == Int_MIN && div == -1) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
|
Yap_Ints[PREG->u.ssn.s0] = PREG->u.ssn.n%div;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -12067,7 +12121,12 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(rem_c2, ssn);
|
Op(rem_c2, ssn);
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
Yap_Ints[PREG->u.ssn.s0] = Yap_Ints[PREG->u.ssn.s1]%PREG->u.ssn.n;
|
Int div = PREG->u.ssn.n;
|
||||||
|
if (Yap_Ints[PREG->u.ssn.s1] == Int_MIN && div == -1) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
|
Yap_Ints[PREG->u.ssn.s0] = Yap_Ints[PREG->u.ssn.s1]%div;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -12086,7 +12145,13 @@ Yap_absmi(int inp)
|
|||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]%Yap_Ints[PREG->u.sss.s2];
|
Int i1 = Yap_Ints[PREG->u.sss.s1];
|
||||||
|
Int div = Yap_Ints[PREG->u.sss.s2];
|
||||||
|
if (i1 == Int_MIN && div == -1) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
|
Yap_Ints[off] = i1%div;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -12201,6 +12266,11 @@ Yap_absmi(int inp)
|
|||||||
{
|
{
|
||||||
int off = PREG->u.sss.s0;
|
int off = PREG->u.sss.s0;
|
||||||
if (Yap_isint[PREG->u.sss.s1]) {
|
if (Yap_isint[PREG->u.sss.s1]) {
|
||||||
|
Int operand = Yap_Ints[PREG->u.sss.s1];
|
||||||
|
if (operand == Int_MIN) {
|
||||||
|
PREG = ARITH_EXCEPTION;
|
||||||
|
GONext();
|
||||||
|
}
|
||||||
Yap_Ints[off] = -Yap_Ints[PREG->u.sss.s1];
|
Yap_Ints[off] = -Yap_Ints[PREG->u.sss.s1];
|
||||||
Yap_isint[off] = TRUE;
|
Yap_isint[off] = TRUE;
|
||||||
} else {
|
} else {
|
||||||
@ -12214,11 +12284,15 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(sl_c1, ssn);
|
Op(sl_c1, ssn);
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
if (sl_overflow(PREG->u.ssn.n,Yap_Ints[PREG->u.ssn.s1])) {
|
Int sc = Yap_Ints[PREG->u.ssn.s1];
|
||||||
|
if (sl_overflow(PREG->u.ssn.n,sc)) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
Yap_Ints[PREG->u.ssn.s0] = PREG->u.ssn.n<<Yap_Ints[PREG->u.ssn.s1];
|
if (sc < 0)
|
||||||
|
Yap_Ints[PREG->u.ssn.s0] = PREG->u.ssn.n>>-sc;
|
||||||
|
else
|
||||||
|
Yap_Ints[PREG->u.ssn.s0] = PREG->u.ssn.n<<sc;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -12249,11 +12323,15 @@ Yap_absmi(int inp)
|
|||||||
int off = PREG->u.sss.s0;
|
int off = PREG->u.sss.s0;
|
||||||
if (Yap_isint[PREG->u.sss.s1]) {
|
if (Yap_isint[PREG->u.sss.s1]) {
|
||||||
if (Yap_isint[PREG->u.sss.s2]) {
|
if (Yap_isint[PREG->u.sss.s2]) {
|
||||||
if (sl_overflow(Yap_Ints[PREG->u.sss.s1],Yap_Ints[PREG->u.sss.s2])) {
|
Int sc = Yap_Ints[PREG->u.sss.s2];
|
||||||
|
if (sl_overflow(Yap_Ints[PREG->u.sss.s1],sc)) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]<<Yap_Ints[PREG->u.sss.s2];
|
if (sc < 0)
|
||||||
|
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]>>-sc;
|
||||||
|
else
|
||||||
|
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]<<sc;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -12270,11 +12348,15 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(sr_c1, ssn);
|
Op(sr_c1, ssn);
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
if (sr_overflow(PREG->u.ssn.n,Yap_Ints[PREG->u.ssn.s1])) {
|
Int sc = Yap_Ints[PREG->u.ssn.s1];
|
||||||
|
if (sl_overflow(PREG->u.ssn.n,-sc)) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
Yap_Ints[PREG->u.ssn.s0] = PREG->u.ssn.n>>Yap_Ints[PREG->u.ssn.s1];
|
if (sc < 0)
|
||||||
|
Yap_Ints[PREG->u.ssn.s0] = PREG->u.ssn.n<<-sc;
|
||||||
|
else
|
||||||
|
Yap_Ints[PREG->u.ssn.s0] = PREG->u.ssn.n>>sc;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
@ -12286,7 +12368,7 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(sr_c2, ssn);
|
Op(sr_c2, ssn);
|
||||||
if (Yap_isint[PREG->u.ssn.s1]) {
|
if (Yap_isint[PREG->u.ssn.s1]) {
|
||||||
if (sr_overflow(Yap_Ints[PREG->u.ssn.s1],PREG->u.ssn.n)) {
|
if (sl_overflow(Yap_Ints[PREG->u.ssn.s1],-PREG->u.ssn.n)) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
@ -12302,14 +12384,18 @@ Yap_absmi(int inp)
|
|||||||
|
|
||||||
Op(sr, sss);
|
Op(sr, sss);
|
||||||
{
|
{
|
||||||
int off = PREG->u.sss.s0;
|
Int off = PREG->u.sss.s0;
|
||||||
if (Yap_isint[PREG->u.sss.s1]) {
|
if (Yap_isint[PREG->u.sss.s1]) {
|
||||||
if (Yap_isint[PREG->u.sss.s2]) {
|
if (Yap_isint[PREG->u.sss.s2]) {
|
||||||
if (sr_overflow(Yap_Ints[PREG->u.sss.s1],Yap_Ints[PREG->u.sss.s2])) {
|
Int sc = Yap_Ints[PREG->u.sss.s2];
|
||||||
|
if (sl_overflow(Yap_Ints[PREG->u.sss.s1],-sc)) {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
}
|
}
|
||||||
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]>>Yap_Ints[PREG->u.sss.s2];
|
if (sc < 0)
|
||||||
|
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]<<-sc;
|
||||||
|
else
|
||||||
|
Yap_Ints[off] = Yap_Ints[PREG->u.sss.s1]>>sc;
|
||||||
} else {
|
} else {
|
||||||
PREG = ARITH_EXCEPTION;
|
PREG = ARITH_EXCEPTION;
|
||||||
GONext();
|
GONext();
|
||||||
|
12
C/alloc.c
12
C/alloc.c
@ -249,7 +249,7 @@ InitExStacks(int Trail, int Stack)
|
|||||||
|
|
||||||
ScratchPad.ptr = NULL;
|
ScratchPad.ptr = NULL;
|
||||||
ScratchPad.sz = ScratchPad.msz = SCRATCH_START_SIZE;
|
ScratchPad.sz = ScratchPad.msz = SCRATCH_START_SIZE;
|
||||||
AuxSp = NULL;
|
AuxSp = NULL;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (Yap_output_msg) {
|
if (Yap_output_msg) {
|
||||||
@ -682,7 +682,9 @@ Yap_AllocCodeSpace(unsigned int size)
|
|||||||
/* int Yap_FreeWorkSpace() - release workspace */
|
/* int Yap_FreeWorkSpace() - release workspace */
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||||
|
|
||||||
|
#undef DEBUG_WIN32_ALLOC
|
||||||
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
|
||||||
@ -1413,7 +1415,7 @@ Yap_InitExStacks(int Trail, int Stack)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||||
#define WorkSpaceTop brk
|
#define WorkSpaceTop brk
|
||||||
#define MAP_FIXED 1
|
#define MAP_FIXED 1
|
||||||
#endif
|
#endif
|
||||||
@ -1433,7 +1435,7 @@ Yap_ExtendWorkSpace(Int s)
|
|||||||
UInt
|
UInt
|
||||||
Yap_ExtendWorkSpaceThroughHole(UInt s)
|
Yap_ExtendWorkSpaceThroughHole(UInt s)
|
||||||
{
|
{
|
||||||
#if USE_MMAP || defined(_WIN32)
|
#if USE_MMAP || defined(_WIN32) || defined(__CYGWIN__)
|
||||||
MALLOC_T WorkSpaceTop0 = WorkSpaceTop;
|
MALLOC_T WorkSpaceTop0 = WorkSpaceTop;
|
||||||
#if SIZEOF_INT_P==4
|
#if SIZEOF_INT_P==4
|
||||||
while (WorkSpaceTop < (MALLOC_T)0xc0000000L) {
|
while (WorkSpaceTop < (MALLOC_T)0xc0000000L) {
|
||||||
@ -1466,7 +1468,7 @@ Yap_ExtendWorkSpaceThroughHole(UInt s)
|
|||||||
void
|
void
|
||||||
Yap_AllocHole(UInt actual_request, UInt total_size)
|
Yap_AllocHole(UInt actual_request, UInt total_size)
|
||||||
{
|
{
|
||||||
#if (USE_MMAP || defined(_WIN32)) && !USE_DL_MALLOC
|
#if (USE_MMAP || defined(_WIN32) || defined(__CYGWIN__)) && !USE_DL_MALLOC
|
||||||
/* where we were when the hole was created,
|
/* where we were when the hole was created,
|
||||||
also where is the hole store */
|
also where is the hole store */
|
||||||
ADDR WorkSpaceTop0 = WorkSpaceTop-total_size;
|
ADDR WorkSpaceTop0 = WorkSpaceTop-total_size;
|
||||||
|
41
C/amasm.c
41
C/amasm.c
@ -483,8 +483,11 @@ a_lucl(op_numbers opcode, yamop *code_p, int pass_no, struct intermediates *cip,
|
|||||||
LogUpdIndex *lcl = (LogUpdIndex *)cip->code_addr;
|
LogUpdIndex *lcl = (LogUpdIndex *)cip->code_addr;
|
||||||
code_p->opc = emit_op(opcode);
|
code_p->opc = emit_op(opcode);
|
||||||
code_p->u.Ills.I = lcl;
|
code_p->u.Ills.I = lcl;
|
||||||
|
cip->cpc->rnd4 = (CELL)code_p;
|
||||||
cip->current_try_lab = &code_p->u.Ills.l1;
|
cip->current_try_lab = &code_p->u.Ills.l1;
|
||||||
cip->current_trust_lab = &code_p->u.Ills.l2;
|
cip->current_trust_lab = &code_p->u.Ills.l2;
|
||||||
|
code_p->u.Ills.l1 = NULL;
|
||||||
|
code_p->u.Ills.l2 = NULL;
|
||||||
code_p->u.Ills.s = cip->cpc->rnd3;
|
code_p->u.Ills.s = cip->cpc->rnd3;
|
||||||
}
|
}
|
||||||
GONEXT(Ills);
|
GONEXT(Ills);
|
||||||
@ -714,12 +717,12 @@ a_ssd(op_numbers opcode, yamop *code_p, int pass_no, struct PSEUDO *cpc)
|
|||||||
{
|
{
|
||||||
if (pass_no) {
|
if (pass_no) {
|
||||||
code_p->opc = emit_op(opcode);
|
code_p->opc = emit_op(opcode);
|
||||||
code_p->u.ssd.s0 = cpc->rnd1;
|
code_p->u.ssd.s0 = IntegerOfTerm(cpc->rnd1);
|
||||||
code_p->u.ssd.s1 = cpc->rnd2;
|
code_p->u.ssd.s1 = IntegerOfTerm(cpc->rnd2);
|
||||||
code_p->u.ssd.d[0] = (CELL)FunctorDouble;
|
code_p->u.ssd.d[0] = (CELL)FunctorDouble;
|
||||||
code_p->u.ssd.d[1] = RepAppl(cpc->rnd1)[1];
|
code_p->u.ssd.d[1] = RepAppl(cpc->rnd3)[1];
|
||||||
#if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
|
#if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
|
||||||
code_p->u.ssd.d[2] = RepAppl(cpc->rnd1)[2];
|
code_p->u.ssd.d[2] = RepAppl(cpc->rnd3)[2];
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
GONEXT(ssd);
|
GONEXT(ssd);
|
||||||
@ -731,9 +734,9 @@ a_ssn(op_numbers opcode, yamop *code_p, int pass_no, struct PSEUDO *cpc)
|
|||||||
{
|
{
|
||||||
if (pass_no) {
|
if (pass_no) {
|
||||||
code_p->opc = emit_op(opcode);
|
code_p->opc = emit_op(opcode);
|
||||||
code_p->u.ssn.s0 = cpc->rnd1;
|
code_p->u.ssn.s0 = IntegerOfTerm(cpc->rnd1);
|
||||||
code_p->u.ssn.s1 = cpc->rnd2;
|
code_p->u.ssn.s1 = IntegerOfTerm(cpc->rnd2);
|
||||||
code_p->u.ssn.n = IntegerOfTerm(cpc->rnd1);
|
code_p->u.ssn.n = IntegerOfTerm(cpc->rnd3);
|
||||||
}
|
}
|
||||||
GONEXT(ssn);
|
GONEXT(ssn);
|
||||||
return code_p;
|
return code_p;
|
||||||
@ -744,9 +747,9 @@ a_sss(op_numbers opcode, yamop *code_p, int pass_no, struct PSEUDO *cpc)
|
|||||||
{
|
{
|
||||||
if (pass_no) {
|
if (pass_no) {
|
||||||
code_p->opc = emit_op(opcode);
|
code_p->opc = emit_op(opcode);
|
||||||
code_p->u.sss.s0 = cpc->rnd1;
|
code_p->u.sss.s0 = IntegerOfTerm(cpc->rnd1);
|
||||||
code_p->u.sss.s1 = cpc->rnd2;
|
code_p->u.sss.s1 = IntegerOfTerm(cpc->rnd2);
|
||||||
code_p->u.sss.s2 = cpc->rnd3;
|
code_p->u.sss.s2 = IntegerOfTerm(cpc->rnd3);
|
||||||
}
|
}
|
||||||
GONEXT(sss);
|
GONEXT(sss);
|
||||||
return code_p;
|
return code_p;
|
||||||
@ -1999,18 +2002,8 @@ a_try(op_numbers opcode, CELL lab, CELL opr, int nofalts, int hascut, yamop *cod
|
|||||||
Yap_NewCps++;
|
Yap_NewCps++;
|
||||||
Yap_LiveCps++;
|
Yap_LiveCps++;
|
||||||
#endif
|
#endif
|
||||||
if (opcode == try_op) {
|
newcp->u.OtaLl.n = NULL;
|
||||||
/*
|
*cip->current_try_lab = newcp;
|
||||||
use the last n field to keep a chain with all
|
|
||||||
try-retry-trust
|
|
||||||
instructions allocated in this run
|
|
||||||
*/
|
|
||||||
newcp->u.OtaLl.n = cip->try_instructions;
|
|
||||||
cip->try_instructions = newcp;
|
|
||||||
} else {
|
|
||||||
newcp->u.OtaLl.n = *cip->current_try_lab;
|
|
||||||
*cip->current_try_lab = newcp;
|
|
||||||
}
|
|
||||||
if (opcode == _try_clause) {
|
if (opcode == _try_clause) {
|
||||||
newcp->opc = emit_op(_try_logical);
|
newcp->opc = emit_op(_try_logical);
|
||||||
newcp->u.OtaLl.s = emit_count(opr);
|
newcp->u.OtaLl.s = emit_count(opr);
|
||||||
@ -2023,6 +2016,7 @@ a_try(op_numbers opcode, CELL lab, CELL opr, int nofalts, int hascut, yamop *cod
|
|||||||
newcp->opc = emit_op(_retry_logical);
|
newcp->opc = emit_op(_retry_logical);
|
||||||
newcp->u.OtaLl.s = emit_count(opr);
|
newcp->u.OtaLl.s = emit_count(opr);
|
||||||
} else {
|
} else {
|
||||||
|
/* trust */
|
||||||
if (ap->PredFlags & CountPredFlag)
|
if (ap->PredFlags & CountPredFlag)
|
||||||
newcp->opc = emit_op(_count_trust_logical);
|
newcp->opc = emit_op(_count_trust_logical);
|
||||||
else if (ap->PredFlags & ProfiledPredFlag)
|
else if (ap->PredFlags & ProfiledPredFlag)
|
||||||
@ -3754,6 +3748,9 @@ do_pass(int pass_no, yamop **entry_codep, int assembling, int *clause_has_blobsp
|
|||||||
case index_blob_op:
|
case index_blob_op:
|
||||||
code_p = a_e(_index_blob, code_p, pass_no);
|
code_p = a_e(_index_blob, code_p, pass_no);
|
||||||
break;
|
break;
|
||||||
|
case index_long_op:
|
||||||
|
code_p = a_e(_index_long, code_p, pass_no);
|
||||||
|
break;
|
||||||
case mark_initialised_pvars_op:
|
case mark_initialised_pvars_op:
|
||||||
if (!ystop_found) {
|
if (!ystop_found) {
|
||||||
code_p = a_il((CELL)*entry_codep, _Ystop, code_p, pass_no, cip);
|
code_p = a_il((CELL)*entry_codep, _Ystop, code_p, pass_no, cip);
|
||||||
|
12
C/arith1.c
12
C/arith1.c
@ -441,6 +441,7 @@ eval1(Int fi, Term t) {
|
|||||||
} else {
|
} else {
|
||||||
dbl = mpz_get_d(Yap_BigIntOfTerm(t));
|
dbl = mpz_get_d(Yap_BigIntOfTerm(t));
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case db_ref_e:
|
case db_ref_e:
|
||||||
RERROR();
|
RERROR();
|
||||||
@ -474,6 +475,7 @@ eval1(Int fi, Term t) {
|
|||||||
} else {
|
} else {
|
||||||
dbl = mpz_get_d(Yap_BigIntOfTerm(t));
|
dbl = mpz_get_d(Yap_BigIntOfTerm(t));
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case db_ref_e:
|
case db_ref_e:
|
||||||
RERROR();
|
RERROR();
|
||||||
@ -508,6 +510,7 @@ eval1(Int fi, Term t) {
|
|||||||
} else {
|
} else {
|
||||||
dbl = mpz_get_d(Yap_BigIntOfTerm(t));
|
dbl = mpz_get_d(Yap_BigIntOfTerm(t));
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case db_ref_e:
|
case db_ref_e:
|
||||||
RERROR();
|
RERROR();
|
||||||
@ -543,6 +546,7 @@ eval1(Int fi, Term t) {
|
|||||||
} else {
|
} else {
|
||||||
dbl = mpz_get_d(Yap_BigIntOfTerm(t));
|
dbl = mpz_get_d(Yap_BigIntOfTerm(t));
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case db_ref_e:
|
case db_ref_e:
|
||||||
RERROR();
|
RERROR();
|
||||||
@ -629,7 +633,7 @@ eval1(Int fi, Term t) {
|
|||||||
RERROR();
|
RERROR();
|
||||||
}
|
}
|
||||||
case op_msb:
|
case op_msb:
|
||||||
switch (ETypeOfTerm(f)) {
|
switch (ETypeOfTerm(t)) {
|
||||||
case long_int_e:
|
case long_int_e:
|
||||||
RINT(msb(IntegerOfTerm(t)));
|
RINT(msb(IntegerOfTerm(t)));
|
||||||
case double_e:
|
case double_e:
|
||||||
@ -644,7 +648,7 @@ eval1(Int fi, Term t) {
|
|||||||
RERROR();
|
RERROR();
|
||||||
}
|
}
|
||||||
case op_ffracp:
|
case op_ffracp:
|
||||||
switch (ETypeOfTerm(f)) {
|
switch (ETypeOfTerm(t)) {
|
||||||
case long_int_e:
|
case long_int_e:
|
||||||
if (yap_flags[LANGUAGE_MODE_FLAG] == 1) { /* iso */
|
if (yap_flags[LANGUAGE_MODE_FLAG] == 1) { /* iso */
|
||||||
Yap_Error(TYPE_ERROR_FLOAT, t, "X is float_fractional_part(%f)", IntegerOfTerm(t));
|
Yap_Error(TYPE_ERROR_FLOAT, t, "X is float_fractional_part(%f)", IntegerOfTerm(t));
|
||||||
@ -673,7 +677,7 @@ eval1(Int fi, Term t) {
|
|||||||
RERROR();
|
RERROR();
|
||||||
}
|
}
|
||||||
case op_fintp:
|
case op_fintp:
|
||||||
switch (ETypeOfTerm(f)) {
|
switch (ETypeOfTerm(t)) {
|
||||||
case long_int_e:
|
case long_int_e:
|
||||||
if (yap_flags[LANGUAGE_MODE_FLAG] == 1) { /* iso */
|
if (yap_flags[LANGUAGE_MODE_FLAG] == 1) { /* iso */
|
||||||
Yap_Error(TYPE_ERROR_FLOAT, t, "X is float_integer_part(%f)", IntegerOfTerm(t));
|
Yap_Error(TYPE_ERROR_FLOAT, t, "X is float_integer_part(%f)", IntegerOfTerm(t));
|
||||||
@ -698,7 +702,7 @@ eval1(Int fi, Term t) {
|
|||||||
RERROR();
|
RERROR();
|
||||||
}
|
}
|
||||||
case op_sign:
|
case op_sign:
|
||||||
switch (ETypeOfTerm(f)) {
|
switch (ETypeOfTerm(t)) {
|
||||||
case long_int_e:
|
case long_int_e:
|
||||||
{
|
{
|
||||||
Int x = IntegerOfTerm(t);
|
Int x = IntegerOfTerm(t);
|
||||||
|
10
C/arith2.c
10
C/arith2.c
@ -74,6 +74,9 @@ p_mod(Term t1, Term t2) {
|
|||||||
Int mod;
|
Int mod;
|
||||||
|
|
||||||
if (i2 == 0) goto zero_divisor;
|
if (i2 == 0) goto zero_divisor;
|
||||||
|
if (i1 == Int_MIN && i2 == -1) {
|
||||||
|
return Yap_gmp_add_ints(Int_MAX, 1);
|
||||||
|
}
|
||||||
mod = i1%i2;
|
mod = i1%i2;
|
||||||
if (mod && (mod ^ i2) < 0)
|
if (mod && (mod ^ i2) < 0)
|
||||||
mod += i2;
|
mod += i2;
|
||||||
@ -163,6 +166,9 @@ p_rem(Term t1, Term t2) {
|
|||||||
Int mod;
|
Int mod;
|
||||||
|
|
||||||
if (i2 == 0) goto zero_divisor;
|
if (i2 == 0) goto zero_divisor;
|
||||||
|
if (i1 == Int_MIN && i2 == -1) {
|
||||||
|
return Yap_gmp_add_ints(Int_MAX, 1);
|
||||||
|
}
|
||||||
mod = i1%i2;
|
mod = i1%i2;
|
||||||
RINT(i1%i2);
|
RINT(i1%i2);
|
||||||
}
|
}
|
||||||
@ -358,7 +364,7 @@ p_xor(Term t1, Term t2)
|
|||||||
{
|
{
|
||||||
MP_INT new;
|
MP_INT new;
|
||||||
|
|
||||||
mpz_init_set_si(&new,IntOfTerm(t1));
|
mpz_init_set_si(&new,IntegerOfTerm(t1));
|
||||||
mpz_xor(&new, &new, Yap_BigIntOfTerm(t2));
|
mpz_xor(&new, &new, Yap_BigIntOfTerm(t2));
|
||||||
RBIG(&new);
|
RBIG(&new);
|
||||||
}
|
}
|
||||||
@ -1072,7 +1078,7 @@ p_binary_is(void)
|
|||||||
if (t2 == 0L)
|
if (t2 == 0L)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (IsIntTerm(t)) {
|
if (IsIntTerm(t)) {
|
||||||
return Yap_unify_constant(ARG1,eval2(IntOfTerm(t), t1, t2));
|
return Yap_unify_constant(ARG1,eval2(IntegerOfTerm(t), t1, t2));
|
||||||
}
|
}
|
||||||
if (IsAtomTerm(t)) {
|
if (IsAtomTerm(t)) {
|
||||||
Atom name = AtomOfTerm(t);
|
Atom name = AtomOfTerm(t);
|
||||||
|
@ -1094,6 +1094,7 @@ cleanup_dangling_indices(yamop *ipc, yamop *beg, yamop *end, yamop *suspend_code
|
|||||||
return;
|
return;
|
||||||
case _index_dbref:
|
case _index_dbref:
|
||||||
case _index_blob:
|
case _index_blob:
|
||||||
|
case _index_long:
|
||||||
ipc = NEXTOP(ipc,e);
|
ipc = NEXTOP(ipc,e);
|
||||||
break;
|
break;
|
||||||
case _lock_lu:
|
case _lock_lu:
|
||||||
@ -2050,7 +2051,7 @@ addclause(Term t, yamop *cp, int mode, Term mod, Term *t4ref)
|
|||||||
LOCK(p->PELock);
|
LOCK(p->PELock);
|
||||||
pflags = p->PredFlags;
|
pflags = p->PredFlags;
|
||||||
/* we are redefining a prolog module predicate */
|
/* we are redefining a prolog module predicate */
|
||||||
if ((pflags & (UserCPredFlag|CArgsPredFlag|NumberDBPredFlag|AtomDBPredFlag|TestPredFlag|AsmPredFlag|CPredFlag|BinaryTestPredFlag)) ||
|
if ((pflags & (UserCPredFlag|CArgsPredFlag|NumberDBPredFlag|AtomDBPredFlag|TestPredFlag|AsmPredFlag|CPredFlag|BinaryPredFlag)) ||
|
||||||
(p->ModuleOfPred == PROLOG_MODULE &&
|
(p->ModuleOfPred == PROLOG_MODULE &&
|
||||||
mod != TermProlog && mod) ) {
|
mod != TermProlog && mod) ) {
|
||||||
addcl_permission_error(RepAtom(at), Arity, FALSE);
|
addcl_permission_error(RepAtom(at), Arity, FALSE);
|
||||||
@ -4191,7 +4192,7 @@ p_system_pred(void)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
return(!pe->ModuleOfPred || /* any predicate in prolog module */
|
return(!pe->ModuleOfPred || /* any predicate in prolog module */
|
||||||
/* any C-pred */
|
/* any C-pred */
|
||||||
pe->PredFlags & (UserCPredFlag|CPredFlag|BinaryTestPredFlag|AsmPredFlag|TestPredFlag) ||
|
pe->PredFlags & (UserCPredFlag|CPredFlag|BinaryPredFlag|AsmPredFlag|TestPredFlag) ||
|
||||||
/* any weird user built-in */
|
/* any weird user built-in */
|
||||||
pe->OpcodeOfPred == Yap_opcode(_try_userc));
|
pe->OpcodeOfPred == Yap_opcode(_try_userc));
|
||||||
}
|
}
|
||||||
@ -4243,7 +4244,7 @@ p_all_system_pred(void)
|
|||||||
}
|
}
|
||||||
return(!pe->ModuleOfPred || /* any predicate in prolog module */
|
return(!pe->ModuleOfPred || /* any predicate in prolog module */
|
||||||
/* any C-pred */
|
/* any C-pred */
|
||||||
pe->PredFlags & (UserCPredFlag|CPredFlag|BinaryTestPredFlag|AsmPredFlag|TestPredFlag) ||
|
pe->PredFlags & (UserCPredFlag|CPredFlag|BinaryPredFlag|AsmPredFlag|TestPredFlag) ||
|
||||||
/* any weird user built-in */
|
/* any weird user built-in */
|
||||||
pe->OpcodeOfPred == Yap_opcode(_try_userc));
|
pe->OpcodeOfPred == Yap_opcode(_try_userc));
|
||||||
}
|
}
|
||||||
@ -5271,7 +5272,7 @@ p_static_pred_statistics(void)
|
|||||||
if (pe == NIL)
|
if (pe == NIL)
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
LOCK(pe->PELock);
|
LOCK(pe->PELock);
|
||||||
if (pe->PredFlags & (DynamicPredFlag|LogUpdatePredFlag|UserCPredFlag|AsmPredFlag|CPredFlag|BinaryTestPredFlag)) {
|
if (pe->PredFlags & (DynamicPredFlag|LogUpdatePredFlag|UserCPredFlag|AsmPredFlag|CPredFlag|BinaryPredFlag)) {
|
||||||
/* should use '$recordedp' in this case */
|
/* should use '$recordedp' in this case */
|
||||||
UNLOCK(pe->PELock);
|
UNLOCK(pe->PELock);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
50
C/cmppreds.c
50
C/cmppreds.c
@ -585,21 +585,21 @@ a_cmp(Term t1, Term t2)
|
|||||||
} else if (IsBigIntTerm(t1)) {
|
} else if (IsBigIntTerm(t1)) {
|
||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
{
|
{
|
||||||
t2 = Yap_Eval(t2);
|
MP_INT *b1 = Yap_BigIntOfTerm(t1);
|
||||||
MP_INT *b1 = Yap_BigIntOfTerm(t1);
|
t2 = Yap_Eval(t2);
|
||||||
|
|
||||||
if (IsIntegerTerm(t2)) {
|
if (IsIntegerTerm(t2)) {
|
||||||
Int i2 = IntegerOfTerm(t2);
|
Int i2 = IntegerOfTerm(t2);
|
||||||
return int_cmp(mpz_cmp_si(b1,i2));
|
return int_cmp(mpz_cmp_si(b1,i2));
|
||||||
} else if (IsFloatTerm(t2)) {
|
} else if (IsFloatTerm(t2)) {
|
||||||
Float f2 = FloatOfTerm(2);
|
Float f2 = FloatOfTerm(t2);
|
||||||
return flt_cmp(mpz_get_d(b1)-f2);
|
return flt_cmp(mpz_get_d(b1)-f2);
|
||||||
} else if (IsBigIntTerm(t2)) {
|
} else if (IsBigIntTerm(t2)) {
|
||||||
MP_INT *b2 = Yap_BigIntOfTerm(2);
|
MP_INT *b2 = Yap_BigIntOfTerm(2);
|
||||||
return int_cmp(mpz_cmp(b1,b2));
|
return int_cmp(mpz_cmp(b1,b2));
|
||||||
} else {
|
} else {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
@ -737,17 +737,17 @@ a_gen_ge(Term t1, Term t2)
|
|||||||
void
|
void
|
||||||
Yap_InitCmpPreds(void)
|
Yap_InitCmpPreds(void)
|
||||||
{
|
{
|
||||||
Yap_InitCmpPred("=:=", 2, a_eq, SafePredFlag | BinaryTestPredFlag);
|
Yap_InitCmpPred("=:=", 2, a_eq, SafePredFlag | BinaryPredFlag);
|
||||||
Yap_InitCmpPred("=\\=", 2, a_dif, SafePredFlag | BinaryTestPredFlag);
|
Yap_InitCmpPred("=\\=", 2, a_dif, SafePredFlag | BinaryPredFlag);
|
||||||
Yap_InitCmpPred(">", 2, a_gt, SafePredFlag | BinaryTestPredFlag);
|
Yap_InitCmpPred(">", 2, a_gt, SafePredFlag | BinaryPredFlag);
|
||||||
Yap_InitCmpPred("=<", 2, a_le, SafePredFlag | BinaryTestPredFlag);
|
Yap_InitCmpPred("=<", 2, a_le, SafePredFlag | BinaryPredFlag);
|
||||||
Yap_InitCmpPred("<", 2, a_lt, SafePredFlag | BinaryTestPredFlag);
|
Yap_InitCmpPred("<", 2, a_lt, SafePredFlag | BinaryPredFlag);
|
||||||
Yap_InitCmpPred(">=", 2, a_ge, SafePredFlag | BinaryTestPredFlag);
|
Yap_InitCmpPred(">=", 2, a_ge, SafePredFlag | BinaryPredFlag);
|
||||||
Yap_InitCPred("$a_compare", 3, p_acomp, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$a_compare", 3, p_acomp, TestPredFlag | SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCmpPred("\\==", 2, a_noteq, BinaryTestPredFlag | SafePredFlag);
|
Yap_InitCmpPred("\\==", 2, a_noteq, BinaryPredFlag | SafePredFlag);
|
||||||
Yap_InitCmpPred("@<", 2, a_gen_lt, BinaryTestPredFlag | SafePredFlag);
|
Yap_InitCmpPred("@<", 2, a_gen_lt, BinaryPredFlag | SafePredFlag);
|
||||||
Yap_InitCmpPred("@=<", 2, a_gen_le, BinaryTestPredFlag | SafePredFlag);
|
Yap_InitCmpPred("@=<", 2, a_gen_le, BinaryPredFlag | SafePredFlag);
|
||||||
Yap_InitCmpPred("@>", 2, a_gen_gt, BinaryTestPredFlag | SafePredFlag);
|
Yap_InitCmpPred("@>", 2, a_gen_gt, BinaryPredFlag | SafePredFlag);
|
||||||
Yap_InitCmpPred("@>=", 2, a_gen_ge, BinaryTestPredFlag | SafePredFlag);
|
Yap_InitCmpPred("@>=", 2, a_gen_ge, BinaryPredFlag | SafePredFlag);
|
||||||
Yap_InitCPred("compare", 3, p_compare, TestPredFlag | SafePredFlag);
|
Yap_InitCPred("compare", 3, p_compare, TestPredFlag | SafePredFlag);
|
||||||
}
|
}
|
||||||
|
149
C/compiler.c
149
C/compiler.c
@ -678,9 +678,9 @@ c_arg(Int argno, Term t, unsigned int arity, unsigned int level, compiler_struct
|
|||||||
CELL l1 = ++cglobs->labelno;
|
CELL l1 = ++cglobs->labelno;
|
||||||
CELL *src = RepAppl(t);
|
CELL *src = RepAppl(t);
|
||||||
PInstr *ocpc = cglobs->cint.cpc, *OCodeStart = cglobs->cint.CodeStart;
|
PInstr *ocpc = cglobs->cint.cpc, *OCodeStart = cglobs->cint.CodeStart;
|
||||||
Int sz = sizeof(CELL)+
|
Int sz = 2*sizeof(CELL)+
|
||||||
sizeof(MP_INT)+
|
sizeof(MP_INT)+
|
||||||
((((MP_INT *)(RepAppl(t)+1))->_mp_alloc)*sizeof(mp_limb_t));
|
((((MP_INT *)(RepAppl(t)+2))->_mp_alloc)*sizeof(mp_limb_t));
|
||||||
CELL *dest;
|
CELL *dest;
|
||||||
|
|
||||||
/* use a special list to store the blobs */
|
/* use a special list to store the blobs */
|
||||||
@ -1381,11 +1381,11 @@ IsTrueGoal(Term t) {
|
|||||||
static void
|
static void
|
||||||
c_p_put(Term Goal, op_numbers op_var, op_numbers op_val, compiler_struct * cglobs)
|
c_p_put(Term Goal, op_numbers op_var, op_numbers op_val, compiler_struct * cglobs)
|
||||||
{
|
{
|
||||||
Term t = Deref(ArgOfTerm(1, Goal));
|
Term t = Deref(ArgOfTerm(2, Goal));
|
||||||
int new = check_var(t, 1, 0, cglobs);
|
int new = check_var(t, 1, 0, cglobs);
|
||||||
t = Deref(t);
|
t = Deref(t);
|
||||||
Yap_emit((new ?
|
Yap_emit((new ?
|
||||||
(++cglobs->nvars,op_var) : op_val), t, IntegerOfTerm(ArgOfTerm(2, Goal)), &cglobs->cint);
|
(++cglobs->nvars,op_var) : op_val), t, IntegerOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
||||||
tag_var(t, new, cglobs);
|
tag_var(t, new, cglobs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1426,7 +1426,17 @@ emit_special_label(Term Goal, compiler_struct *cglobs)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPECIAL_LABEL_CLEAR:
|
case SPECIAL_LABEL_CLEAR:
|
||||||
return;
|
switch (lab_id) {
|
||||||
|
case SPECIAL_LABEL_EXCEPTION:
|
||||||
|
cglobs->cint.exception_handler = 0L;
|
||||||
|
break;
|
||||||
|
case SPECIAL_LABEL_SUCCESS:
|
||||||
|
cglobs->cint.success_handler = 0L;
|
||||||
|
break;
|
||||||
|
case SPECIAL_LABEL_FAILURE:
|
||||||
|
cglobs->cint.failure_handler = 0L;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1850,165 +1860,165 @@ c_goal(Term Goal, int mod, compiler_struct *cglobs)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (op >= _p_put_fi && op <= _p_sl) {
|
} else if (op >= _p_put_fi && op <= _p_label_ctl) {
|
||||||
switch(op) {
|
switch(op) {
|
||||||
/* one should never get a new variable here */
|
/* one should never get a new variable here */
|
||||||
case _p_get_fi:
|
case _p_get_fi:
|
||||||
c_p_put(Goal, get_fi_op, get_fi_op, cglobs);
|
c_p_put(Goal, get_fi_op, get_fi_op, cglobs);
|
||||||
break;
|
return;
|
||||||
case _p_get_i:
|
case _p_get_i:
|
||||||
c_p_put(Goal, get_i_op, get_i_op, cglobs);
|
c_p_put(Goal, get_i_op, get_i_op, cglobs);
|
||||||
break;
|
return;
|
||||||
case _p_get_f:
|
case _p_get_f:
|
||||||
c_p_put(Goal, get_f_op, get_f_op, cglobs);
|
c_p_put(Goal, get_f_op, get_f_op, cglobs);
|
||||||
break;
|
return;
|
||||||
case _p_put_fi:
|
case _p_put_fi:
|
||||||
c_p_put(Goal, put_fi_var_op, put_fi_val_op, cglobs);
|
c_p_put(Goal, put_fi_var_op, put_fi_val_op, cglobs);
|
||||||
break;
|
return;
|
||||||
case _p_put_i:
|
case _p_put_i:
|
||||||
c_p_put(Goal, put_i_var_op, put_i_val_op, cglobs);
|
c_p_put(Goal, put_i_var_op, put_i_val_op, cglobs);
|
||||||
break;
|
return;
|
||||||
case _p_put_f:
|
case _p_put_f:
|
||||||
c_p_put(Goal, put_f_var_op, put_f_val_op, cglobs);
|
c_p_put(Goal, put_f_var_op, put_f_val_op, cglobs);
|
||||||
break;
|
return;
|
||||||
case _p_a_eq_float:
|
case _p_a_eq_float:
|
||||||
Yap_emit(a_eqc_float_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
Yap_emit(a_eqc_float_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_a_eq_int:
|
case _p_a_eq_int:
|
||||||
Yap_emit(a_eqc_int_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
Yap_emit(a_eqc_int_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_a_eq:
|
case _p_a_eq:
|
||||||
Yap_emit(a_eq_op, IntOfTerm(ArgOfTerm(1, Goal)), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
Yap_emit(a_eq_op, IntOfTerm(ArgOfTerm(1, Goal)), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_ltc_float:
|
case _p_ltc_float:
|
||||||
Yap_emit(ltc_float_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
Yap_emit(ltc_float_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_ltc_int:
|
case _p_ltc_int:
|
||||||
Yap_emit(ltc_int_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
Yap_emit(ltc_int_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_lt:
|
case _p_lt:
|
||||||
Yap_emit(lt_op, IntOfTerm(ArgOfTerm(1, Goal)), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
Yap_emit(lt_op, IntOfTerm(ArgOfTerm(1, Goal)), IntOfTerm(ArgOfTerm(2, Goal)), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_gtc_float:
|
case _p_gtc_float:
|
||||||
Yap_emit(gtc_float_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
Yap_emit(gtc_float_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_gtc_int:
|
case _p_gtc_int:
|
||||||
Yap_emit(gtc_int_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
Yap_emit(gtc_int_op, ArgOfTerm(2, Goal), IntOfTerm(ArgOfTerm(1, Goal)), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_add_float_c:
|
case _p_add_float_c:
|
||||||
Yap_emit_3ops(add_float_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(add_float_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_add_int_c:
|
case _p_add_int_c:
|
||||||
Yap_emit_3ops(add_int_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(add_int_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_add:
|
case _p_add:
|
||||||
Yap_emit_3ops(add_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(add_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_sub_float_c:
|
case _p_sub_float_c:
|
||||||
Yap_emit_3ops(sub_float_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(sub_float_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_sub_int_c:
|
case _p_sub_int_c:
|
||||||
Yap_emit_3ops(sub_int_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(sub_int_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_sub:
|
case _p_sub:
|
||||||
Yap_emit_3ops(sub_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(sub_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_mul_float_c:
|
case _p_mul_float_c:
|
||||||
Yap_emit_3ops(mul_float_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(mul_float_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_mul_int_c:
|
case _p_mul_int_c:
|
||||||
Yap_emit_3ops(mul_int_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(mul_int_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_mul:
|
case _p_mul:
|
||||||
Yap_emit_3ops(mul_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(mul_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_fdiv_c1:
|
case _p_fdiv_c1:
|
||||||
Yap_emit_3ops(fdiv_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(fdiv_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_fdiv_c2:
|
case _p_fdiv_c2:
|
||||||
Yap_emit_3ops(fdiv_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(fdiv_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_fdiv:
|
case _p_fdiv:
|
||||||
Yap_emit_3ops(fdiv_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(fdiv_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_idiv_c1:
|
case _p_idiv_c1:
|
||||||
Yap_emit_3ops(idiv_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(idiv_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_idiv_c2:
|
case _p_idiv_c2:
|
||||||
Yap_emit_3ops(idiv_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(idiv_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_idiv:
|
case _p_idiv:
|
||||||
Yap_emit_3ops(idiv_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(idiv_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_mod_c1:
|
case _p_mod_c1:
|
||||||
Yap_emit_3ops(mod_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(mod_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_mod_c2:
|
case _p_mod_c2:
|
||||||
Yap_emit_3ops(mod_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(mod_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_mod:
|
case _p_mod:
|
||||||
Yap_emit_3ops(mod_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(mod_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_rem_c1:
|
case _p_rem_c1:
|
||||||
Yap_emit_3ops(rem_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(rem_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_rem_c2:
|
case _p_rem_c2:
|
||||||
Yap_emit_3ops(rem_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(rem_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_rem:
|
case _p_rem:
|
||||||
Yap_emit_3ops(rem_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(rem_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_land_c:
|
case _p_land_c:
|
||||||
Yap_emit_3ops(a_and_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(a_and_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_land:
|
case _p_land:
|
||||||
Yap_emit_3ops(a_and_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(a_and_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_lor_c:
|
case _p_lor_c:
|
||||||
Yap_emit_3ops(a_or_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(a_or_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_lor:
|
case _p_lor:
|
||||||
Yap_emit_3ops(a_or_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(a_or_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_xor_c:
|
case _p_xor_c:
|
||||||
Yap_emit_3ops(xor_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(xor_c_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_xor:
|
case _p_xor:
|
||||||
Yap_emit_3ops(xor_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(xor_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_uminus:
|
case _p_uminus:
|
||||||
Yap_emit(uminus_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), &cglobs->cint);
|
Yap_emit(uminus_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_sr_c1:
|
case _p_sr_c1:
|
||||||
Yap_emit_3ops(sr_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(sr_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_sr_c2:
|
case _p_sr_c2:
|
||||||
Yap_emit_3ops(sr_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(sr_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_sr:
|
case _p_sr:
|
||||||
Yap_emit_3ops(sr_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(sr_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_sl_c1:
|
case _p_sl_c1:
|
||||||
Yap_emit_3ops(sl_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(sl_c1_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_sl_c2:
|
case _p_sl_c2:
|
||||||
Yap_emit_3ops(sl_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(sl_c2_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_sl:
|
case _p_sl:
|
||||||
Yap_emit_3ops(sl_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
Yap_emit_3ops(sl_op, ArgOfTerm(1,Goal), ArgOfTerm(2,Goal), ArgOfTerm(3,Goal), &cglobs->cint);
|
||||||
break;
|
return;
|
||||||
case _p_label_ctl:
|
case _p_label_ctl:
|
||||||
emit_special_label(Goal, cglobs);
|
emit_special_label(Goal, cglobs);
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
c_args(Goal, 0, cglobs);
|
c_args(Goal, 0, cglobs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef BEAM
|
#ifdef BEAM
|
||||||
else if (p->PredFlags & BinaryTestPredFlag && !EAM) {
|
else if (p->PredFlags & BinaryPredFlag && !EAM) {
|
||||||
#else
|
#else
|
||||||
else if (p->PredFlags & BinaryTestPredFlag) {
|
else if (p->PredFlags & BinaryPredFlag) {
|
||||||
#endif
|
#endif
|
||||||
Term a1 = ArgOfTerm(1,Goal);
|
Term a1 = ArgOfTerm(1,Goal);
|
||||||
|
|
||||||
@ -2184,7 +2194,7 @@ c_body(Term Body, int mod, compiler_struct *cglobs)
|
|||||||
while (IsNonVarTerm(Body) && IsApplTerm(Body)
|
while (IsNonVarTerm(Body) && IsApplTerm(Body)
|
||||||
&& FunctorOfTerm(Body) == FunctorComma) {
|
&& FunctorOfTerm(Body) == FunctorComma) {
|
||||||
Term t2 = ArgOfTerm(2, Body);
|
Term t2 = ArgOfTerm(2, Body);
|
||||||
if (IsTrueGoal(t2)) {
|
if (!cglobs->cint.success_handler && IsTrueGoal(t2)) {
|
||||||
/* optimise the case where some idiot left trues at the end
|
/* optimise the case where some idiot left trues at the end
|
||||||
of the clause.
|
of the clause.
|
||||||
*/
|
*/
|
||||||
@ -2262,6 +2272,15 @@ usesvar(compiler_vm_op ic)
|
|||||||
case f_var_op:
|
case f_var_op:
|
||||||
case fetch_args_for_bccall:
|
case fetch_args_for_bccall:
|
||||||
case bccall_op:
|
case bccall_op:
|
||||||
|
case get_fi_op:
|
||||||
|
case get_i_op:
|
||||||
|
case get_f_op:
|
||||||
|
case put_fi_var_op:
|
||||||
|
case put_i_var_op:
|
||||||
|
case put_f_var_op:
|
||||||
|
case put_fi_val_op:
|
||||||
|
case put_i_val_op:
|
||||||
|
case put_f_val_op:
|
||||||
return TRUE;
|
return TRUE;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -2556,6 +2575,9 @@ CheckUnsafe(PInstr *pc, compiler_struct *cglobs)
|
|||||||
case save_appl_op:
|
case save_appl_op:
|
||||||
case save_pair_op:
|
case save_pair_op:
|
||||||
case f_var_op:
|
case f_var_op:
|
||||||
|
case put_fi_var_op:
|
||||||
|
case put_i_var_op:
|
||||||
|
case put_f_var_op:
|
||||||
{
|
{
|
||||||
Ventry *v = (Ventry *) (pc->rnd1);
|
Ventry *v = (Ventry *) (pc->rnd1);
|
||||||
|
|
||||||
@ -2995,6 +3017,15 @@ c_layout(compiler_struct *cglobs)
|
|||||||
#endif
|
#endif
|
||||||
case fetch_args_for_bccall:
|
case fetch_args_for_bccall:
|
||||||
case bccall_op:
|
case bccall_op:
|
||||||
|
case get_fi_op:
|
||||||
|
case get_f_op:
|
||||||
|
case get_i_op:
|
||||||
|
case put_fi_var_op:
|
||||||
|
case put_f_var_op:
|
||||||
|
case put_i_var_op:
|
||||||
|
case put_fi_val_op:
|
||||||
|
case put_f_val_op:
|
||||||
|
case put_i_val_op:
|
||||||
checktemp(arg, rn, ic, cglobs);
|
checktemp(arg, rn, ic, cglobs);
|
||||||
break;
|
break;
|
||||||
case get_atom_op:
|
case get_atom_op:
|
||||||
|
@ -144,7 +144,7 @@ is_a_test(Term arg, Term mod)
|
|||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return pe->PredFlags & (TestPredFlag|BinaryTestPredFlag);
|
return pe->PredFlags & (TestPredFlag|BinaryPredFlag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -664,6 +664,7 @@ static char *opformat[] =
|
|||||||
"if_not_then\t%i\t%h\t%h\t%h",
|
"if_not_then\t%i\t%h\t%h\t%h",
|
||||||
"index_on_dbref",
|
"index_on_dbref",
|
||||||
"index_on_blob",
|
"index_on_blob",
|
||||||
|
"index_on_long",
|
||||||
"check_var\t %r",
|
"check_var\t %r",
|
||||||
"save_pair\t%v",
|
"save_pair\t%v",
|
||||||
"save_appl\t%v",
|
"save_appl\t%v",
|
||||||
@ -735,7 +736,59 @@ static char *opformat[] =
|
|||||||
#endif
|
#endif
|
||||||
"fetch_args_for_bccall\t%v",
|
"fetch_args_for_bccall\t%v",
|
||||||
"binary_cfunc\t\t%v,%P",
|
"binary_cfunc\t\t%v,%P",
|
||||||
"blob\t%O"
|
"blob\t%O",
|
||||||
|
"get_number\t",
|
||||||
|
"get_integer\t",
|
||||||
|
"get_float\t",
|
||||||
|
"put_number_on_var\t",
|
||||||
|
"put_float_on_var\t",
|
||||||
|
"put_integer_on_var\t",
|
||||||
|
"put_number_on_val\t",
|
||||||
|
"put_float_on_val\t",
|
||||||
|
"put_integer_on_val\t",
|
||||||
|
"equal_floats\n",
|
||||||
|
"equal_ints\n",
|
||||||
|
"equal_numbers\n",
|
||||||
|
"lt_floats\n",
|
||||||
|
"lt_ints\n",
|
||||||
|
"lt_numbers\n",
|
||||||
|
"gt_floats\n",
|
||||||
|
"gt_ints\n",
|
||||||
|
"add_float\n",
|
||||||
|
"add_int\n",
|
||||||
|
"add\n",
|
||||||
|
"sub_float\n",
|
||||||
|
"sub_int\n",
|
||||||
|
"sub\n",
|
||||||
|
"mul_float\n",
|
||||||
|
"mul_int\n",
|
||||||
|
"mul\n",
|
||||||
|
"shift_right_constant\n",
|
||||||
|
"shift_right_by_constant\n",
|
||||||
|
"shift_right\n",
|
||||||
|
"shift_left_constant\n",
|
||||||
|
"shift_left_by_constant\n",
|
||||||
|
"shift_left\n",
|
||||||
|
"divide_constant\n",
|
||||||
|
"divide_by_constant\n",
|
||||||
|
"divide\n",
|
||||||
|
"integer_divide_constant\n",
|
||||||
|
"integer_divide_by_constant\n",
|
||||||
|
"integer_divide\n",
|
||||||
|
"mod_constant\n",
|
||||||
|
"mod_by_constant\n",
|
||||||
|
"mod\n",
|
||||||
|
"rem_constant\n",
|
||||||
|
"rem_by_constant\n",
|
||||||
|
"rem\n",
|
||||||
|
"and_constant\n",
|
||||||
|
"and\n",
|
||||||
|
"or_constant\n",
|
||||||
|
"or\n",
|
||||||
|
"xor_constant\n",
|
||||||
|
"xor\n",
|
||||||
|
"uminus\n",
|
||||||
|
"label_control\n"
|
||||||
#ifdef SFUNC
|
#ifdef SFUNC
|
||||||
,
|
,
|
||||||
"get_s_f_op\t%f,%r",
|
"get_s_f_op\t%f,%r",
|
||||||
|
@ -5395,7 +5395,7 @@ p_install_thread_local(void)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
LOCK(pe->PELock);
|
LOCK(pe->PELock);
|
||||||
if (pe->PredFlags & (UserCPredFlag|HiddenPredFlag|CArgsPredFlag|SyncPredFlag|TestPredFlag|AsmPredFlag|StandardPredFlag|CPredFlag|SafePredFlag|IndexedPredFlag|BinaryTestPredFlag) ||
|
if (pe->PredFlags & (UserCPredFlag|HiddenPredFlag|CArgsPredFlag|SyncPredFlag|TestPredFlag|AsmPredFlag|StandardPredFlag|CPredFlag|SafePredFlag|IndexedPredFlag|BinaryPredFlag) ||
|
||||||
pe->cs.p_code.NOfClauses) {
|
pe->cs.p_code.NOfClauses) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
2
C/eval.c
2
C/eval.c
@ -35,7 +35,7 @@ Eval(Term t)
|
|||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
Yap_Error(INSTANTIATION_ERROR,TermNil,"in arithmetic");
|
Yap_Error(INSTANTIATION_ERROR,TermNil,"in arithmetic");
|
||||||
P = (yamop *)FAILCODE;
|
P = (yamop *)FAILCODE;
|
||||||
return 0L;;
|
return 0L;
|
||||||
} else if (IsAtomTerm(t)) {
|
} else if (IsAtomTerm(t)) {
|
||||||
ExpEntry *p;
|
ExpEntry *p;
|
||||||
Atom name = AtomOfTerm(t);
|
Atom name = AtomOfTerm(t);
|
||||||
|
2
C/exec.c
2
C/exec.c
@ -2034,7 +2034,7 @@ Yap_InitYaamRegs(void)
|
|||||||
WPP = NULL;
|
WPP = NULL;
|
||||||
PREG_ADDR = NULL;
|
PREG_ADDR = NULL;
|
||||||
#endif
|
#endif
|
||||||
Yap_AllocateDefaultArena(1024, 2);
|
Yap_AllocateDefaultArena(1024*1024, 2);
|
||||||
Yap_PreAllocCodeSpace();
|
Yap_PreAllocCodeSpace();
|
||||||
#ifdef CUT_C
|
#ifdef CUT_C
|
||||||
cut_c_initialize();
|
cut_c_initialize();
|
||||||
|
@ -134,17 +134,6 @@ Yap_gmp_div_big_int(MP_INT *b, Int i)
|
|||||||
|
|
||||||
mpz_init_set(&new, b);
|
mpz_init_set(&new, b);
|
||||||
if (yap_flags[INTEGER_ROUNDING_FLAG] == 0) {
|
if (yap_flags[INTEGER_ROUNDING_FLAG] == 0) {
|
||||||
if (i > 0) {
|
|
||||||
mpz_fdiv_q_ui(&new, &new, i);
|
|
||||||
} else if (i == 0) {
|
|
||||||
Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
|
|
||||||
return 0L;
|
|
||||||
} else {
|
|
||||||
/* we do not handle MIN_INT */
|
|
||||||
mpz_fdiv_q_ui(&new, &new, -i);
|
|
||||||
mpz_neg(&new, &new);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
mpz_tdiv_q_ui(&new, &new, i);
|
mpz_tdiv_q_ui(&new, &new, i);
|
||||||
} else if (i == 0) {
|
} else if (i == 0) {
|
||||||
@ -155,6 +144,17 @@ Yap_gmp_div_big_int(MP_INT *b, Int i)
|
|||||||
mpz_tdiv_q_ui(&new, &new, -i);
|
mpz_tdiv_q_ui(&new, &new, -i);
|
||||||
mpz_neg(&new, &new);
|
mpz_neg(&new, &new);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (i > 0) {
|
||||||
|
mpz_fdiv_q_ui(&new, &new, i);
|
||||||
|
} else if (i == 0) {
|
||||||
|
Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
|
||||||
|
return 0L;
|
||||||
|
} else {
|
||||||
|
/* we do not handle MIN_INT */
|
||||||
|
mpz_fdiv_q_ui(&new, &new, -i);
|
||||||
|
mpz_neg(&new, &new);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return Yap_MkBigIntTerm(&new);
|
return Yap_MkBigIntTerm(&new);
|
||||||
}
|
}
|
||||||
@ -241,9 +241,9 @@ Yap_gmp_div_big_big(MP_INT *b1, MP_INT *b2)
|
|||||||
|
|
||||||
mpz_init_set(&new, b1);
|
mpz_init_set(&new, b1);
|
||||||
if (yap_flags[INTEGER_ROUNDING_FLAG] == 0) {
|
if (yap_flags[INTEGER_ROUNDING_FLAG] == 0) {
|
||||||
mpz_fdiv_q(&new, &new, b2);
|
|
||||||
} else {
|
|
||||||
mpz_tdiv_q(&new, &new, b2);
|
mpz_tdiv_q(&new, &new, b2);
|
||||||
|
} else {
|
||||||
|
mpz_fdiv_q(&new, &new, b2);
|
||||||
}
|
}
|
||||||
return Yap_MkBigIntTerm(&new);
|
return Yap_MkBigIntTerm(&new);
|
||||||
}
|
}
|
||||||
@ -268,28 +268,28 @@ Yap_gmp_ior_big_big(MP_INT *b1, MP_INT *b2)
|
|||||||
return Yap_MkBigIntTerm(&new);
|
return Yap_MkBigIntTerm(&new);
|
||||||
}
|
}
|
||||||
|
|
||||||
Float
|
Term
|
||||||
Yap_gmp_add_float_big(Float d, MP_INT *b)
|
Yap_gmp_add_float_big(Float d, MP_INT *b)
|
||||||
{
|
{
|
||||||
return d+mpz_get_d(b);
|
return MkFloatTerm(d+mpz_get_d(b));
|
||||||
}
|
}
|
||||||
|
|
||||||
Float
|
Term
|
||||||
Yap_gmp_sub_float_big(Float d, MP_INT *b)
|
Yap_gmp_sub_float_big(Float d, MP_INT *b)
|
||||||
{
|
{
|
||||||
return d-mpz_get_d(b);
|
return MkFloatTerm(d-mpz_get_d(b));
|
||||||
}
|
}
|
||||||
|
|
||||||
Float
|
Term
|
||||||
Yap_gmp_sub_big_float(MP_INT *b, Float d)
|
Yap_gmp_sub_big_float(MP_INT *b, Float d)
|
||||||
{
|
{
|
||||||
return mpz_get_d(b)-d;
|
return MkFloatTerm(mpz_get_d(b)-d);
|
||||||
}
|
}
|
||||||
|
|
||||||
Float
|
Term
|
||||||
Yap_gmp_mul_float_big(Float d, MP_INT *b)
|
Yap_gmp_mul_float_big(Float d, MP_INT *b)
|
||||||
{
|
{
|
||||||
return d*mpz_get_d(b);
|
return MkFloatTerm(d*mpz_get_d(b));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
1
C/grow.c
1
C/grow.c
@ -1067,6 +1067,7 @@ fix_compiler_instructions(PInstr *pcpc)
|
|||||||
case if_not_op:
|
case if_not_op:
|
||||||
case index_dbref_op:
|
case index_dbref_op:
|
||||||
case index_blob_op:
|
case index_blob_op:
|
||||||
|
case index_long_op:
|
||||||
case if_nonvar_op:
|
case if_nonvar_op:
|
||||||
case unify_last_list_op:
|
case unify_last_list_op:
|
||||||
case write_last_list_op:
|
case write_last_list_op:
|
||||||
|
68
C/index.c
68
C/index.c
@ -499,7 +499,7 @@ static char SccsId[] = "%W% %G%";
|
|||||||
UInt STATIC_PROTO(do_index, (ClauseDef *,ClauseDef *,struct intermediates *,UInt,UInt,int,int,CELL *));
|
UInt STATIC_PROTO(do_index, (ClauseDef *,ClauseDef *,struct intermediates *,UInt,UInt,int,int,CELL *));
|
||||||
UInt STATIC_PROTO(do_compound_index, (ClauseDef *,ClauseDef *,Term *t,struct intermediates *,UInt,UInt,UInt,UInt,int,int,int,CELL *,int));
|
UInt STATIC_PROTO(do_compound_index, (ClauseDef *,ClauseDef *,Term *t,struct intermediates *,UInt,UInt,UInt,UInt,int,int,int,CELL *,int));
|
||||||
UInt STATIC_PROTO(do_dbref_index, (ClauseDef *,ClauseDef *,Term,struct intermediates *,UInt,UInt,int,int,CELL *));
|
UInt STATIC_PROTO(do_dbref_index, (ClauseDef *,ClauseDef *,Term,struct intermediates *,UInt,UInt,int,int,CELL *));
|
||||||
UInt STATIC_PROTO(do_blob_index, (ClauseDef *,ClauseDef *,Term,struct intermediates *,UInt,UInt,int,int,CELL *));
|
UInt STATIC_PROTO(do_blob_index, (ClauseDef *,ClauseDef *,Term,struct intermediates *,UInt,UInt,int,int,CELL *,int));
|
||||||
|
|
||||||
static UInt
|
static UInt
|
||||||
cleanup_sw_on_clauses(CELL larg, UInt sz, OPCODE ecls)
|
cleanup_sw_on_clauses(CELL larg, UInt sz, OPCODE ecls)
|
||||||
@ -555,6 +555,23 @@ recover_from_failed_susp_on_cls(struct intermediates *cint, UInt sz)
|
|||||||
|
|
||||||
while (cpc) {
|
while (cpc) {
|
||||||
switch(cpc->op) {
|
switch(cpc->op) {
|
||||||
|
case enter_lu_op:
|
||||||
|
if (cpc->rnd4) {
|
||||||
|
yamop *code_p = (yamop *)cpc->rnd4;
|
||||||
|
yamop *first = code_p->u.Ills.l1;
|
||||||
|
yamop *last = code_p->u.Ills.l2;
|
||||||
|
while (first) {
|
||||||
|
yamop *next = first->u.OtaLl.n;
|
||||||
|
LogUpdClause *cl = first->u.OtaLl.d;
|
||||||
|
cl->ClRefCount--;
|
||||||
|
Yap_FreeCodeSpace((char *)first);
|
||||||
|
if (first == last)
|
||||||
|
break;
|
||||||
|
first = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cpc->rnd4 = Zero;
|
||||||
|
break;
|
||||||
case jump_v_op:
|
case jump_v_op:
|
||||||
case jump_nv_op:
|
case jump_nv_op:
|
||||||
sz = cleanup_sw_on_clauses(cpc->rnd1, sz, ecls);
|
sz = cleanup_sw_on_clauses(cpc->rnd1, sz, ecls);
|
||||||
@ -617,6 +634,10 @@ recover_from_failed_susp_on_cls(struct intermediates *cint, UInt sz)
|
|||||||
}
|
}
|
||||||
cpc = cpc->nextInst;
|
cpc = cpc->nextInst;
|
||||||
}
|
}
|
||||||
|
if (cint->code_addr) {
|
||||||
|
Yap_FreeCodeSpace((char *)cint->code_addr);
|
||||||
|
cint->code_addr = NULL;
|
||||||
|
}
|
||||||
return sz;
|
return sz;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1032,6 +1053,7 @@ has_cut(yamop *pc)
|
|||||||
case _count_a_call:
|
case _count_a_call:
|
||||||
case _index_dbref:
|
case _index_dbref:
|
||||||
case _index_blob:
|
case _index_blob:
|
||||||
|
case _index_long:
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
case _getwork_first_time:
|
case _getwork_first_time:
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
@ -2303,7 +2325,7 @@ do_var_clauses(ClauseDef *c0, ClauseDef *cf, int var_group, struct intermediates
|
|||||||
ncls = (cf-c0)+1;
|
ncls = (cf-c0)+1;
|
||||||
else
|
else
|
||||||
ncls = 0;
|
ncls = 0;
|
||||||
Yap_emit_3ops(enter_lu_op, labl_dyn0, labl_dynf, ncls, cint);
|
Yap_emit_4ops(enter_lu_op, labl_dyn0, labl_dynf, ncls, Zero, cint);
|
||||||
Yap_emit(label_op, labl_dyn0, Zero, cint);
|
Yap_emit(label_op, labl_dyn0, Zero, cint);
|
||||||
}
|
}
|
||||||
if (c0 == cf) {
|
if (c0 == cf) {
|
||||||
@ -2655,8 +2677,10 @@ do_funcs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
|
|||||||
if (IsExtensionFunctor(f)) {
|
if (IsExtensionFunctor(f)) {
|
||||||
if (f == FunctorDBRef)
|
if (f == FunctorDBRef)
|
||||||
ifs->u.Label = do_dbref_index(min, max, t, cint, argno, nxtlbl, first, clleft, top);
|
ifs->u.Label = do_dbref_index(min, max, t, cint, argno, nxtlbl, first, clleft, top);
|
||||||
|
else if (f == FunctorLongInt)
|
||||||
|
ifs->u.Label = do_blob_index(min, max, t, cint, argno, nxtlbl, first, clleft, top, FALSE);
|
||||||
else
|
else
|
||||||
ifs->u.Label = do_blob_index(min, max, t, cint, argno, nxtlbl, first, clleft, top);
|
ifs->u.Label = do_blob_index(min, max, t, cint, argno, nxtlbl, first, clleft, top, TRUE);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
CELL *sreg;
|
CELL *sreg;
|
||||||
@ -2726,7 +2750,7 @@ emit_protection_choicepoint(int first, int clleft, UInt nxtlbl, struct intermedi
|
|||||||
if (cint->CurrentPred->PredFlags & LogUpdatePredFlag) {
|
if (cint->CurrentPred->PredFlags & LogUpdatePredFlag) {
|
||||||
UInt labl = new_label(cint);
|
UInt labl = new_label(cint);
|
||||||
|
|
||||||
Yap_emit_3ops(enter_lu_op, labl, labl, 0, cint);
|
Yap_emit_4ops(enter_lu_op, labl, labl, 0, Zero, cint);
|
||||||
Yap_emit(label_op, labl, Zero, cint);
|
Yap_emit(label_op, labl, Zero, cint);
|
||||||
}
|
}
|
||||||
Yap_emit(tryme_op, nxtlbl, (clleft << 1), cint);
|
Yap_emit(tryme_op, nxtlbl, (clleft << 1), cint);
|
||||||
@ -3173,7 +3197,7 @@ do_dbref_index(ClauseDef *min, ClauseDef* max, Term t, struct intermediates *cin
|
|||||||
}
|
}
|
||||||
|
|
||||||
static UInt
|
static UInt
|
||||||
do_blob_index(ClauseDef *min, ClauseDef* max, Term t, struct intermediates *cint, UInt argno, UInt fail_l, int first, int clleft, CELL *top)
|
do_blob_index(ClauseDef *min, ClauseDef* max, Term t, struct intermediates *cint, UInt argno, UInt fail_l, int first, int clleft, CELL *top, int blob)
|
||||||
{
|
{
|
||||||
UInt ngroups;
|
UInt ngroups;
|
||||||
GroupDef *group;
|
GroupDef *group;
|
||||||
@ -3185,13 +3209,16 @@ do_blob_index(ClauseDef *min, ClauseDef* max, Term t, struct intermediates *cint
|
|||||||
while (cl <= max) {
|
while (cl <= max) {
|
||||||
if (cl->u.t_ptr == (CELL)NULL) { /* check whether it is a builtin */
|
if (cl->u.t_ptr == (CELL)NULL) { /* check whether it is a builtin */
|
||||||
cl->Tag = Zero;
|
cl->Tag = Zero;
|
||||||
} else {
|
} else if (blob) {
|
||||||
CELL *pt = RepAppl(cl->u.t_ptr);
|
CELL *pt = RepAppl(cl->u.t_ptr);
|
||||||
#if SIZEOF_DOUBLE == 2*SIZEOF_LONG_INT
|
#if SIZEOF_DOUBLE == 2*SIZEOF_LONG_INT
|
||||||
cl->Tag = MkIntTerm(pt[1]^pt[2]);
|
cl->Tag = MkIntTerm(pt[1]^pt[2]);
|
||||||
#else
|
#else
|
||||||
cl->Tag = MkIntTerm(pt[1]);
|
cl->Tag = MkIntTerm(pt[1]);
|
||||||
#endif
|
#endif
|
||||||
|
} else {
|
||||||
|
CELL *pt = RepAppl(cl->u.t_ptr);
|
||||||
|
cl->Tag = MkIntTerm((pt[1] & (MAX_ABS_INT-1)));
|
||||||
}
|
}
|
||||||
cl++;
|
cl++;
|
||||||
}
|
}
|
||||||
@ -3202,7 +3229,10 @@ do_blob_index(ClauseDef *min, ClauseDef* max, Term t, struct intermediates *cint
|
|||||||
int labl = new_label(cint);
|
int labl = new_label(cint);
|
||||||
|
|
||||||
Yap_emit(label_op, labl, Zero, cint);
|
Yap_emit(label_op, labl, Zero, cint);
|
||||||
Yap_emit(index_blob_op, Zero, Zero, cint);
|
if (blob)
|
||||||
|
Yap_emit(index_blob_op, Zero, Zero, cint);
|
||||||
|
else
|
||||||
|
Yap_emit(index_long_op, Zero, Zero, cint);
|
||||||
sort_group(group,(CELL *)(group+1),cint);
|
sort_group(group,(CELL *)(group+1),cint);
|
||||||
do_blobs(group, t, cint, argno, first, fail_l, clleft, (CELL *)group+1);
|
do_blobs(group, t, cint, argno, first, fail_l, clleft, (CELL *)group+1);
|
||||||
return labl;
|
return labl;
|
||||||
@ -3997,6 +4027,12 @@ expand_index(struct intermediates *cint) {
|
|||||||
s_reg = NULL;
|
s_reg = NULL;
|
||||||
ipc = NEXTOP(ipc,e);
|
ipc = NEXTOP(ipc,e);
|
||||||
break;
|
break;
|
||||||
|
case _index_long:
|
||||||
|
t = MkIntTerm((s_reg[0] & (MAX_ABS_INT-1)));
|
||||||
|
sp[-1].extra = AbsAppl(s_reg-1);
|
||||||
|
s_reg = NULL;
|
||||||
|
ipc = NEXTOP(ipc,e);
|
||||||
|
break;
|
||||||
/* instructions type e */
|
/* instructions type e */
|
||||||
case _switch_on_type:
|
case _switch_on_type:
|
||||||
t = Deref(ARG1);
|
t = Deref(ARG1);
|
||||||
@ -5756,6 +5792,13 @@ add_to_index(struct intermediates *cint, int first, path_stack_entry *sp, Clause
|
|||||||
}
|
}
|
||||||
ipc = NEXTOP(ipc,e);
|
ipc = NEXTOP(ipc,e);
|
||||||
break;
|
break;
|
||||||
|
case _index_long:
|
||||||
|
{
|
||||||
|
CELL *pt = RepAppl(cls->u.t_ptr);
|
||||||
|
cls->Tag = MkIntTerm((pt[1] & (MAX_ABS_INT-1)));
|
||||||
|
}
|
||||||
|
ipc = NEXTOP(ipc,e);
|
||||||
|
break;
|
||||||
case _switch_on_cons:
|
case _switch_on_cons:
|
||||||
case _if_cons:
|
case _if_cons:
|
||||||
case _go_on_cons:
|
case _go_on_cons:
|
||||||
@ -6247,6 +6290,13 @@ remove_from_index(PredEntry *ap, path_stack_entry *sp, ClauseDef *cls, yamop *bg
|
|||||||
}
|
}
|
||||||
ipc = NEXTOP(ipc,e);
|
ipc = NEXTOP(ipc,e);
|
||||||
break;
|
break;
|
||||||
|
case _index_long:
|
||||||
|
{
|
||||||
|
CELL *pt = RepAppl(cls->u.t_ptr);
|
||||||
|
cls->Tag = MkIntTerm(pt[1] & (MAX_ABS_INT-1));
|
||||||
|
}
|
||||||
|
ipc = NEXTOP(ipc,e);
|
||||||
|
break;
|
||||||
case _switch_on_cons:
|
case _switch_on_cons:
|
||||||
case _if_cons:
|
case _if_cons:
|
||||||
case _go_on_cons:
|
case _go_on_cons:
|
||||||
@ -6902,6 +6952,10 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term Terms[3], yamop *ap_pc, y
|
|||||||
#endif
|
#endif
|
||||||
ipc = NEXTOP(ipc,e);
|
ipc = NEXTOP(ipc,e);
|
||||||
break;
|
break;
|
||||||
|
case _index_long:
|
||||||
|
t = MkIntTerm(s_reg[0] & (MAX_ABS_INT-1));
|
||||||
|
ipc = NEXTOP(ipc,e);
|
||||||
|
break;
|
||||||
case _switch_on_cons:
|
case _switch_on_cons:
|
||||||
case _if_cons:
|
case _if_cons:
|
||||||
case _go_on_cons:
|
case _go_on_cons:
|
||||||
|
1
C/init.c
1
C/init.c
@ -1230,6 +1230,7 @@ InitCodes(void)
|
|||||||
Yap_heap_regs->pred_static_clause = RepPredProp(PredPropByFunc(FunctorDoStaticClause,PROLOG_MODULE));
|
Yap_heap_regs->pred_static_clause = RepPredProp(PredPropByFunc(FunctorDoStaticClause,PROLOG_MODULE));
|
||||||
Yap_heap_regs->pred_throw = RepPredProp(PredPropByFunc(FunctorThrow,PROLOG_MODULE));
|
Yap_heap_regs->pred_throw = RepPredProp(PredPropByFunc(FunctorThrow,PROLOG_MODULE));
|
||||||
Yap_heap_regs->pred_handle_throw = RepPredProp(PredPropByFunc(FunctorHandleThrow,PROLOG_MODULE));
|
Yap_heap_regs->pred_handle_throw = RepPredProp(PredPropByFunc(FunctorHandleThrow,PROLOG_MODULE));
|
||||||
|
Yap_heap_regs->pred_is = RepPredProp(PredPropByFunc(FunctorIs,PROLOG_MODULE));
|
||||||
Yap_heap_regs->pred_goal_expansion = RepPredProp(PredPropByFunc(FunctorGoalExpansion,USER_MODULE));
|
Yap_heap_regs->pred_goal_expansion = RepPredProp(PredPropByFunc(FunctorGoalExpansion,USER_MODULE));
|
||||||
Yap_heap_regs->env_for_trustfail_code.p =
|
Yap_heap_regs->env_for_trustfail_code.p =
|
||||||
Yap_heap_regs->env_for_trustfail_code.p0 =
|
Yap_heap_regs->env_for_trustfail_code.p0 =
|
||||||
|
@ -1056,8 +1056,10 @@ ReadlineGetc(int sno)
|
|||||||
|
|
||||||
while (ttyptr == NULL) {
|
while (ttyptr == NULL) {
|
||||||
/* Only sends a newline if we are at the start of a line */
|
/* Only sends a newline if we are at the start of a line */
|
||||||
if (myrl_line)
|
if (myrl_line) {
|
||||||
free (myrl_line);
|
free (myrl_line);
|
||||||
|
myrl_line = NULL;
|
||||||
|
}
|
||||||
rl_instream = Stream[sno].u.file.file;
|
rl_instream = Stream[sno].u.file.file;
|
||||||
rl_outstream = Stream[cur_out_sno].u.file.file;
|
rl_outstream = Stream[cur_out_sno].u.file.file;
|
||||||
/* window of vulnerability opened */
|
/* window of vulnerability opened */
|
||||||
|
11
C/stdpreds.c
11
C/stdpreds.c
@ -333,6 +333,7 @@ STD_PROTO(static Int p_statistics_trail_info, (void));
|
|||||||
STD_PROTO(static Term mk_argc_list, (void));
|
STD_PROTO(static Term mk_argc_list, (void));
|
||||||
STD_PROTO(static Int p_argv, (void));
|
STD_PROTO(static Int p_argv, (void));
|
||||||
STD_PROTO(static Int p_cputime, (void));
|
STD_PROTO(static Int p_cputime, (void));
|
||||||
|
STD_PROTO(static Int p_systime, (void));
|
||||||
STD_PROTO(static Int p_runtime, (void));
|
STD_PROTO(static Int p_runtime, (void));
|
||||||
STD_PROTO(static Int p_walltime, (void));
|
STD_PROTO(static Int p_walltime, (void));
|
||||||
STD_PROTO(static Int p_access_yap_flags, (void));
|
STD_PROTO(static Int p_access_yap_flags, (void));
|
||||||
@ -817,6 +818,15 @@ p_cputime(void)
|
|||||||
Yap_unify_constant(ARG2, MkIntegerTerm(interval)) );
|
Yap_unify_constant(ARG2, MkIntegerTerm(interval)) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Int
|
||||||
|
p_systime(void)
|
||||||
|
{
|
||||||
|
Int now, interval;
|
||||||
|
Yap_systime_interval(&now, &interval);
|
||||||
|
return( Yap_unify_constant(ARG1, MkIntegerTerm(now)) &&
|
||||||
|
Yap_unify_constant(ARG2, MkIntegerTerm(interval)) );
|
||||||
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_walltime(void)
|
p_walltime(void)
|
||||||
{
|
{
|
||||||
@ -3938,6 +3948,7 @@ Yap_InitCPreds(void)
|
|||||||
Yap_InitCPred("$argv", 1, p_argv, SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$argv", 1, p_argv, SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$runtime", 2, p_runtime, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$runtime", 2, p_runtime, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$cputime", 2, p_cputime, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$cputime", 2, p_cputime, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
|
Yap_InitCPred("$systime", 2, p_systime, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$walltime", 2, p_walltime, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$walltime", 2, p_walltime, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$access_yap_flags", 2, p_access_yap_flags, SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$access_yap_flags", 2, p_access_yap_flags, SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$set_yap_flags", 2, p_set_yap_flags, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$set_yap_flags", 2, p_set_yap_flags, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
|
68
C/sysbits.c
68
C/sysbits.c
@ -320,6 +320,8 @@ static struct timeval StartOfTimes;
|
|||||||
/* since last call to runtime */
|
/* since last call to runtime */
|
||||||
static struct timeval last_time;
|
static struct timeval last_time;
|
||||||
#endif
|
#endif
|
||||||
|
static struct timeval last_time_sys;
|
||||||
|
static struct timeval StartOfTimes_sys;
|
||||||
|
|
||||||
/* store user time in this variable */
|
/* store user time in this variable */
|
||||||
static void
|
static void
|
||||||
@ -334,6 +336,8 @@ InitTime (void)
|
|||||||
getrusage(RUSAGE_SELF, &rusage);
|
getrusage(RUSAGE_SELF, &rusage);
|
||||||
last_time.tv_sec = StartOfTimes.tv_sec = rusage.ru_utime.tv_sec;
|
last_time.tv_sec = StartOfTimes.tv_sec = rusage.ru_utime.tv_sec;
|
||||||
last_time.tv_usec = StartOfTimes.tv_usec = rusage.ru_utime.tv_usec;
|
last_time.tv_usec = StartOfTimes.tv_usec = rusage.ru_utime.tv_usec;
|
||||||
|
last_time_sys.tv_sec = StartOfTimes_sys.tv_sec = rusage.ru_stime.tv_sec;
|
||||||
|
last_time_sys.tv_usec = StartOfTimes_sys.tv_usec = rusage.ru_stime.tv_usec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -360,6 +364,19 @@ void Yap_cputime_interval(Int *now,Int *interval)
|
|||||||
last_time.tv_sec = rusage.ru_utime.tv_sec;
|
last_time.tv_sec = rusage.ru_utime.tv_sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Yap_systime_interval(Int *now,Int *interval)
|
||||||
|
{
|
||||||
|
struct rusage rusage;
|
||||||
|
|
||||||
|
getrusage(RUSAGE_SELF, &rusage);
|
||||||
|
*now = (rusage.ru_stime.tv_sec - StartOfTimes_sys.tv_sec) * 1000 +
|
||||||
|
(rusage.ru_stime.tv_usec - StartOfTimes_sys.tv_usec) / 1000;
|
||||||
|
*interval = (rusage.ru_stime.tv_sec - last_time_sys.tv_sec) * 1000 +
|
||||||
|
(rusage.ru_stime.tv_usec - last_time_sys.tv_usec) / 1000;
|
||||||
|
last_time_sys.tv_usec = rusage.ru_stime.tv_usec;
|
||||||
|
last_time_sys.tv_sec = rusage.ru_stime.tv_sec;
|
||||||
|
}
|
||||||
|
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@ -389,6 +406,8 @@ void Yap_cputime_interval(Int *now,Int *interval)
|
|||||||
|
|
||||||
static FILETIME StartOfTimes, last_time;
|
static FILETIME StartOfTimes, last_time;
|
||||||
|
|
||||||
|
static FILETIME StartOfTimes_sys, last_time_sys;
|
||||||
|
|
||||||
static clock_t TimesStartOfTimes, Times_last_time;
|
static clock_t TimesStartOfTimes, Times_last_time;
|
||||||
|
|
||||||
/* store user time in this variable */
|
/* store user time in this variable */
|
||||||
@ -407,6 +426,10 @@ InitTime (void)
|
|||||||
last_time.dwHighDateTime = UserTime.dwHighDateTime;
|
last_time.dwHighDateTime = UserTime.dwHighDateTime;
|
||||||
StartOfTimes.dwLowDateTime = UserTime.dwLowDateTime;
|
StartOfTimes.dwLowDateTime = UserTime.dwLowDateTime;
|
||||||
StartOfTimes.dwHighDateTime = UserTime.dwHighDateTime;
|
StartOfTimes.dwHighDateTime = UserTime.dwHighDateTime;
|
||||||
|
last_time_sys.dwLowDateTime = KernelTime.dwLowDateTime;
|
||||||
|
last_time_sys.dwHighDateTime = KernelTime.dwHighDateTime;
|
||||||
|
StartOfTimes_sys.dwLowDateTime = KernelTime.dwLowDateTime;
|
||||||
|
StartOfTimes_sys.dwHighDateTime = KernelTime.dwHighDateTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -477,6 +500,34 @@ void Yap_cputime_interval(Int *now,Int *interval)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Yap_systime_interval(Int *now,Int *interval)
|
||||||
|
{
|
||||||
|
HANDLE hProcess = GetCurrentProcess();
|
||||||
|
FILETIME CreationTime, ExitTime, KernelTime, UserTime;
|
||||||
|
if (!GetProcessTimes(hProcess, &CreationTime, &ExitTime, &KernelTime, &UserTime)) {
|
||||||
|
*now = *interval = 0; /* not available */
|
||||||
|
} else {
|
||||||
|
#ifdef __GNUC__
|
||||||
|
unsigned long long int t1 =
|
||||||
|
sub_utime(KernelTime, StartOfTimes_sys);
|
||||||
|
unsigned long long int t2 =
|
||||||
|
sub_utime(KernelTime, last_time_sys);
|
||||||
|
do_div(t1,10000);
|
||||||
|
*now = (Int)t1;
|
||||||
|
do_div(t2,10000);
|
||||||
|
*interval = (Int)t2;
|
||||||
|
#endif
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
__int64 t1 = *(__int64 *)&KernelTime - *(__int64 *)&StartOfTimes_sys;
|
||||||
|
__int64 t2 = *(__int64 *)&KernelTime - *(__int64 *)&last_time_sys;
|
||||||
|
*now = (Int)(t1/10000);
|
||||||
|
*interval = (Int)(t2/10000);
|
||||||
|
#endif
|
||||||
|
last_time_sys.dwLowDateTime = KernelTime.dwLowDateTime;
|
||||||
|
last_time_sys.dwHighDateTime = KernelTime.dwHighDateTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#elif HAVE_TIMES
|
#elif HAVE_TIMES
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
@ -520,6 +571,8 @@ void Yap_cputime_interval(Int *now,Int *interval)
|
|||||||
|
|
||||||
static clock_t StartOfTimes, last_time;
|
static clock_t StartOfTimes, last_time;
|
||||||
|
|
||||||
|
static clock_t StartOfTimes_sys, last_time_sys;
|
||||||
|
|
||||||
/* store user time in this variable */
|
/* store user time in this variable */
|
||||||
static void
|
static void
|
||||||
InitTime (void)
|
InitTime (void)
|
||||||
@ -527,6 +580,7 @@ InitTime (void)
|
|||||||
struct tms t;
|
struct tms t;
|
||||||
times (&t);
|
times (&t);
|
||||||
last_time = StartOfTimes = t.tms_utime;
|
last_time = StartOfTimes = t.tms_utime;
|
||||||
|
last_time_sys = StartOfTimes_sys = t.tms_stime;
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt
|
UInt
|
||||||
@ -546,6 +600,15 @@ void Yap_cputime_interval(Int *now,Int *interval)
|
|||||||
last_time = t.tms_utime;
|
last_time = t.tms_utime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Yap_systime_interval(Int *now,Int *interval)
|
||||||
|
{
|
||||||
|
struct tms t;
|
||||||
|
times (&t);
|
||||||
|
*now = ((t.tms_stime - StartOfTimes_sys)*1000) / TicksPerSec;
|
||||||
|
*interval = (t.tms_stime - last_time_sys) * 1000 / TicksPerSec;
|
||||||
|
last_time_sys = t.tms_stime;
|
||||||
|
}
|
||||||
|
|
||||||
#else /* HAVE_TIMES */
|
#else /* HAVE_TIMES */
|
||||||
|
|
||||||
#ifdef SIMICS
|
#ifdef SIMICS
|
||||||
@ -597,6 +660,11 @@ void Yap_cputime_interval(Int *now,Int *interval)
|
|||||||
last_time.tv_sec = tp.tv_sec;
|
last_time.tv_sec = tp.tv_sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Yap_systime_interval(Int *now,Int *interval)
|
||||||
|
{
|
||||||
|
*now = *interval = 0; /* not available */
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* SIMICS */
|
#endif /* SIMICS */
|
||||||
|
|
||||||
#ifdef COMMENTED_OUT
|
#ifdef COMMENTED_OUT
|
||||||
|
2
H/Heap.h
2
H/Heap.h
@ -399,6 +399,7 @@ typedef struct various_codes {
|
|||||||
struct pred_entry *pred_static_clause;
|
struct pred_entry *pred_static_clause;
|
||||||
struct pred_entry *pred_throw;
|
struct pred_entry *pred_throw;
|
||||||
struct pred_entry *pred_handle_throw;
|
struct pred_entry *pred_handle_throw;
|
||||||
|
struct pred_entry *pred_is;
|
||||||
struct DB_STRUCT *db_erased_marker;
|
struct DB_STRUCT *db_erased_marker;
|
||||||
struct logic_upd_clause *logdb_erased_marker;
|
struct logic_upd_clause *logdb_erased_marker;
|
||||||
struct logic_upd_clause *db_erased_list;
|
struct logic_upd_clause *db_erased_list;
|
||||||
@ -588,6 +589,7 @@ extern struct various_codes *Yap_heap_regs;
|
|||||||
#define PredStaticClause Yap_heap_regs->pred_static_clause
|
#define PredStaticClause Yap_heap_regs->pred_static_clause
|
||||||
#define PredThrow Yap_heap_regs->pred_throw
|
#define PredThrow Yap_heap_regs->pred_throw
|
||||||
#define PredHandleThrow Yap_heap_regs->pred_handle_throw
|
#define PredHandleThrow Yap_heap_regs->pred_handle_throw
|
||||||
|
#define PredIs Yap_heap_regs->pred_is
|
||||||
#define DBErasedMarker Yap_heap_regs->db_erased_marker
|
#define DBErasedMarker Yap_heap_regs->db_erased_marker
|
||||||
#define LogDBErasedMarker Yap_heap_regs->logdb_erased_marker
|
#define LogDBErasedMarker Yap_heap_regs->logdb_erased_marker
|
||||||
#define DBErasedList Yap_heap_regs->db_erased_list
|
#define DBErasedList Yap_heap_regs->db_erased_list
|
||||||
|
@ -231,6 +231,7 @@
|
|||||||
OPCODE(if_cons ,sssl),
|
OPCODE(if_cons ,sssl),
|
||||||
OPCODE(index_dbref ,e),
|
OPCODE(index_dbref ,e),
|
||||||
OPCODE(index_blob ,e),
|
OPCODE(index_blob ,e),
|
||||||
|
OPCODE(index_long ,e),
|
||||||
OPCODE(p_atom_x ,xl),
|
OPCODE(p_atom_x ,xl),
|
||||||
OPCODE(p_atom_y ,yl),
|
OPCODE(p_atom_y ,yl),
|
||||||
OPCODE(p_atomic_x ,xl),
|
OPCODE(p_atomic_x ,xl),
|
||||||
|
@ -316,8 +316,9 @@ void STD_PROTO(Yap_InitSysPath,(void));
|
|||||||
#ifdef MAC
|
#ifdef MAC
|
||||||
void STD_PROTO(Yap_SetTextFile,(char *));
|
void STD_PROTO(Yap_SetTextFile,(char *));
|
||||||
#endif
|
#endif
|
||||||
void STD_PROTO(Yap_cputime_interval,(Int *,Int *));
|
|
||||||
int STD_PROTO(Yap_getcwd,(const char *, int));
|
int STD_PROTO(Yap_getcwd,(const char *, int));
|
||||||
|
void STD_PROTO(Yap_cputime_interval,(Int *,Int *));
|
||||||
|
void STD_PROTO(Yap_systime_interval,(Int *,Int *));
|
||||||
void STD_PROTO(Yap_walltime_interval,(Int *,Int *));
|
void STD_PROTO(Yap_walltime_interval,(Int *,Int *));
|
||||||
void STD_PROTO(Yap_InitSysbits,(void));
|
void STD_PROTO(Yap_InitSysbits,(void));
|
||||||
void STD_PROTO(Yap_InitSysPreds,(void));
|
void STD_PROTO(Yap_InitSysPreds,(void));
|
||||||
|
@ -659,7 +659,7 @@ typedef enum
|
|||||||
CompiledPredFlag = 0x00000400L, /* is static */
|
CompiledPredFlag = 0x00000400L, /* is static */
|
||||||
IndexedPredFlag = 0x00000200L, /* has indexing code */
|
IndexedPredFlag = 0x00000200L, /* has indexing code */
|
||||||
SpiedPredFlag = 0x00000100L, /* is a spy point */
|
SpiedPredFlag = 0x00000100L, /* is a spy point */
|
||||||
BinaryTestPredFlag = 0x00000080L, /* test predicate */
|
BinaryPredFlag = 0x00000080L, /* test predicate */
|
||||||
TabledPredFlag = 0x00000040L, /* is tabled */
|
TabledPredFlag = 0x00000040L, /* is tabled */
|
||||||
SequentialPredFlag = 0x00000020L, /* may not create parallel choice points! */
|
SequentialPredFlag = 0x00000020L, /* may not create parallel choice points! */
|
||||||
ProfiledPredFlag = 0x00000010L, /* pred is being profiled */
|
ProfiledPredFlag = 0x00000010L, /* pred is being profiled */
|
||||||
|
@ -80,7 +80,7 @@ typedef struct FREEB {
|
|||||||
#define ALIGN_SIZE(X,SIZE) (((CELL)(X)+((SIZE)-1)) & ~((SIZE)-1))
|
#define ALIGN_SIZE(X,SIZE) (((CELL)(X)+((SIZE)-1)) & ~((SIZE)-1))
|
||||||
|
|
||||||
/* I'll assume page size is always a power of two */
|
/* I'll assume page size is always a power of two */
|
||||||
#ifdef _WIN32
|
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||||
/* in WIN32 VirtualAlloc works in multiples of 64K */
|
/* in WIN32 VirtualAlloc works in multiples of 64K */
|
||||||
#define YAP_ALLOC_SIZE (64*1024)
|
#define YAP_ALLOC_SIZE (64*1024)
|
||||||
#define LGPAGE_SIZE YAP_ALLOC_SIZE
|
#define LGPAGE_SIZE YAP_ALLOC_SIZE
|
||||||
@ -102,7 +102,7 @@ void STD_PROTO(Yap_InitHeap, (void *));
|
|||||||
UInt STD_PROTO(Yap_ExtendWorkSpaceThroughHole, (UInt));
|
UInt STD_PROTO(Yap_ExtendWorkSpaceThroughHole, (UInt));
|
||||||
void STD_PROTO(Yap_AllocHole, (UInt, UInt));
|
void STD_PROTO(Yap_AllocHole, (UInt, UInt));
|
||||||
|
|
||||||
#if USE_MMAP
|
#if USE_MMAP && ! defined(__CYGWIN__)
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
43
H/arith2.h
43
H/arith2.h
@ -22,7 +22,7 @@
|
|||||||
inline static int
|
inline static int
|
||||||
add_overflow(Int x, Int i, Int j)
|
add_overflow(Int x, Int i, Int j)
|
||||||
{
|
{
|
||||||
return (i & j & ~x) | (~i & ~j & x);
|
return ((i & j & ~x) | (~i & ~j & x)) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static Term
|
inline static Term
|
||||||
@ -32,7 +32,7 @@ add_int(Int i, Int j)
|
|||||||
#if USE_GMP
|
#if USE_GMP
|
||||||
/* Integer overflow, we need to use big integers */
|
/* Integer overflow, we need to use big integers */
|
||||||
Int overflow = (i & j & ~x) | (~i & ~j & x);
|
Int overflow = (i & j & ~x) | (~i & ~j & x);
|
||||||
if (overflow) {
|
if (overflow < 0) {
|
||||||
return(Yap_gmp_add_ints(i, j));
|
return(Yap_gmp_add_ints(i, j));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -47,7 +47,7 @@ add_int(Int i, Int j)
|
|||||||
inline static int
|
inline static int
|
||||||
sub_overflow(Int x, Int i, Int j)
|
sub_overflow(Int x, Int i, Int j)
|
||||||
{
|
{
|
||||||
return (i & ~j & ~x) | (~i & j & x);
|
return ((i & ~j & ~x) | (~i & j & x)) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static Term
|
inline static Term
|
||||||
@ -55,7 +55,7 @@ sub_int(Int i, Int j)
|
|||||||
{
|
{
|
||||||
Int x = i-j;
|
Int x = i-j;
|
||||||
#if USE_GMP
|
#if USE_GMP
|
||||||
Int overflow = (i & ~j & ~x) | (~i & j & x);
|
Int overflow = ((i & ~j & ~x) | (~i & j & x)) < 0;
|
||||||
/* Integer overflow, we need to use big integers */
|
/* Integer overflow, we need to use big integers */
|
||||||
if (overflow) {
|
if (overflow) {
|
||||||
return(Yap_gmp_sub_ints(i, j));
|
return(Yap_gmp_sub_ints(i, j));
|
||||||
@ -88,6 +88,8 @@ sub_int(Int i, Int j)
|
|||||||
inline static int
|
inline static int
|
||||||
mul_overflow(Int z, Int i1, Int i2)
|
mul_overflow(Int z, Int i1, Int i2)
|
||||||
{
|
{
|
||||||
|
if (i1 == Int_MIN && i2 == -1)
|
||||||
|
return TRUE;
|
||||||
return (i2 && z/i2 != i1);
|
return (i2 && z/i2 != i1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,18 +116,16 @@ times_int(Int i1, Int i2) {
|
|||||||
|
|
||||||
#if USE_GMP
|
#if USE_GMP
|
||||||
static inline int
|
static inline int
|
||||||
sl_overflow(Int x,Int i)
|
sl_overflow(Int i,Int j)
|
||||||
{
|
{
|
||||||
|
Int x = (8*sizeof(CELL)-2)-j;
|
||||||
CELL t = (1<<x)-1;
|
CELL t = (1<<x)-1;
|
||||||
|
|
||||||
|
if (x < 0) return TRUE;
|
||||||
|
t = (1<<x)-1;
|
||||||
return (t & i) != i;
|
return (t & i) != i;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
|
||||||
sr_overflow(Int x,Int i)
|
|
||||||
{
|
|
||||||
CELL t = (1>>x)-1;
|
|
||||||
return (t & i) != i;
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
static inline Int
|
static inline Int
|
||||||
sl_overflow(Int x,Int i)
|
sl_overflow(Int x,Int i)
|
||||||
@ -133,24 +133,14 @@ sl_overflow(Int x,Int i)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline Int
|
|
||||||
sr_overflow(Int x,Int i)
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline static Term
|
inline static Term
|
||||||
do_sll(Int i, Int j)
|
do_sll(Int i, Int j)
|
||||||
{
|
{
|
||||||
#if USE_GMP
|
if (sl_overflow(i,j)) {
|
||||||
Int x = (8*sizeof(CELL)-2)-j;
|
return Yap_gmp_sll_ints(i, j);
|
||||||
|
|
||||||
if (x < 0||
|
|
||||||
sl_overflow(x,i)) {
|
|
||||||
return(Yap_gmp_sll_ints(i, j));
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
RINT(i << j);
|
RINT(i << j);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,15 +327,18 @@ p_div(Term t1, Term t2) {
|
|||||||
case long_int_e:
|
case long_int_e:
|
||||||
/* two integers */
|
/* two integers */
|
||||||
{
|
{
|
||||||
Int i2 = IntegerOfTerm(t2);
|
Int i1 = IntegerOfTerm(t1), i2 = IntegerOfTerm(t2);
|
||||||
|
|
||||||
if (i2 == 0) {
|
if (i2 == 0) {
|
||||||
Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR, t2, "// /2");
|
Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR, t2, "// /2");
|
||||||
/* make GCC happy */
|
/* make GCC happy */
|
||||||
P = (yamop *)FAILCODE;
|
P = (yamop *)FAILCODE;
|
||||||
RERROR();
|
RERROR();
|
||||||
|
} else if (i1 == Int_MIN && i2 == -1) {
|
||||||
|
return Yap_gmp_add_ints(Int_MAX, 1);
|
||||||
|
} else {
|
||||||
|
RINT(IntegerOfTerm(t1) / i2);
|
||||||
}
|
}
|
||||||
RINT(IntegerOfTerm(t1) / i2);
|
|
||||||
}
|
}
|
||||||
case double_e:
|
case double_e:
|
||||||
Yap_Error(TYPE_ERROR_INTEGER, t2, "// /2");
|
Yap_Error(TYPE_ERROR_INTEGER, t2, "// /2");
|
||||||
|
@ -105,6 +105,7 @@ typedef enum compiler_op {
|
|||||||
if_not_op,
|
if_not_op,
|
||||||
index_dbref_op,
|
index_dbref_op,
|
||||||
index_blob_op,
|
index_blob_op,
|
||||||
|
index_long_op,
|
||||||
if_nonvar_op,
|
if_nonvar_op,
|
||||||
save_pair_op,
|
save_pair_op,
|
||||||
save_appl_op,
|
save_appl_op,
|
||||||
|
@ -66,7 +66,7 @@
|
|||||||
AtomDoLogUpdClause0 = Yap_FullLookupAtom("$do_log_upd_clause0");
|
AtomDoLogUpdClause0 = Yap_FullLookupAtom("$do_log_upd_clause0");
|
||||||
AtomDoLogUpdClauseErase = Yap_FullLookupAtom("$do_log_upd_clause_erase");
|
AtomDoLogUpdClauseErase = Yap_FullLookupAtom("$do_log_upd_clause_erase");
|
||||||
AtomDoStaticClause = Yap_FullLookupAtom("$do_static_clause");
|
AtomDoStaticClause = Yap_FullLookupAtom("$do_static_clause");
|
||||||
AtomDollarU = Yap_LookupAtom("$u");
|
AtomDollarU = Yap_FullLookupAtom("$u");
|
||||||
AtomDollarUndef = Yap_FullLookupAtom("$undef");
|
AtomDollarUndef = Yap_FullLookupAtom("$undef");
|
||||||
AtomDomainError = Yap_LookupAtom("domain_error");
|
AtomDomainError = Yap_LookupAtom("domain_error");
|
||||||
AtomE = Yap_LookupAtom("e");
|
AtomE = Yap_LookupAtom("e");
|
||||||
@ -110,7 +110,7 @@
|
|||||||
AtomGetworkSeq = Yap_FullLookupAtom("$getwork_seq");
|
AtomGetworkSeq = Yap_FullLookupAtom("$getwork_seq");
|
||||||
AtomGlobal = Yap_LookupAtom("global_sp");
|
AtomGlobal = Yap_LookupAtom("global_sp");
|
||||||
AtomGoalExpansion = Yap_LookupAtom("goal_expansion");
|
AtomGoalExpansion = Yap_LookupAtom("goal_expansion");
|
||||||
AtomHERE = Yap_LookupAtom("\n<====HERE====>\n");
|
AtomHERE = Yap_LookupAtom("\n <====HERE====> \n");
|
||||||
AtomHandleThrow = Yap_FullLookupAtom("$handle_throw");
|
AtomHandleThrow = Yap_FullLookupAtom("$handle_throw");
|
||||||
AtomHeap = Yap_LookupAtom("heap");
|
AtomHeap = Yap_LookupAtom("heap");
|
||||||
AtomHeapUsed = Yap_LookupAtom("heapused");
|
AtomHeapUsed = Yap_LookupAtom("heapused");
|
||||||
@ -125,8 +125,10 @@
|
|||||||
AtomIntOverflow = Yap_LookupAtom("int_overflow");
|
AtomIntOverflow = Yap_LookupAtom("int_overflow");
|
||||||
AtomInteger = Yap_LookupAtom("integer");
|
AtomInteger = Yap_LookupAtom("integer");
|
||||||
AtomInternalCompilerError = Yap_LookupAtom("internal_compiler_error");
|
AtomInternalCompilerError = Yap_LookupAtom("internal_compiler_error");
|
||||||
|
AtomIs = Yap_LookupAtom("is");
|
||||||
AtomKey = Yap_LookupAtom("key");
|
AtomKey = Yap_LookupAtom("key");
|
||||||
AtomLDLibraryPath = Yap_LookupAtom("LD_LIBRARY_PATH");
|
AtomLDLibraryPath = Yap_LookupAtom("LD_LIBRARY_PATH");
|
||||||
|
AtomLONGINT = Yap_LookupAtom("LongInt");
|
||||||
AtomLT = Yap_LookupAtom("<");
|
AtomLT = Yap_LookupAtom("<");
|
||||||
AtomLastExecuteWithin = Yap_FullLookupAtom("$last_execute_within");
|
AtomLastExecuteWithin = Yap_FullLookupAtom("$last_execute_within");
|
||||||
AtomLeash = Yap_FullLookupAtom("$leash");
|
AtomLeash = Yap_FullLookupAtom("$leash");
|
||||||
@ -201,7 +203,7 @@
|
|||||||
AtomRecordedWithKey = Yap_FullLookupAtom("$recorded_with_key");
|
AtomRecordedWithKey = Yap_FullLookupAtom("$recorded_with_key");
|
||||||
AtomRefoundVar = Yap_FullLookupAtom("$I_FOUND_THE_VARIABLE_AGAIN");
|
AtomRefoundVar = Yap_FullLookupAtom("$I_FOUND_THE_VARIABLE_AGAIN");
|
||||||
AtomRepeat = Yap_LookupAtom("repeat");
|
AtomRepeat = Yap_LookupAtom("repeat");
|
||||||
AtomRepeatSpace = Yap_LookupAtom("repeat");
|
AtomRepeatSpace = Yap_LookupAtom("repeat ");
|
||||||
AtomReposition = Yap_LookupAtom("reposition");
|
AtomReposition = Yap_LookupAtom("reposition");
|
||||||
AtomRepresentationError = Yap_LookupAtom("representation_error");
|
AtomRepresentationError = Yap_LookupAtom("representation_error");
|
||||||
AtomResize = Yap_LookupAtom("resize");
|
AtomResize = Yap_LookupAtom("resize");
|
||||||
@ -337,6 +339,7 @@
|
|||||||
FunctorGoalExpansion = Yap_MkFunctor(AtomGoalExpansion,3);
|
FunctorGoalExpansion = Yap_MkFunctor(AtomGoalExpansion,3);
|
||||||
FunctorHandleThrow = Yap_MkFunctor(AtomHandleThrow,3);
|
FunctorHandleThrow = Yap_MkFunctor(AtomHandleThrow,3);
|
||||||
FunctorId = Yap_MkFunctor(AtomId,1);
|
FunctorId = Yap_MkFunctor(AtomId,1);
|
||||||
|
FunctorIs = Yap_MkFunctor(AtomIs,2);
|
||||||
FunctorLastExecuteWithin = Yap_MkFunctor(AtomLastExecuteWithin,1);
|
FunctorLastExecuteWithin = Yap_MkFunctor(AtomLastExecuteWithin,1);
|
||||||
FunctorList = Yap_MkFunctor(AtomDot,2);
|
FunctorList = Yap_MkFunctor(AtomDot,2);
|
||||||
FunctorMegaClause = Yap_MkFunctor(AtomMegaClause,2);
|
FunctorMegaClause = Yap_MkFunctor(AtomMegaClause,2);
|
||||||
|
@ -127,6 +127,7 @@
|
|||||||
AtomIntOverflow = AtomAdjust(AtomIntOverflow);
|
AtomIntOverflow = AtomAdjust(AtomIntOverflow);
|
||||||
AtomInteger = AtomAdjust(AtomInteger);
|
AtomInteger = AtomAdjust(AtomInteger);
|
||||||
AtomInternalCompilerError = AtomAdjust(AtomInternalCompilerError);
|
AtomInternalCompilerError = AtomAdjust(AtomInternalCompilerError);
|
||||||
|
AtomIs = AtomAdjust(AtomIs);
|
||||||
AtomKey = AtomAdjust(AtomKey);
|
AtomKey = AtomAdjust(AtomKey);
|
||||||
AtomLDLibraryPath = AtomAdjust(AtomLDLibraryPath);
|
AtomLDLibraryPath = AtomAdjust(AtomLDLibraryPath);
|
||||||
AtomLONGINT = AtomAdjust(AtomLONGINT);
|
AtomLONGINT = AtomAdjust(AtomLONGINT);
|
||||||
@ -340,6 +341,7 @@
|
|||||||
FunctorGoalExpansion = FuncAdjust(FunctorGoalExpansion);
|
FunctorGoalExpansion = FuncAdjust(FunctorGoalExpansion);
|
||||||
FunctorHandleThrow = FuncAdjust(FunctorHandleThrow);
|
FunctorHandleThrow = FuncAdjust(FunctorHandleThrow);
|
||||||
FunctorId = FuncAdjust(FunctorId);
|
FunctorId = FuncAdjust(FunctorId);
|
||||||
|
FunctorIs = FuncAdjust(FunctorIs);
|
||||||
FunctorLastExecuteWithin = FuncAdjust(FunctorLastExecuteWithin);
|
FunctorLastExecuteWithin = FuncAdjust(FunctorLastExecuteWithin);
|
||||||
FunctorList = FuncAdjust(FunctorList);
|
FunctorList = FuncAdjust(FunctorList);
|
||||||
FunctorMegaClause = FuncAdjust(FunctorMegaClause);
|
FunctorMegaClause = FuncAdjust(FunctorMegaClause);
|
||||||
|
@ -194,6 +194,7 @@ restore_opcodes(yamop *pc)
|
|||||||
case _expand_index:
|
case _expand_index:
|
||||||
case _index_blob:
|
case _index_blob:
|
||||||
case _index_dbref:
|
case _index_dbref:
|
||||||
|
case _index_long:
|
||||||
case _index_pred:
|
case _index_pred:
|
||||||
case _lock_pred:
|
case _lock_pred:
|
||||||
case _op_fail:
|
case _op_fail:
|
||||||
|
@ -881,6 +881,8 @@ restore_codes(void)
|
|||||||
PredEntryAdjust(Yap_heap_regs->pred_throw);
|
PredEntryAdjust(Yap_heap_regs->pred_throw);
|
||||||
Yap_heap_regs->pred_handle_throw =
|
Yap_heap_regs->pred_handle_throw =
|
||||||
PredEntryAdjust(Yap_heap_regs->pred_handle_throw);
|
PredEntryAdjust(Yap_heap_regs->pred_handle_throw);
|
||||||
|
Yap_heap_regs->pred_is =
|
||||||
|
PredEntryAdjust(Yap_heap_regs->pred_is);
|
||||||
if (Yap_heap_regs->undef_code != NULL)
|
if (Yap_heap_regs->undef_code != NULL)
|
||||||
Yap_heap_regs->undef_code = (PredEntry *)PtoHeapCellAdjust((CELL *)(Yap_heap_regs->undef_code));
|
Yap_heap_regs->undef_code = (PredEntry *)PtoHeapCellAdjust((CELL *)(Yap_heap_regs->undef_code));
|
||||||
if (Yap_heap_regs->creep_code != NULL)
|
if (Yap_heap_regs->creep_code != NULL)
|
||||||
|
@ -256,6 +256,8 @@
|
|||||||
#define AtomInteger Yap_heap_regs->AtomInteger_
|
#define AtomInteger Yap_heap_regs->AtomInteger_
|
||||||
Atom AtomInternalCompilerError_;
|
Atom AtomInternalCompilerError_;
|
||||||
#define AtomInternalCompilerError Yap_heap_regs->AtomInternalCompilerError_
|
#define AtomInternalCompilerError Yap_heap_regs->AtomInternalCompilerError_
|
||||||
|
Atom AtomIs_;
|
||||||
|
#define AtomIs Yap_heap_regs->AtomIs_
|
||||||
Atom AtomKey_;
|
Atom AtomKey_;
|
||||||
#define AtomKey Yap_heap_regs->AtomKey_
|
#define AtomKey Yap_heap_regs->AtomKey_
|
||||||
Atom AtomLDLibraryPath_;
|
Atom AtomLDLibraryPath_;
|
||||||
@ -682,6 +684,8 @@
|
|||||||
#define FunctorHandleThrow Yap_heap_regs->FunctorHandleThrow_
|
#define FunctorHandleThrow Yap_heap_regs->FunctorHandleThrow_
|
||||||
Functor FunctorId_;
|
Functor FunctorId_;
|
||||||
#define FunctorId Yap_heap_regs->FunctorId_
|
#define FunctorId Yap_heap_regs->FunctorId_
|
||||||
|
Functor FunctorIs_;
|
||||||
|
#define FunctorIs Yap_heap_regs->FunctorIs_
|
||||||
Functor FunctorLastExecuteWithin_;
|
Functor FunctorLastExecuteWithin_;
|
||||||
#define FunctorLastExecuteWithin Yap_heap_regs->FunctorLastExecuteWithin_
|
#define FunctorLastExecuteWithin Yap_heap_regs->FunctorLastExecuteWithin_
|
||||||
Functor FunctorList_;
|
Functor FunctorList_;
|
||||||
|
@ -150,6 +150,7 @@
|
|||||||
case _enter_a_profiling:
|
case _enter_a_profiling:
|
||||||
case _index_blob:
|
case _index_blob:
|
||||||
case _index_dbref:
|
case _index_dbref:
|
||||||
|
case _index_long:
|
||||||
case _p_equal:
|
case _p_equal:
|
||||||
case _p_functor:
|
case _p_functor:
|
||||||
case _pop:
|
case _pop:
|
||||||
|
@ -909,8 +909,9 @@ ExistsFile(const char *path)
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
AccessFile(const char *path, int mode)
|
AccessFile(const char *path, int mode)
|
||||||
{ char tmp[MAXPATHLEN];
|
{
|
||||||
#ifdef HAVE_ACCESS
|
#ifdef HAVE_ACCESS
|
||||||
|
char tmp[MAXPATHLEN];
|
||||||
int m = 0;
|
int m = 0;
|
||||||
|
|
||||||
if ( mode == ACCESS_EXIST )
|
if ( mode == ACCESS_EXIST )
|
||||||
@ -1461,7 +1462,7 @@ utf8_strlwr(char *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *
|
static char *
|
||||||
canonisePath(char *path)
|
canonisePath(char *path)
|
||||||
{ if ( !trueFeature(FILE_CASE_FEATURE) )
|
{ if ( !trueFeature(FILE_CASE_FEATURE) )
|
||||||
utf8_strlwr(path);
|
utf8_strlwr(path);
|
||||||
@ -1508,7 +1509,7 @@ takeWord(const char **string, char *wrd, int maxlen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
static bool
|
||||||
expandVars(const char *pattern, char *expanded, int maxlen)
|
expandVars(const char *pattern, char *expanded, int maxlen)
|
||||||
{ int size = 0;
|
{ int size = 0;
|
||||||
char wordbuf[MAXPATHLEN];
|
char wordbuf[MAXPATHLEN];
|
||||||
|
@ -179,6 +179,7 @@
|
|||||||
#undef HAVE_LOCALTIME
|
#undef HAVE_LOCALTIME
|
||||||
#undef HAVE_LSTAT
|
#undef HAVE_LSTAT
|
||||||
#undef HAVE_MALLINFO
|
#undef HAVE_MALLINFO
|
||||||
|
#undef HAVE_MBSNRTOWCS
|
||||||
#undef HAVE_MEMCPY
|
#undef HAVE_MEMCPY
|
||||||
#undef HAVE_MEMMOVE
|
#undef HAVE_MEMMOVE
|
||||||
#undef HAVE_MKSTEMP
|
#undef HAVE_MKSTEMP
|
||||||
|
101
configure
vendored
101
configure
vendored
@ -4166,7 +4166,6 @@ fi
|
|||||||
prefix="\${SYSTEMDRIVE}/Yap"
|
prefix="\${SYSTEMDRIVE}/Yap"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
use_malloc="yes"
|
|
||||||
LIBS="-lcygwin"
|
LIBS="-lcygwin"
|
||||||
fi
|
fi
|
||||||
ENABLE_WINCONSOLE="@#"
|
ENABLE_WINCONSOLE="@#"
|
||||||
@ -7144,7 +7143,7 @@ then
|
|||||||
YAPLIB="$DYNYAPLIB"
|
YAPLIB="$DYNYAPLIB"
|
||||||
DYNLIB_LD="gcc -dynamiclib"
|
DYNLIB_LD="gcc -dynamiclib"
|
||||||
PRE_DYNLOADER_PATH="DYLD_LIBRARY_PATH=\$(abs_top_builddir)"
|
PRE_DYNLOADER_PATH="DYLD_LIBRARY_PATH=\$(abs_top_builddir)"
|
||||||
EXTEND_DYNLOADER_PATH="DYLD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR)/Yap YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)"
|
EXTEND_DYNLOADER_PATH="DYLD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR)/Yap YAPBOOTDIR=\$(DESTDIR)\$(SHAREDIR)/Yap/pl YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
case "$target_cpu" in
|
case "$target_cpu" in
|
||||||
@ -7158,7 +7157,7 @@ then
|
|||||||
JAVA_TARGET=sparc
|
JAVA_TARGET=sparc
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
EXTEND_DYNLOADER_PATH="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR)/Yap YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)"
|
EXTEND_DYNLOADER_PATH="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR)/Yap YAPBOOTDIR=\$(DESTDIR)\$(SHAREDIR)/Yap/pl YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)"
|
||||||
PRE_DYNLOADER_PATH="LD_LIBRARY_PATH=\$(abs_top_builddir)"
|
PRE_DYNLOADER_PATH="LD_LIBRARY_PATH=\$(abs_top_builddir)"
|
||||||
LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib -Wl,-R,$JAVA_HOME/jre/lib/$JAVA_TARGET"
|
LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib -Wl,-R,$JAVA_HOME/jre/lib/$JAVA_TARGET"
|
||||||
DYNYAPLIB=libYap"$SHLIB_SUFFIX"
|
DYNYAPLIB=libYap"$SHLIB_SUFFIX"
|
||||||
@ -7168,7 +7167,7 @@ then
|
|||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
PRE_DYNLOADER_PATH=""
|
PRE_DYNLOADER_PATH=""
|
||||||
EXTEND_DYNLOADER_PATH="YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR)/Yap YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)"
|
EXTEND_DYNLOADER_PATH="YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR)/Yap YAPBOOTDIR=\$(DESTDIR)\$(SHAREDIR)/Yap/pl YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)"
|
||||||
DYNYAPLIB=libYap.notused
|
DYNYAPLIB=libYap.notused
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -14744,6 +14743,100 @@ fi
|
|||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
|
for ac_func in mbsnrtowcs
|
||||||
|
do
|
||||||
|
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
|
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
|
||||||
|
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
|
||||||
|
if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
|
||||||
|
For example, HP-UX 11i <limits.h> declares gettimeofday. */
|
||||||
|
#define $ac_func innocuous_$ac_func
|
||||||
|
|
||||||
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
|
which can conflict with char $ac_func (); below.
|
||||||
|
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
||||||
|
<limits.h> exists even on freestanding compilers. */
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
# include <limits.h>
|
||||||
|
#else
|
||||||
|
# include <assert.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef $ac_func
|
||||||
|
|
||||||
|
/* Override any GCC internal prototype to avoid an error.
|
||||||
|
Use char because int might match the return type of a GCC
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
char $ac_func ();
|
||||||
|
/* The GNU C library defines this for functions which it implements
|
||||||
|
to always fail with ENOSYS. Some functions are actually named
|
||||||
|
something starting with __ and the normal name is an alias. */
|
||||||
|
#if defined __stub_$ac_func || defined __stub___$ac_func
|
||||||
|
choke me
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return $ac_func ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||||
|
if { (ac_try="$ac_link"
|
||||||
|
case "(($ac_try" in
|
||||||
|
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||||
|
*) ac_try_echo=$ac_try;;
|
||||||
|
esac
|
||||||
|
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
||||||
|
(eval "$ac_link") 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && {
|
||||||
|
test -z "$ac_c_werror_flag" ||
|
||||||
|
test ! -s conftest.err
|
||||||
|
} && test -s conftest$ac_exeext &&
|
||||||
|
$as_test_x conftest$ac_exeext; then
|
||||||
|
eval "$as_ac_var=yes"
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
eval "$as_ac_var=no"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
ac_res=`eval echo '${'$as_ac_var'}'`
|
||||||
|
{ echo "$as_me:$LINENO: result: $ac_res" >&5
|
||||||
|
echo "${ECHO_T}$ac_res" >&6; }
|
||||||
|
if test `eval echo '${'$as_ac_var'}'` = yes; then
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -452,7 +452,6 @@ then
|
|||||||
prefix="\${SYSTEMDRIVE}/Yap"
|
prefix="\${SYSTEMDRIVE}/Yap"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
use_malloc="yes"
|
|
||||||
LIBS="-lcygwin"
|
LIBS="-lcygwin"
|
||||||
fi
|
fi
|
||||||
ENABLE_WINCONSOLE="@#"
|
ENABLE_WINCONSOLE="@#"
|
||||||
@ -1295,6 +1294,7 @@ AC_CHECK_FUNCS(gethostbyname gethostid gethostname)
|
|||||||
AC_CHECK_FUNCS(gethrtime getpwnam getrusage gettimeofday getwd)
|
AC_CHECK_FUNCS(gethrtime getpwnam getrusage gettimeofday getwd)
|
||||||
AC_CHECK_FUNCS(isatty isnan kill labs link lgamma)
|
AC_CHECK_FUNCS(isatty isnan kill labs link lgamma)
|
||||||
AC_CHECK_FUNCS(localtime lstat mallinfo)
|
AC_CHECK_FUNCS(localtime lstat mallinfo)
|
||||||
|
AC_CHECK_FUNCS(mbsnrtowcs)
|
||||||
AC_CHECK_FUNCS(memcpy memmove mkstemp mktemp)
|
AC_CHECK_FUNCS(memcpy memmove mkstemp mktemp)
|
||||||
AC_CHECK_FUNCS(nanosleep mktime opendir)
|
AC_CHECK_FUNCS(nanosleep mktime opendir)
|
||||||
AC_CHECK_FUNCS(putenv rand random readlink regexec)
|
AC_CHECK_FUNCS(putenv rand random readlink regexec)
|
||||||
|
@ -77,7 +77,7 @@ A DoLogUpdClause F "$do_log_upd_clause"
|
|||||||
A DoLogUpdClause0 F "$do_log_upd_clause0"
|
A DoLogUpdClause0 F "$do_log_upd_clause0"
|
||||||
A DoLogUpdClauseErase F "$do_log_upd_clause_erase"
|
A DoLogUpdClauseErase F "$do_log_upd_clause_erase"
|
||||||
A DoStaticClause F "$do_static_clause"
|
A DoStaticClause F "$do_static_clause"
|
||||||
A DollarU N "$u"
|
A DollarU F "$u"
|
||||||
A DollarUndef F "$undef"
|
A DollarUndef F "$undef"
|
||||||
A DomainError N "domain_error"
|
A DomainError N "domain_error"
|
||||||
A E N "e"
|
A E N "e"
|
||||||
@ -136,6 +136,7 @@ A Int N "int"
|
|||||||
A IntOverflow N "int_overflow"
|
A IntOverflow N "int_overflow"
|
||||||
A Integer N "integer"
|
A Integer N "integer"
|
||||||
A InternalCompilerError N "internal_compiler_error"
|
A InternalCompilerError N "internal_compiler_error"
|
||||||
|
A Is N "is"
|
||||||
A Key N "key"
|
A Key N "key"
|
||||||
A LDLibraryPath N "LD_LIBRARY_PATH"
|
A LDLibraryPath N "LD_LIBRARY_PATH"
|
||||||
A LONGINT N "LongInt"
|
A LONGINT N "LongInt"
|
||||||
@ -345,10 +346,11 @@ F GInteger Integer 1
|
|||||||
F GNumber Number 1
|
F GNumber Number 1
|
||||||
F GPrimitive Primitive 1
|
F GPrimitive Primitive 1
|
||||||
F GVar GVar 1
|
F GVar GVar 1
|
||||||
F GeneratePredInfo GeneratePredInfo 4
|
F GeneratePredInfo GeneratePredInfo 4
|
||||||
F GoalExpansion GoalExpansion 3
|
F GoalExpansion GoalExpansion 3
|
||||||
F HandleThrow HandleThrow 3
|
F HandleThrow HandleThrow 3
|
||||||
F Id Id 1
|
F Id Id 1
|
||||||
|
F Is Is 2
|
||||||
F LastExecuteWithin LastExecuteWithin 1
|
F LastExecuteWithin LastExecuteWithin 1
|
||||||
F List Dot 2
|
F List Dot 2
|
||||||
F MegaClause MegaClause 2
|
F MegaClause MegaClause 2
|
||||||
|
113
pl/eval.yap
113
pl/eval.yap
@ -1,16 +1,33 @@
|
|||||||
|
/*************************************************************************
|
||||||
|
* *
|
||||||
|
* YAP Prolog *
|
||||||
|
* *
|
||||||
|
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
||||||
|
* *
|
||||||
|
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
|
||||||
|
* *
|
||||||
|
**************************************************************************
|
||||||
|
* *
|
||||||
|
* File: eval.yap *
|
||||||
|
* Last rev: *
|
||||||
|
* mods: *
|
||||||
|
* comments: arithmetical optimization *
|
||||||
|
* *
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
:- module('eval',
|
|
||||||
|
:- module('$eval',
|
||||||
['$compile_arithmetic'/2]).
|
['$compile_arithmetic'/2]).
|
||||||
|
|
||||||
'$compile_arithmetic'((Head :- Body), (Head :- NBody)) :-
|
'$compile_arithmetic'((Head :- Body), (Head :- NBody)) :-
|
||||||
term_variables(Head, LVs),
|
term_variables(Head, LVs),
|
||||||
process_body(Body, LVs, NBody).
|
process_body(Body, LVs, NBody), !.
|
||||||
'$compile_arithmetic'(G, G).
|
'$compile_arithmetic'(G, G).
|
||||||
|
|
||||||
process_body((G,Body), InputVs, NewBody) :-
|
process_body((G,Body), InputVs, NewBody) :-
|
||||||
arithmetic_exp(G), !,
|
arithmetic_exp(G), !,
|
||||||
term_variables(G, UnsortedExpVs),
|
term_variables(G, UnsortedExpVs),
|
||||||
sort(UnsortedExpVs, ExpVs),
|
'$sort'(UnsortedExpVs, ExpVs),
|
||||||
fetch_more(Body, ExpVs, LGs, Gs, _, RBody),
|
fetch_more(Body, ExpVs, LGs, Gs, _, RBody),
|
||||||
term_variables(RBody, ExtraVs),
|
term_variables(RBody, ExtraVs),
|
||||||
compile_arith([G|LGs], InputVs, ExtraVs, (G,Gs), ArithComp),
|
compile_arith([G|LGs], InputVs, ExtraVs, (G,Gs), ArithComp),
|
||||||
@ -30,13 +47,13 @@ process_body(G, InputVs, NewBody) :-
|
|||||||
arithmetic_exp(G), !,
|
arithmetic_exp(G), !,
|
||||||
term_variables(G, _),
|
term_variables(G, _),
|
||||||
compile_arith([G], InputVs, [], G, ArithComp),
|
compile_arith([G], InputVs, [], G, ArithComp),
|
||||||
NewBody = ArithComp.
|
NewBody = (ArithComp,true).
|
||||||
process_body(G, _, G).
|
process_body(G, _, G).
|
||||||
|
|
||||||
fetch_more((G,Gs), ExpVs, [G|LGs], (G,AGs), AllExpVs, RGs) :-
|
fetch_more((G,Gs), ExpVs, [G|LGs], (G,AGs), AllExpVs, RGs) :-
|
||||||
arithmetic_exp(G),
|
arithmetic_exp(G),
|
||||||
term_variables(G,Vs),
|
term_variables(G,Vs),
|
||||||
sort(Vs, SVs),
|
'$sort'(Vs, SVs),
|
||||||
intersect_vars(SVs,ExpVs), !,
|
intersect_vars(SVs,ExpVs), !,
|
||||||
join_vars(ExpVs,SVs,MoreExpVs),
|
join_vars(ExpVs,SVs,MoreExpVs),
|
||||||
fetch_more(Gs, MoreExpVs, LGs, AGs, AllExpVs, RGs).
|
fetch_more(Gs, MoreExpVs, LGs, AGs, AllExpVs, RGs).
|
||||||
@ -44,7 +61,7 @@ fetch_more((G,Gs), ExpVs, [], true, ExpVs, (G,Gs)) :- !.
|
|||||||
fetch_more(G, ExpVs, [G], (G), MoreExpVs, true) :-
|
fetch_more(G, ExpVs, [G], (G), MoreExpVs, true) :-
|
||||||
arithmetic_exp(G),
|
arithmetic_exp(G),
|
||||||
term_variables(G,Vs),
|
term_variables(G,Vs),
|
||||||
sort(Vs,SVs),
|
'$sort'(Vs,SVs),
|
||||||
intersect_vars(SVs,ExpVs), !,
|
intersect_vars(SVs,ExpVs), !,
|
||||||
join_vars(ExpVs,SVs,MoreExpVs).
|
join_vars(ExpVs,SVs,MoreExpVs).
|
||||||
fetch_more(G, ExpVs, [], true, ExpVs, G).
|
fetch_more(G, ExpVs, [], true, ExpVs, G).
|
||||||
@ -90,8 +107,8 @@ join_vars([V1|R1],[V2|R2],O) :-
|
|||||||
|
|
||||||
compile_arith(LGs, InputVs, ExtraVs, Gs, ArithComp) :-
|
compile_arith(LGs, InputVs, ExtraVs, Gs, ArithComp) :-
|
||||||
add_type_slots(InputVs,TypedVs),
|
add_type_slots(InputVs,TypedVs),
|
||||||
sort(InputVs,S1),
|
'$sort'(InputVs,S1),
|
||||||
sort(ExtraVs,S2),
|
'$sort'(ExtraVs,S2),
|
||||||
join_vars(S1, S2, S),
|
join_vars(S1, S2, S),
|
||||||
visit(LGs, TypedVs, NewTypedVs, S, FlatExps, []),
|
visit(LGs, TypedVs, NewTypedVs, S, FlatExps, []),
|
||||||
FlatExps = [_,_|_],
|
FlatExps = [_,_|_],
|
||||||
@ -143,15 +160,15 @@ visit_pred((X =:= T), TypedVs, NewTypedVs, _) -->
|
|||||||
[init_label(success_label), eq(TMP1,TMP2)].
|
[init_label(success_label), eq(TMP1,TMP2)].
|
||||||
visit_pred((X < T), TypedVs, NewTypedVs, _) -->
|
visit_pred((X < T), TypedVs, NewTypedVs, _) -->
|
||||||
% check the expression
|
% check the expression
|
||||||
visit_exp(X, TypedVs, ITypedVs, TMP1, Type),
|
visit_exp(X, TypedVs, ITypedVs, TMP1, _),
|
||||||
visit_exp(T, ITypedVs, NewTypedVs, TMP2, Type),
|
visit_exp(T, ITypedVs, NewTypedVs, TMP2, _),
|
||||||
% assign the type to X, if any
|
% assign the type to X, if any
|
||||||
% final code
|
% final code
|
||||||
[init_label(success_label), lt(TMP1,TMP2)].
|
[init_label(success_label), lt(TMP1,TMP2)].
|
||||||
visit_pred((X > T), TypedVs, NewTypedVs, _) -->
|
visit_pred((X > T), TypedVs, NewTypedVs, _) -->
|
||||||
% check the expression
|
% check the expression
|
||||||
visit_exp(X, TypedVs, ITypedVs, TMP1, Type),
|
visit_exp(X, TypedVs, ITypedVs, TMP1, _),
|
||||||
visit_exp(T, ITypedVs, NewTypedVs, TMP2, Type),
|
visit_exp(T, ITypedVs, NewTypedVs, TMP2, _),
|
||||||
% assign the type to X, if any
|
% assign the type to X, if any
|
||||||
% final code
|
% final code
|
||||||
[init_label(success_label), lt(TMP2,TMP1)].
|
[init_label(success_label), lt(TMP2,TMP1)].
|
||||||
@ -496,80 +513,82 @@ compile_op(export(x(A),V,any), '$put_fi'(A,V)) :- !.
|
|||||||
compile_op(export(x(A),V,int), '$put_i'(A,V)).
|
compile_op(export(x(A),V,int), '$put_i'(A,V)).
|
||||||
compile_op(export(x(A),V,float), '$put_f'(A,V)).
|
compile_op(export(x(A),V,float), '$put_f'(A,V)).
|
||||||
compile_op(eq(x(A),F), '$a_eq_float'(A,F)) :- float(F), !.
|
compile_op(eq(x(A),F), '$a_eq_float'(A,F)) :- float(F), !.
|
||||||
compile_op(eq(x(A),I), '$a_eq_int'(A,I)) :- integer(I), !.
|
compile_op(eq(x(A),I), '$a_eq_int'(A,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(eq(x(A),x(B)), '$a_eq'(A,B)).
|
compile_op(eq(x(A),x(B)), '$a_eq'(A,B)).
|
||||||
compile_op(lt(x(A),F), '$ltc_float'(A,F)) :- float(F), !.
|
compile_op(lt(x(A),F), '$ltc_float'(A,F)) :- float(F), !.
|
||||||
compile_op(lt(x(A),I), '$ltc_int'(A,I)) :- integer(I), !.
|
compile_op(lt(x(A),I), '$ltc_int'(A,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(lt(F,x(A)), '$gtc_float'(A,F)) :- float(F), !.
|
compile_op(lt(F,x(A)), '$gtc_float'(A,F)) :- float(F), !.
|
||||||
compile_op(lt(I,x(A)), '$gtc_int'(A,I)) :- integer(I), !.
|
compile_op(lt(I,x(A)), '$gtc_int'(A,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(lt(x(A),x(B)), '$lt'(A,B)).
|
compile_op(lt(x(A),x(B)), '$lt'(A,B)).
|
||||||
compile_op(get(x(A),V,any), '$get_fi'(A,V)) :- !.
|
compile_op(get(x(A),V,any), '$get_fi'(A,V)) :- !.
|
||||||
compile_op(get(x(A),V,int), '$get_i'(A,V)) :- !.
|
compile_op(get(x(A),V,int), '$get_i'(A,V)) :- !.
|
||||||
compile_op(get(x(A),V,float), '$get_f'(A,V)).
|
compile_op(get(x(A),V,float), '$get_f'(A,V)).
|
||||||
compile_op(add(x(A),F,x(B)), '$add_float_c'(A,B,F)) :- float(F), !.
|
compile_op(add(x(A),F,x(B)), '$add_float_c'(A,B,F)) :- float(F), !.
|
||||||
compile_op(add(x(A),I,x(B)), '$add_int_c'(A,B,I)) :- integer(I), !.
|
compile_op(add(x(A),I,x(B)), '$add_int_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(add(x(A),x(B),F), '$add_float_c'(A,B,F)) :- float(F), !.
|
compile_op(add(x(A),x(B),F), '$add_float_c'(A,B,F)) :- float(F), !.
|
||||||
compile_op(add(x(A),x(B),I), '$add_int_c'(A,B,I)) :- integer(I), !.
|
compile_op(add(x(A),x(B),I), '$add_int_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(add(x(A),x(B),x(C)), '$add'(A,B,C)).
|
compile_op(add(x(A),x(B),x(C)), '$add'(A,B,C)).
|
||||||
compile_op(sub(x(A),F,x(B)), '$sub_float_c'(A,B,F)) :- float(F), !.
|
compile_op(sub(x(A),F,x(B)), '$sub_float_c'(A,B,F)) :- float(F), !.
|
||||||
compile_op(sub(x(A),I,x(B)), '$sub_int_c'(A,B,I)) :- integer(I), !.
|
compile_op(sub(x(A),I,x(B)), '$sub_int_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(sub(x(A),x(B),F), '$add_float_c'(A,B,F1)) :- float(F), !, F1 is -F.
|
compile_op(sub(x(A),x(B),F), '$add_float_c'(A,B,F1)) :- float(F), !, F1 is -F.
|
||||||
compile_op(sub(x(A),x(B),I), '$add_int_c'(A,B,I1)) :- integer(I), !, I1 is -I.
|
compile_op(sub(x(A),x(B),I), '$add_int_c'(A,B,I1)) :- integer(I), !, I1 is -I, \+ '$bignum'(I1).
|
||||||
compile_op(sub(x(A),x(B),x(C)), '$sub'(A,B,C)).
|
compile_op(sub(x(A),x(B),x(C)), '$sub'(A,B,C)).
|
||||||
compile_op(mul(x(A),F,x(B)), '$mul_float_c'(A,B,F)) :- float(F), !.
|
compile_op(mul(x(A),F,x(B)), '$mul_float_c'(A,B,F)) :- float(F), !.
|
||||||
compile_op(mul(x(A),I,x(B)), '$mul_int_c'(A,B,I)) :- integer(I), !.
|
compile_op(mul(x(A),I,x(B)), '$mul_int_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(mul(x(A),x(B),F), '$mul_float_c'(A,B,F)) :- float(F), !.
|
compile_op(mul(x(A),x(B),F), '$mul_float_c'(A,B,F)) :- float(F), !.
|
||||||
compile_op(mul(x(A),x(B),I), '$mul_int_c'(A,B,I)) :- integer(I), !.
|
compile_op(mul(x(A),x(B),I), '$mul_int_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(mul(x(A),x(B),x(C)), '$mul'(A,B,C)).
|
compile_op(mul(x(A),x(B),x(C)), '$mul'(A,B,C)).
|
||||||
compile_op(fdiv(x(A),F,x(B)), '$fdiv_c1'(A,B,F)) :- float(F), !.
|
compile_op(fdiv(x(A),F,x(B)), '$fdiv_c1'(A,B,F)) :- float(F), !.
|
||||||
compile_op(fdiv(x(A),I,x(B)), '$fdiv_c1'(A,B,F)) :- integer(I), !, F is truncate(I).
|
compile_op(fdiv(x(A),I,x(B)), '$fdiv_c1'(A,B,F)) :- integer(I), !, \+ '$bignum'(I), F is truncate(I).
|
||||||
compile_op(fdiv(x(A),x(B),F), '$fdiv_c2'(A,B,F)) :- float(F), !.
|
compile_op(fdiv(x(A),x(B),F), '$fdiv_c2'(A,B,F)) :- float(F), !.
|
||||||
compile_op(fdiv(x(A),x(B),I), '$fdiv_c2'(A,B,F)) :- integer(I), !, F is truncate(I).
|
compile_op(fdiv(x(A),x(B),I), '$fdiv_c2'(A,B,F)) :- integer(I), !, \+ '$bignum'(I), F is truncate(I).
|
||||||
compile_op(fdiv(x(A),x(B),x(C)), '$fdiv'(A,B,C)).
|
compile_op(fdiv(x(A),x(B),x(C)), '$fdiv'(A,B,C)).
|
||||||
compile_op(idiv(x(A),I,x(B)), '$idiv_c1'(A,B,I)) :- integer(I), !.
|
compile_op(idiv(x(A),I,x(B)), '$idiv_c1'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(idiv(x(A),x(B),I), '$idiv_c2'(A,B,I)) :- integer(I), !.
|
compile_op(idiv(x(A),x(B),I), '$idiv_c2'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(idiv(x(A),x(B),x(C)), '$idiv'(A,B,C)).
|
compile_op(idiv(x(A),x(B),x(C)), '$idiv'(A,B,C)).
|
||||||
compile_op(mod(x(A),I,x(B)), '$mod_c1'(A,B,I)) :- integer(I), !.
|
compile_op(mod(x(A),I,x(B)), '$mod_c1'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(mod(x(A),x(B),I), '$mod_c2'(A,B,I)) :- integer(I), !.
|
compile_op(mod(x(A),x(B),I), '$mod_c2'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(mod(x(A),x(B),x(C)), '$mod'(A,B,C)).
|
compile_op(mod(x(A),x(B),x(C)), '$mod'(A,B,C)).
|
||||||
compile_op(rem(x(A),I,x(B)), '$rem_c1'(A,B,I)) :- integer(I), !.
|
compile_op(rem(x(A),I,x(B)), '$rem_c1'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(rem(x(A),x(B),I), '$rem_c2'(A,B,I)) :- integer(I), !.
|
compile_op(rem(x(A),x(B),I), '$rem_c2'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(rem(x(A),x(B),x(C)), '$rem'(A,B,C)).
|
compile_op(rem(x(A),x(B),x(C)), '$rem'(A,B,C)).
|
||||||
compile_op(and(x(A),I,x(B)), '$land_c'(A,B,I)) :- integer(I), !.
|
compile_op(and(x(A),I,x(B)), '$land_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(and(x(A),x(B),I), '$land_c'(A,B,I)) :- integer(I), !.
|
compile_op(and(x(A),x(B),I), '$land_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(and(x(A),x(B),x(C)), '$land'(A,B,C)).
|
compile_op(and(x(A),x(B),x(C)), '$land'(A,B,C)).
|
||||||
compile_op(or(x(A),I,x(B)), '$lor_c'(A,B,I)) :- integer(I), !.
|
compile_op(or(x(A),I,x(B)), '$lor_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(or(x(A),x(B),I), '$lor_c'(A,B,I)) :- integer(I), !.
|
compile_op(or(x(A),x(B),I), '$lor_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(or(x(A),x(B),x(C)), '$lor'(A,B,C)).
|
compile_op(or(x(A),x(B),x(C)), '$lor'(A,B,C)).
|
||||||
compile_op(xor(x(A),I,x(B)), '$xor_c'(A,B,I)) :- integer(I), !.
|
compile_op(xor(x(A),I,x(B)), '$xor_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(xor(x(A),x(B),I), '$xor_c'(A,B,I)) :- integer(I), !.
|
compile_op(xor(x(A),x(B),I), '$xor_c'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(xor(x(A),x(B),x(C)), '$xor'(A,B,C)).
|
compile_op(xor(x(A),x(B),x(C)), '$xor'(A,B,C)).
|
||||||
compile_op(uminus(x(A),x(B)), '$uminus'(A,B)).
|
compile_op(uminus(x(A),x(B)), '$uminus'(A,B)).
|
||||||
compile_op(sr(x(A),I,x(B)), '$sr_c1'(A,B,I)) :- integer(I), !.
|
compile_op(sr(x(A),I,x(B)), '$sr_c1'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(sr(x(A),x(B),I), '$sr_c2'(A,B,I)) :- integer(I), !.
|
compile_op(sr(x(A),x(B),I), '$sr_c2'(A,B,I)) :- integer(I), I >=0, !, \+ '$bignum'(I).
|
||||||
|
compile_op(sr(x(A),x(B),I), '$sl_c2'(A,B,NI)) :- integer(I), !, NI is -I, \+ '$bignum'(NI).
|
||||||
compile_op(sr(x(A),x(B),x(C)), '$sr'(A,B,C)).
|
compile_op(sr(x(A),x(B),x(C)), '$sr'(A,B,C)).
|
||||||
compile_op(sl(x(A),I,x(B)), '$sl_c1'(A,B,I)) :- integer(I), !.
|
compile_op(sl(x(A),I,x(B)), '$sl_c1'(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(sl(x(A),x(B),I), '$sl_c2'(A,B,I)) :- integer(I), !.
|
compile_op(sl(x(A),x(B),I), '$sl_c2'(A,B,I)) :- integer(I), I >= 0, !, \+ '$bignum'(I).
|
||||||
|
compile_op(sl(x(A),x(B),I), '$sr_c2'(A,B,NI)) :- integer(I), !, NI is -I, \+ '$bignum'(NI).
|
||||||
compile_op(sl(x(A),x(B),x(C)), '$sl'(A,B,C)).
|
compile_op(sl(x(A),x(B),x(C)), '$sl'(A,B,C)).
|
||||||
/*
|
/*
|
||||||
compile_op(zerop(x(A),Op), '$zerop'(A,Op)).
|
compile_op(zerop(x(A),Op), '$zerop'(A,Op)).
|
||||||
compile_op(exp(x(A),F,x(B)), exp_c(A,B,F)) :- float(F), !.
|
compile_op(exp(x(A),F,x(B)), exp_c(A,B,F)) :- float(F), !.
|
||||||
compile_op(exp(x(A),I,x(B)), exp_c(A,B,F)) :- integer(I), !, F is truncate(I).
|
compile_op(exp(x(A),I,x(B)), exp_c(A,B,F)) :- integer(I), !, \+ '$bignum'(I), F is truncate(I).
|
||||||
compile_op(exp(x(A),x(B),F), exp_c(A,B,F)) :- float(F), !.
|
compile_op(exp(x(A),x(B),F), exp_c(A,B,F)) :- float(F), !.
|
||||||
compile_op(exp(x(A),x(B),I), exp_c(A,B,F)) :- integer(I), !, F is truncate(I).
|
compile_op(exp(x(A),x(B),I), exp_c(A,B,F)) :- integer(I), !, \+ '$bignum'(I), F is truncate(I).
|
||||||
compile_op(exp(x(A),x(B),x(C)), exp(A,B,C)).
|
compile_op(exp(x(A),x(B),x(C)), exp(A,B,C)).
|
||||||
compile_op(max(x(A),F,x(B)), max_float_c(A,B,F)) :- float(F), !.
|
compile_op(max(x(A),F,x(B)), max_float_c(A,B,F)) :- float(F), !.
|
||||||
compile_op(max(x(A),I,x(B)), max_int_c(A,B,I)) :- integer(I), !.
|
compile_op(max(x(A),I,x(B)), max_int_c(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(max(x(A),x(B),F), max_float_c(A,B,F)) :- float(F), !.
|
compile_op(max(x(A),x(B),F), max_float_c(A,B,F)) :- float(F), !.
|
||||||
compile_op(max(x(A),x(B),I), max_int_c(A,B,I)) :- integer(I), !.
|
compile_op(max(x(A),x(B),I), max_int_c(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(max(x(A),x(B),x(C)), max(A,B,C)).
|
compile_op(max(x(A),x(B),x(C)), max(A,B,C)).
|
||||||
compile_op(min(x(A),F,x(B)), min_float_c(A,B,F)) :- float(F), !.
|
compile_op(min(x(A),F,x(B)), min_float_c(A,B,F)) :- float(F), !.
|
||||||
compile_op(min(x(A),I,x(B)), min_int_c(A,B,I)) :- integer(I), !.
|
compile_op(min(x(A),I,x(B)), min_int_c(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(min(x(A),x(B),F), min_float_c(A,B,F)) :- float(F), !.
|
compile_op(min(x(A),x(B),F), min_float_c(A,B,F)) :- float(F), !.
|
||||||
compile_op(min(x(A),x(B),I), min_int_c(A,B,I)) :- integer(I), !.
|
compile_op(min(x(A),x(B),I), min_int_c(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(min(x(A),x(B),x(C)), min(A,B,C)).
|
compile_op(min(x(A),x(B),x(C)), min(A,B,C)).
|
||||||
compile_op(gcd(x(A),I,x(B)), gcd_c(A,B,I)) :- integer(I), !.
|
compile_op(gcd(x(A),I,x(B)), gcd_c(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(gcd(x(A),x(B),I), gcd_c(A,B,I)) :- integer(I), !.
|
compile_op(gcd(x(A),x(B),I), gcd_c(A,B,I)) :- integer(I), !, \+ '$bignum'(I).
|
||||||
compile_op(gcd(x(A),x(B),x(C)), gcd(A,B,C)).
|
compile_op(gcd(x(A),x(B),x(C)), gcd(A,B,C)).
|
||||||
compile_op(unot(x(A),x(B)), unot(A,B)).
|
compile_op(unot(x(A),x(B)), unot(A,B)).
|
||||||
compile_op(exp1(x(A),x(B)), exp1(A,B)).
|
compile_op(exp1(x(A),x(B)), exp1(A,B)).
|
||||||
|
@ -48,6 +48,11 @@ otherwise.
|
|||||||
|
|
||||||
:- compile_expressions.
|
:- compile_expressions.
|
||||||
|
|
||||||
|
lists:append([], L, L).
|
||||||
|
lists:append([H|T], L, [H|R]) :-
|
||||||
|
lists:append(T, L, R).
|
||||||
|
|
||||||
|
|
||||||
:- [
|
:- [
|
||||||
'yio.yap',
|
'yio.yap',
|
||||||
'debug.yap',
|
'debug.yap',
|
||||||
@ -83,10 +88,6 @@ otherwise.
|
|||||||
|
|
||||||
:- source.
|
:- source.
|
||||||
|
|
||||||
lists:append([], L, L).
|
|
||||||
lists:append([H|T], L, [H|R]) :-
|
|
||||||
lists:append(T, L, R).
|
|
||||||
|
|
||||||
% member(?Element, ?Set)
|
% member(?Element, ?Set)
|
||||||
% is true when Set is a list, and Element occurs in it. It may be used
|
% is true when Set is a list, and Element occurs in it. It may be used
|
||||||
% to test for an element or to enumerate all the elements by backtracking.
|
% to test for an element or to enumerate all the elements by backtracking.
|
||||||
|
@ -194,11 +194,18 @@ module(N) :-
|
|||||||
% A6: head module (this is the one used in compiling and accessing).
|
% A6: head module (this is the one used in compiling and accessing).
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
'$module_expansion'((H:-B),(H:-B1),(H:-BO),M,HM) :- !,
|
'$module_expansion'((H:-B),(H:-B1),(H:-NBO),M,HM) :- !,
|
||||||
'$is_mt'(M, H, B, IB, MM),
|
'$is_mt'(M, H, B, IB, MM),
|
||||||
'$module_u_vars'(H,UVars,M), % collect head variables in
|
'$module_u_vars'(H,UVars,M), % collect head variables in
|
||||||
% expanded positions
|
% expanded positions
|
||||||
'$module_expansion'(IB,B1,BO,M,MM,HM,UVars).
|
'$module_expansion'(IB,B1,BO,M,MM,HM,UVars),
|
||||||
|
(
|
||||||
|
get_value('$c_arith',true)
|
||||||
|
->
|
||||||
|
'$eval':'$compile_arithmetic'((H:-BO),(H:-NBO))
|
||||||
|
;
|
||||||
|
NBO = BO
|
||||||
|
).
|
||||||
% do not expand bodyless clauses.
|
% do not expand bodyless clauses.
|
||||||
'$module_expansion'(H,H,H,_,_).
|
'$module_expansion'(H,H,H,_,_).
|
||||||
|
|
||||||
|
@ -59,14 +59,14 @@ profile_reset :-
|
|||||||
profile_reset.
|
profile_reset.
|
||||||
|
|
||||||
showprofres :-
|
showprofres :-
|
||||||
'$proftype'(offline), !,
|
'$proftype'(offline), !,
|
||||||
'$offline_showprofres'.
|
'$offline_showprofres'.
|
||||||
showprofres :-
|
showprofres :-
|
||||||
showprofres(-1).
|
showprofres(-1).
|
||||||
|
|
||||||
showprofres(A) :-
|
showprofres(A) :-
|
||||||
'$proftype'(offline), !,
|
'$proftype'(offline), !,
|
||||||
'$offline_showprofres'(A).
|
'$offline_showprofres'(A).
|
||||||
showprofres(A) :-
|
showprofres(A) :-
|
||||||
('$profison' -> profoff, Stop = true ; Stop = false),
|
('$profison' -> profoff, Stop = true ; Stop = false),
|
||||||
'$profglobs'(Tot,GCs,HGrows,SGrows,Mallocs,ProfOns),
|
'$profglobs'(Tot,GCs,HGrows,SGrows,Mallocs,ProfOns),
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
statistics :-
|
statistics :-
|
||||||
'$runtime'(Runtime,_),
|
'$runtime'(Runtime,_),
|
||||||
'$cputime'(CPUtime,_),
|
'$cputime'(CPUtime,_),
|
||||||
|
'$systime'(SYStime,_),
|
||||||
'$walltime'(Walltime,_),
|
'$walltime'(Walltime,_),
|
||||||
'$statistics_heap_info'(HpSpa, HpInUse),
|
'$statistics_heap_info'(HpSpa, HpInUse),
|
||||||
'$statistics_heap_max'(HpMax),
|
'$statistics_heap_max'(HpMax),
|
||||||
@ -33,9 +34,9 @@ statistics :-
|
|||||||
'$inform_trail_overflows'(NOfTO,TotTOTime),
|
'$inform_trail_overflows'(NOfTO,TotTOTime),
|
||||||
'$inform_gc'(NOfGC,TotGCTime,TotGCSize),
|
'$inform_gc'(NOfGC,TotGCTime,TotGCSize),
|
||||||
'$inform_agc'(NOfAGC,TotAGCTime,TotAGCSize),
|
'$inform_agc'(NOfAGC,TotAGCTime,TotAGCSize),
|
||||||
'$statistics'(Runtime,CPUtime,Walltime,HpSpa,HpInUse,HpMax,TrlSpa, TrlInUse,TrlMax,StkSpa, GlobInU, LocInU,GlobMax,LocMax,NOfHO,TotHOTime,NOfSO,TotSOTime,NOfTO,TotTOTime,NOfGC,TotGCTime,TotGCSize,NOfAGC,TotAGCTime,TotAGCSize).
|
'$statistics'(Runtime,CPUtime,SYStime,Walltime,HpSpa,HpInUse,HpMax,TrlSpa, TrlInUse,TrlMax,StkSpa, GlobInU, LocInU,GlobMax,LocMax,NOfHO,TotHOTime,NOfSO,TotSOTime,NOfTO,TotTOTime,NOfGC,TotGCTime,TotGCSize,NOfAGC,TotAGCTime,TotAGCSize).
|
||||||
|
|
||||||
'$statistics'(Runtime,CPUtime,Walltime,HpSpa,HpInUse,HpMax,TrlSpa, TrlInUse,_TrlMax,StkSpa, GlobInU, LocInU,GlobMax,LocMax,NOfHO,TotHOTime,NOfSO,TotSOTime,NOfTO,TotTOTime,NOfGC,TotGCTime,TotGCSize,NOfAGC,TotAGCTime,TotAGCSize) :-
|
'$statistics'(Runtime,CPUtime,SYStime,Walltime,HpSpa,HpInUse,HpMax,TrlSpa, TrlInUse,_TrlMax,StkSpa, GlobInU, LocInU,GlobMax,LocMax,NOfHO,TotHOTime,NOfSO,TotSOTime,NOfTO,TotTOTime,NOfGC,TotGCTime,TotGCSize,NOfAGC,TotAGCTime,TotAGCSize) :-
|
||||||
TotalMemory is HpSpa+StkSpa+TrlSpa,
|
TotalMemory is HpSpa+StkSpa+TrlSpa,
|
||||||
format(user_error,'memory (total)~t~d bytes~35+~n', [TotalMemory]),
|
format(user_error,'memory (total)~t~d bytes~35+~n', [TotalMemory]),
|
||||||
format(user_error,' program space~t~d bytes~35+', [HpSpa]),
|
format(user_error,' program space~t~d bytes~35+', [HpSpa]),
|
||||||
@ -71,10 +72,12 @@ statistics :-
|
|||||||
format(user_error,'~t~3f~12+ sec. runtime~n', [RTime]),
|
format(user_error,'~t~3f~12+ sec. runtime~n', [RTime]),
|
||||||
CPUTime is float(CPUtime)/1000,
|
CPUTime is float(CPUtime)/1000,
|
||||||
format(user_error,'~t~3f~12+ sec. cputime~n', [CPUTime]),
|
format(user_error,'~t~3f~12+ sec. cputime~n', [CPUTime]),
|
||||||
|
SYSTime is float(SYStime)/1000,
|
||||||
|
format(user_error,'~t~3f~12+ sec. systime~n', [SYSTime]),
|
||||||
WallTime is float(Walltime)/1000,
|
WallTime is float(Walltime)/1000,
|
||||||
format(user_error,'~t~3f~12+ sec. elapsed time~n~n', [WallTime]),
|
format(user_error,'~t~3f~12+ sec. elapsed time~n~n', [WallTime]),
|
||||||
fail.
|
fail.
|
||||||
'$statistics'(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_).
|
'$statistics'(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_).
|
||||||
|
|
||||||
statistics(runtime,[T,L]) :-
|
statistics(runtime,[T,L]) :-
|
||||||
'$runtime'(T,L).
|
'$runtime'(T,L).
|
||||||
|
@ -856,8 +856,9 @@ nb_current(GlobalVariable, Val) :-
|
|||||||
nb_getval(GlobalVariable, Val).
|
nb_getval(GlobalVariable, Val).
|
||||||
|
|
||||||
|
|
||||||
between(I,_,I).
|
between(I,M,I) :- I =< M.
|
||||||
between(I0,I,J) :- I0 < I,
|
between(I0,I,J) :- I0 < I,
|
||||||
I1 is I0+1,
|
I1 is I0+1,
|
||||||
between(I1,I,J).
|
between(I1,I,J).
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user