Merge branch 'master' of git.dcc.fc.up.pt:yap-6.3
This commit is contained in:
20
C/absmi.c
20
C/absmi.c
@@ -10257,7 +10257,7 @@ Yap_absmi(int inp)
|
||||
if (IsIntTerm(d0) && IsIntTerm(d1)) {
|
||||
Int i2 = IntOfTerm(d1);
|
||||
if (i2 < 0)
|
||||
d0 = MkIntegerTerm(IntOfTerm(d0) >> -i2);
|
||||
d0 = MkIntegerTerm(SLR(IntOfTerm(d0), -i2));
|
||||
else
|
||||
d0 = do_sll(IntOfTerm(d0),i2);
|
||||
}
|
||||
@@ -10343,7 +10343,7 @@ Yap_absmi(int inp)
|
||||
if (IsIntTerm(d0)) {
|
||||
Int i2 = IntOfTerm(d0);
|
||||
if (i2 < 0)
|
||||
d0 = MkIntegerTerm(d1 >> -i2);
|
||||
d0 = MkIntegerTerm(SLR(d1, -i2));
|
||||
else
|
||||
d0 = do_sll(d1,i2);
|
||||
}
|
||||
@@ -10388,7 +10388,7 @@ Yap_absmi(int inp)
|
||||
if (IsIntTerm(d0) && IsIntTerm(d1)) {
|
||||
Int i2 = IntOfTerm(d1);
|
||||
if (i2 < 0)
|
||||
d0 = MkIntegerTerm(IntOfTerm(d0) >> -i2);
|
||||
d0 = MkIntegerTerm(SLR(IntOfTerm(d0), -i2));
|
||||
else
|
||||
d0 = do_sll(IntOfTerm(d0),i2);
|
||||
}
|
||||
@@ -10481,7 +10481,7 @@ Yap_absmi(int inp)
|
||||
if (IsIntTerm(d0)) {
|
||||
Int i2 = IntOfTerm(d0);
|
||||
if (i2 < 0)
|
||||
d0 = MkIntegerTerm(d1 >> -i2);
|
||||
d0 = MkIntegerTerm(SLR(d1, -i2));
|
||||
else
|
||||
d0 = do_sll(d1,i2);
|
||||
}
|
||||
@@ -10531,7 +10531,7 @@ Yap_absmi(int inp)
|
||||
if (i2 < 0)
|
||||
d0 = do_sll(IntOfTerm(d0), -i2);
|
||||
else
|
||||
d0 = MkIntTerm(IntOfTerm(d0) >> i2);
|
||||
d0 = MkIntTerm(SLR(IntOfTerm(d0), i2));
|
||||
}
|
||||
else {
|
||||
saveregs();
|
||||
@@ -10576,7 +10576,7 @@ Yap_absmi(int inp)
|
||||
{
|
||||
Int d1 = PREG->u.xxn.c;
|
||||
if (IsIntTerm(d0)) {
|
||||
d0 = MkIntTerm(IntOfTerm(d0) >> d1);
|
||||
d0 = MkIntTerm(SLR(IntOfTerm(d0), d1));
|
||||
}
|
||||
else {
|
||||
saveregs();
|
||||
@@ -10617,7 +10617,7 @@ Yap_absmi(int inp)
|
||||
if (i2 < 0)
|
||||
d0 = do_sll(d1, -i2);
|
||||
else
|
||||
d0 = MkIntegerTerm(d1 >> i2);
|
||||
d0 = MkIntegerTerm(SLR(d1, i2));
|
||||
}
|
||||
else {
|
||||
saveregs();
|
||||
@@ -10662,7 +10662,7 @@ Yap_absmi(int inp)
|
||||
if (i2 < 0)
|
||||
d0 = do_sll(IntOfTerm(d0), -i2);
|
||||
else
|
||||
d0 = MkIntTerm(IntOfTerm(d0) >> i2);
|
||||
d0 = MkIntTerm(SLR(IntOfTerm(d0), i2));
|
||||
}
|
||||
else {
|
||||
saveregs();
|
||||
@@ -10710,7 +10710,7 @@ Yap_absmi(int inp)
|
||||
{
|
||||
Int d1 = PREG->u.yxn.c;
|
||||
if (IsIntTerm(d0)) {
|
||||
d0 = MkIntTerm(IntOfTerm(d0) >> d1);
|
||||
d0 = MkIntTerm(SLR(IntOfTerm(d0), d1));
|
||||
}
|
||||
else {
|
||||
saveregs();
|
||||
@@ -10753,7 +10753,7 @@ Yap_absmi(int inp)
|
||||
if (i2 < 0)
|
||||
d0 = do_sll(d1, -i2);
|
||||
else
|
||||
d0 = MkIntegerTerm(d1 >> i2);
|
||||
d0 = MkIntegerTerm(SLR(d1, i2));
|
||||
}
|
||||
else {
|
||||
saveregs();
|
||||
|
@@ -412,6 +412,7 @@ X_API int STD_PROTO(YAP_IsWideAtom,(Atom));
|
||||
X_API char *STD_PROTO(YAP_AtomName,(Atom));
|
||||
X_API wchar_t *STD_PROTO(YAP_WideAtomName,(Atom));
|
||||
X_API Term STD_PROTO(YAP_MkPairTerm,(Term,Term));
|
||||
X_API Term STD_PROTO(YAP_MkListFromTerms,(Term *,Int));
|
||||
X_API Term STD_PROTO(YAP_MkNewPairTerm,(void));
|
||||
X_API Term STD_PROTO(YAP_HeadOfTerm,(Term));
|
||||
X_API Term STD_PROTO(YAP_TailOfTerm,(Term));
|
||||
@@ -982,6 +983,44 @@ YAP_MkPairTerm(Term t1, Term t2)
|
||||
return t;
|
||||
}
|
||||
|
||||
X_API Term
|
||||
YAP_MkListFromTerms(Term *ta, Int sz)
|
||||
{
|
||||
CACHE_REGS
|
||||
Term t;
|
||||
CELL *h;
|
||||
if (sz == 0)
|
||||
return TermNil;
|
||||
BACKUP_H();
|
||||
if (H+sz*2 > ASP-1024) {
|
||||
Int sl1 = Yap_InitSlot((CELL)ta PASS_REGS);
|
||||
RECOVER_H();
|
||||
if (!dogc( PASS_REGS1 )) {
|
||||
return TermNil;
|
||||
}
|
||||
BACKUP_H();
|
||||
ta = (CELL *)Yap_GetFromSlot(sl1 PASS_REGS);
|
||||
Yap_RecoverSlots(1 PASS_REGS);
|
||||
}
|
||||
h = H;
|
||||
t = AbsPair(h);
|
||||
while (sz--) {
|
||||
Term ti = *ta++;
|
||||
if (IsVarTerm(ti)) {
|
||||
RESET_VARIABLE(h);
|
||||
Yap_unify(ti, h[0]);
|
||||
} else {
|
||||
h[0] = ti;
|
||||
}
|
||||
h[1] = AbsPair(h+2);
|
||||
h += 2;
|
||||
}
|
||||
h[-1] = TermNil;
|
||||
H = h;
|
||||
RECOVER_H();
|
||||
return t;
|
||||
}
|
||||
|
||||
X_API Term
|
||||
YAP_MkNewPairTerm()
|
||||
{
|
||||
|
@@ -3113,7 +3113,7 @@ p_undefined( USES_REGS1 )
|
||||
if (EndOfPAEntr(pe))
|
||||
return TRUE;
|
||||
PELOCK(36,pe);
|
||||
if (pe->PredFlags & (CPredFlag|UserCPredFlag|TestPredFlag|AsmPredFlag|DynamicPredFlag|LogUpdatePredFlag)) {
|
||||
if (pe->PredFlags & (CPredFlag|UserCPredFlag|TestPredFlag|AsmPredFlag|DynamicPredFlag|LogUpdatePredFlag|TabledPredFlag)) {
|
||||
UNLOCKPE(57,pe);
|
||||
return FALSE;
|
||||
}
|
||||
|
@@ -377,16 +377,16 @@ Yap_gmp_sll_big_int(Term t, Int i)
|
||||
MP_INT *b = Yap_BigIntOfTerm(t);
|
||||
|
||||
if (i > 0) {
|
||||
mpz_init_set(&new, b);
|
||||
mpz_mul_2exp(&new, &new, i);
|
||||
mpz_init(&new);
|
||||
mpz_mul_2exp(&new, b, i);
|
||||
} else if (i == 0) {
|
||||
return t;
|
||||
} else {
|
||||
mpz_init_set(&new, b);
|
||||
mpz_init(&new);
|
||||
if (i == Int_MIN) {
|
||||
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, MkIntegerTerm(i), "<</2");
|
||||
}
|
||||
mpz_tdiv_q_2exp(&new, &new, -i);
|
||||
mpz_fdiv_q_2exp(&new, b, -i);
|
||||
}
|
||||
return MkBigAndClose(&new);
|
||||
} else {
|
||||
|
@@ -4514,17 +4514,27 @@ unnumber_complex_term(CELL *pt0, CELL *pt0_end, CELL *ptf, CELL *HLow, int share
|
||||
if (ASP-(max+1) <= H) {
|
||||
goto overflow;
|
||||
}
|
||||
/* we found this before */
|
||||
*ptf++ = ASP[-id-1];
|
||||
/* we found this before? */
|
||||
if (ASP[-id-1])
|
||||
*ptf++ = ASP[-id-1];
|
||||
else {
|
||||
RESET_VARIABLE(ptf);
|
||||
ASP[-id-1] = (CELL)ptf;
|
||||
ptf++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
max = id;
|
||||
if (ASP-(max+1) <= H) {
|
||||
/* alloc more space */
|
||||
if (ASP-(id+1) <= H) {
|
||||
goto overflow;
|
||||
}
|
||||
while (id > max) {
|
||||
ASP[-(id+1)] = 0L;
|
||||
max++;
|
||||
}
|
||||
/* new variable */
|
||||
RESET_VARIABLE(ptf);
|
||||
ASP[-id-1] = (CELL)ptf;
|
||||
ASP[-(id+1)] = (CELL)ptf;
|
||||
ptf++;
|
||||
continue;
|
||||
}
|
||||
@@ -4723,7 +4733,7 @@ Yap_UnNumberTerm(Term inp, int share) {
|
||||
static Int
|
||||
p_unnumbervars( USES_REGS1 ) {
|
||||
/* this should be a standard Prolog term, so we allow sharing? */
|
||||
return Yap_unify(Yap_UnNumberTerm(ARG1, FALSE PASS_REGS), ARG2);
|
||||
return Yap_unify(UnnumberTerm(ARG1, 2, FALSE PASS_REGS), ARG2);
|
||||
}
|
||||
|
||||
void Yap_InitUtilCPreds(void)
|
||||
|
Reference in New Issue
Block a user