fixes + win64

This commit is contained in:
Vitor Santos Costa 2016-11-08 01:37:36 -06:00
parent 46a9d52d2d
commit b03e0634c7
56 changed files with 1612 additions and 1529 deletions

View File

@ -55,9 +55,8 @@ uint64_t HashFunction(const unsigned char *CHP) {
static Prop static Prop
GetFunctorProp(AtomEntry *ae, GetFunctorProp(AtomEntry *ae,
arity_t arity) { /* look property list of atom a for kind */ arity_t arity) { /* look property list of atom a for kind */
FunctorEntry *pp;
PropEntry *p = RepFunctorProp(ae->PropsOfAE); PropEntry *p = ae->PropsOfAE;
while (p != NIL) { while (p != NIL) {
if (p->KindOfPE == FunctorProperty && if (p->KindOfPE == FunctorProperty &&
RepFunctorProp(p)->ArityOfFE == arity) { RepFunctorProp(p)->ArityOfFE == arity) {

View File

@ -326,7 +326,7 @@ msb(Int inp USES_REGS) /* calculate the most significant bit for an integer */
Int out = 0; Int out = 0;
if (inp < 0) { if (inp < 0) {
return Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(inp), Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(inp),
"msb/1 received %d", inp); "msb/1 received %d", inp);
} }
@ -363,7 +363,7 @@ lsb(Int inp USES_REGS) /* calculate the least significant bit for an integer */
Int out = 0; Int out = 0;
if (inp < 0) { if (inp < 0) {
return Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(inp), Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(inp),
"msb/1 received %d", inp); "msb/1 received %d", inp);
} }
if (inp==0) if (inp==0)
@ -387,7 +387,7 @@ popcount(Int inp USES_REGS) /* calculate the least significant bit for an intege
Int c = 0, j = 0, m = ((CELL)1); Int c = 0, j = 0, m = ((CELL)1);
if (inp < 0) { if (inp < 0) {
return Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(inp), Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(inp),
"popcount/1 received %d", inp); "popcount/1 received %d", inp);
} }
if (inp==0) if (inp==0)
@ -434,7 +434,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e: case long_int_e:
RINT(~IntegerOfTerm(t)); RINT(~IntegerOfTerm(t));
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "\\(%f)", FloatOfTerm(t)); Yap_ArithError(TYPE_ERROR_INTEGER, t, "\\(%f)", FloatOfTerm(t));
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_unot_big(t); return Yap_gmp_unot_big(t);
@ -450,7 +450,7 @@ eval1(Int fi, Term t USES_REGS) {
if (dbl >= 0) { if (dbl >= 0) {
RFLOAT(log(dbl)); RFLOAT(log(dbl));
} else { } else {
return Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t, "log(%f)", dbl); Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "log(%f)", dbl);
} }
} }
case op_log10: case op_log10:
@ -459,7 +459,7 @@ eval1(Int fi, Term t USES_REGS) {
if (dbl >= 0) { if (dbl >= 0) {
RFLOAT(log10(dbl)); RFLOAT(log10(dbl));
} else { } else {
return Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t, "log10(%f)", dbl); Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "log10(%f)", dbl);
} }
} }
case op_sqrt: case op_sqrt:
@ -468,7 +468,7 @@ eval1(Int fi, Term t USES_REGS) {
out = sqrt(dbl); out = sqrt(dbl);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(out)) { if (isnan(out)) {
return Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "sqrt(%f)", dbl); Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "sqrt(%f)", dbl);
} }
#endif #endif
RFLOAT(out); RFLOAT(out);
@ -517,7 +517,7 @@ eval1(Int fi, Term t USES_REGS) {
out = asin(dbl); out = asin(dbl);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(out)) { if (isnan(out)) {
return Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "asin(%f)", dbl); Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "asin(%f)", dbl);
} }
#endif #endif
RFLOAT(out); RFLOAT(out);
@ -530,7 +530,7 @@ eval1(Int fi, Term t USES_REGS) {
out = acos(dbl); out = acos(dbl);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(out)) { if (isnan(out)) {
return Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "acos(%f)", dbl); Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "acos(%f)", dbl);
} }
#endif #endif
RFLOAT(out); RFLOAT(out);
@ -543,7 +543,7 @@ eval1(Int fi, Term t USES_REGS) {
out = atan(dbl); out = atan(dbl);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(out)) { if (isnan(out)) {
return Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "atan(%f)", dbl); Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "atan(%f)", dbl);
} }
#endif #endif
RFLOAT(out); RFLOAT(out);
@ -556,7 +556,7 @@ eval1(Int fi, Term t USES_REGS) {
out = asinh(dbl); out = asinh(dbl);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(out)) { if (isnan(out)) {
return Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "asinh(%f)", dbl); Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "asinh(%f)", dbl);
} }
#endif #endif
RFLOAT(out); RFLOAT(out);
@ -569,7 +569,7 @@ eval1(Int fi, Term t USES_REGS) {
out = acosh(dbl); out = acosh(dbl);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(out)) { if (isnan(out)) {
return Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "acosh(%f)", dbl); Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "acosh(%f)", dbl);
} }
#endif #endif
RFLOAT(out); RFLOAT(out);
@ -582,7 +582,7 @@ eval1(Int fi, Term t USES_REGS) {
out = atanh(dbl); out = atanh(dbl);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(out)) { if (isnan(out)) {
return Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "atanh(%f)", dbl); Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "atanh(%f)", dbl);
} }
#endif #endif
RFLOAT(out); RFLOAT(out);
@ -645,12 +645,12 @@ eval1(Int fi, Term t USES_REGS) {
} }
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(dbl)) { if (isnan(dbl)) {
return Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "integer(%f)", dbl); Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "integer(%f)", dbl);
} }
#endif #endif
#if HAVE_ISINF #if HAVE_ISINF
if (isinf(dbl)) { if (isinf(dbl)) {
return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\ Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\
(%f)",dbl); (%f)",dbl);
} }
#endif #endif
@ -674,12 +674,12 @@ eval1(Int fi, Term t USES_REGS) {
} }
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(dbl)) { if (isnan(dbl)) {
return Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "integer(%f)", dbl); Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "integer(%f)", dbl);
} }
#endif #endif
#if HAVE_ISINF #if HAVE_ISINF
if (isinf(dbl)) { if (isinf(dbl)) {
return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\ Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\
(%f)",dbl); (%f)",dbl);
} }
#endif #endif
@ -704,12 +704,12 @@ eval1(Int fi, Term t USES_REGS) {
} }
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(dbl)) { if (isnan(dbl)) {
return Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "integer(%f)", dbl); Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "integer(%f)", dbl);
} }
#endif #endif
#if HAVE_ISINF #if HAVE_ISINF
if (isinf(dbl)) { if (isinf(dbl)) {
return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\ Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\
(%f)",dbl); (%f)",dbl);
} }
#endif #endif
@ -734,12 +734,12 @@ eval1(Int fi, Term t USES_REGS) {
} }
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(dbl)) { if (isnan(dbl)) {
return Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "integer(%f)", dbl); Yap_ArithError(DOMAIN_ERROR_OUT_OF_RANGE, t, "integer(%f)", dbl);
} }
#endif #endif
#if HAVE_ISINF #if HAVE_ISINF
if (isinf(dbl)) { if (isinf(dbl)) {
return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer (%f)",dbl); Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer (%f)",dbl);
} }
#endif #endif
if (dbl < 0.0) if (dbl < 0.0)
@ -804,7 +804,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e: case long_int_e:
RINT(msb(IntegerOfTerm(t) PASS_REGS)); RINT(msb(IntegerOfTerm(t) PASS_REGS));
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "msb(%f)", FloatOfTerm(t)); Yap_ArithError(TYPE_ERROR_INTEGER, t, "msb(%f)", FloatOfTerm(t));
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_msb(t); return Yap_gmp_msb(t);
@ -817,7 +817,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e: case long_int_e:
RINT(lsb(IntegerOfTerm(t) PASS_REGS)); RINT(lsb(IntegerOfTerm(t) PASS_REGS));
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "lsb(%f)", FloatOfTerm(t)); Yap_ArithError(TYPE_ERROR_INTEGER, t, "lsb(%f)", FloatOfTerm(t));
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_lsb(t); return Yap_gmp_lsb(t);
@ -830,7 +830,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e: case long_int_e:
RINT(popcount(IntegerOfTerm(t) PASS_REGS)); RINT(popcount(IntegerOfTerm(t) PASS_REGS));
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "popcount(%f)", FloatOfTerm(t)); Yap_ArithError(TYPE_ERROR_INTEGER, t, "popcount(%f)", FloatOfTerm(t));
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_popcount(t); return Yap_gmp_popcount(t);
@ -842,7 +842,7 @@ eval1(Int fi, Term t USES_REGS) {
switch (ETypeOfTerm(t)) { switch (ETypeOfTerm(t)) {
case long_int_e: case long_int_e:
if (isoLanguageFlag()) { /* iso */ if (isoLanguageFlag()) { /* iso */
return Yap_ArithError(TYPE_ERROR_FLOAT, t, "X is float_fractional_part(%f)", IntegerOfTerm(t)); Yap_ArithError(TYPE_ERROR_FLOAT, t, "X is float_fractional_part(%f)", IntegerOfTerm(t));
} else { } else {
RFLOAT(0.0); RFLOAT(0.0);
} }
@ -863,7 +863,7 @@ eval1(Int fi, Term t USES_REGS) {
case op_fintp: case op_fintp:
switch (ETypeOfTerm(t)) { switch (ETypeOfTerm(t)) {
case long_int_e: case long_int_e:
return Yap_ArithError(TYPE_ERROR_FLOAT, t, "X is float_integer_part(%f)", IntegerOfTerm(t)); Yap_ArithError(TYPE_ERROR_FLOAT, t, "X is float_integer_part(%f)", IntegerOfTerm(t));
case double_e: case double_e:
RFLOAT(rint(FloatOfTerm(t))); RFLOAT(rint(FloatOfTerm(t)));
break; break;
@ -901,7 +901,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e: case long_int_e:
RINT(Yap_random()*IntegerOfTerm(t)); RINT(Yap_random()*IntegerOfTerm(t));
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "random(%f)", FloatOfTerm(t)); Yap_ArithError(TYPE_ERROR_INTEGER, t, "random(%f)", FloatOfTerm(t));
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_mul_float_big(Yap_random(), t); return Yap_gmp_mul_float_big(Yap_random(), t);

View File

@ -150,7 +150,7 @@ p_mod(Term t1, Term t2 USES_REGS) {
Int mod; Int mod;
if (i2 == 0) if (i2 == 0)
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " mod 0", i1); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " mod 0", i1);
if (i1 == Int_MIN && i2 == -1) { if (i1 == Int_MIN && i2 == -1) {
return MkIntTerm(0); return MkIntTerm(0);
} }
@ -160,7 +160,7 @@ p_mod(Term t1, Term t2 USES_REGS) {
RINT(mod); RINT(mod);
} }
case (CELL)double_e: case (CELL)double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "mod/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "mod/2");
case (CELL)big_int_e: case (CELL)big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_mod_int_big(IntegerOfTerm(t1), t2); return Yap_gmp_mod_int_big(IntegerOfTerm(t1), t2);
@ -170,7 +170,7 @@ p_mod(Term t1, Term t2 USES_REGS) {
break; break;
} }
case (CELL)double_e: case (CELL)double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "mod/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "mod/2");
case (CELL)big_int_e: case (CELL)big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
@ -180,14 +180,14 @@ p_mod(Term t1, Term t2 USES_REGS) {
Int i2 = IntegerOfTerm(t2); Int i2 = IntegerOfTerm(t2);
if (i2 == 0) if (i2 == 0)
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... mod 0"); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... mod 0");
return Yap_gmp_mod_big_int(t1, i2); return Yap_gmp_mod_big_int(t1, i2);
} }
case (CELL)big_int_e: case (CELL)big_int_e:
/* two bignums */ /* two bignums */
return Yap_gmp_mod_big_big(t1, t2); return Yap_gmp_mod_big_big(t1, t2);
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "mod/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "mod/2");
default: default:
RERROR(); RERROR();
} }
@ -210,12 +210,12 @@ p_div2(Term t1, Term t2 USES_REGS) {
Int res, mod; Int res, mod;
if (i2 == 0) if (i2 == 0)
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " div 0", i1); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " div 0", i1);
if (i1 == Int_MIN && i2 == -1) { if (i1 == Int_MIN && i2 == -1) {
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_add_ints(Int_MAX, 1); return Yap_gmp_add_ints(Int_MAX, 1);
#else #else
return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, t1, Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, t1,
"// /2 with %d and %d", i1, i2); "// /2 with %d and %d", i1, i2);
#endif #endif
} }
@ -226,7 +226,7 @@ p_div2(Term t1, Term t2 USES_REGS) {
RINT(res); RINT(res);
} }
case (CELL)double_e: case (CELL)double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "div/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "div/2");
case (CELL)big_int_e: case (CELL)big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_div_int_big(IntegerOfTerm(t1), t2); return Yap_gmp_div_int_big(IntegerOfTerm(t1), t2);
@ -236,7 +236,7 @@ p_div2(Term t1, Term t2 USES_REGS) {
break; break;
} }
case (CELL)double_e: case (CELL)double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "div/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "div/2");
case (CELL)big_int_e: case (CELL)big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
@ -246,14 +246,14 @@ p_div2(Term t1, Term t2 USES_REGS) {
Int i2 = IntegerOfTerm(t2); Int i2 = IntegerOfTerm(t2);
if (i2 == 0) if (i2 == 0)
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... div 0"); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... div 0");
return Yap_gmp_div2_big_int(t1, i2); return Yap_gmp_div2_big_int(t1, i2);
} }
case (CELL)big_int_e: case (CELL)big_int_e:
/* two bignums */ /* two bignums */
return Yap_gmp_div2_big_big(t1, t2); return Yap_gmp_div2_big_big(t1, t2);
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "div/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "div/2");
default: default:
RERROR(); RERROR();
} }
@ -275,14 +275,14 @@ p_rem(Term t1, Term t2 USES_REGS) {
Int i2 = IntegerOfTerm(t2); Int i2 = IntegerOfTerm(t2);
if (i2 == 0) if (i2 == 0)
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " rem 0", i1); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " rem 0", i1);
if (i1 == Int_MIN && i2 == -1) { if (i1 == Int_MIN && i2 == -1) {
return MkIntTerm(0); return MkIntTerm(0);
} }
RINT(i1%i2); RINT(i1%i2);
} }
case (CELL)double_e: case (CELL)double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rem/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rem/2");
case (CELL)big_int_e: case (CELL)big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_rem_int_big(IntegerOfTerm(t1), t2); return Yap_gmp_rem_int_big(IntegerOfTerm(t1), t2);
@ -292,19 +292,19 @@ p_rem(Term t1, Term t2 USES_REGS) {
} }
break; break;
case (CELL)double_e: case (CELL)double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "rem/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "rem/2");
case (CELL)big_int_e: case (CELL)big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
case long_int_e: case long_int_e:
if (IntegerOfTerm(t2) == 0) if (IntegerOfTerm(t2) == 0)
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... rem 0"); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... rem 0");
return Yap_gmp_rem_big_int(t1, IntegerOfTerm(t2)); return Yap_gmp_rem_big_int(t1, IntegerOfTerm(t2));
case (CELL)big_int_e: case (CELL)big_int_e:
/* two bignums */ /* two bignums */
return Yap_gmp_rem_big_big(t1, t2); return Yap_gmp_rem_big_big(t1, t2);
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rem/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rem/2");
default: default:
RERROR(); RERROR();
} }
@ -320,7 +320,7 @@ p_rdiv(Term t1, Term t2 USES_REGS) {
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t1)) { switch (ETypeOfTerm(t1)) {
case (CELL)double_e: case (CELL)double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rdiv/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rdiv/2");
case (CELL)long_int_e: case (CELL)long_int_e:
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
case (CELL)long_int_e: case (CELL)long_int_e:
@ -330,7 +330,7 @@ p_rdiv(Term t1, Term t2 USES_REGS) {
Int i2 = IntegerOfTerm(t2); Int i2 = IntegerOfTerm(t2);
if (i2 == 0) if (i2 == 0)
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " rdiv 0", i1); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " rdiv 0", i1);
return Yap_gmq_rdiv_int_int(i1, i2); return Yap_gmq_rdiv_int_int(i1, i2);
} }
case (CELL)big_int_e: case (CELL)big_int_e:
@ -344,13 +344,13 @@ p_rdiv(Term t1, Term t2 USES_REGS) {
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
case long_int_e: case long_int_e:
if (IntegerOfTerm(t2) == 0) if (IntegerOfTerm(t2) == 0)
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... rdiv 0"); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... rdiv 0");
/* I know the term is much larger, so: */ /* I know the term is much larger, so: */
return Yap_gmq_rdiv_big_int(t1, IntegerOfTerm(t2)); return Yap_gmq_rdiv_big_int(t1, IntegerOfTerm(t2));
case (CELL)big_int_e: case (CELL)big_int_e:
return Yap_gmq_rdiv_big_big(t1, t2); return Yap_gmq_rdiv_big_big(t1, t2);
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rdiv/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rdiv/2");
default: default:
RERROR(); RERROR();
} }
@ -449,7 +449,7 @@ p_xor(Term t1, Term t2 USES_REGS)
/* two integers */ /* two integers */
RINT(IntegerOfTerm(t1) ^ IntegerOfTerm(t2)); RINT(IntegerOfTerm(t1) ^ IntegerOfTerm(t2));
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "#/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "#/2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_xor_int_big(IntegerOfTerm(t1), t2); return Yap_gmp_xor_int_big(IntegerOfTerm(t1), t2);
@ -459,7 +459,7 @@ p_xor(Term t1, Term t2 USES_REGS)
} }
break; break;
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "#/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "#/2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
@ -468,7 +468,7 @@ p_xor(Term t1, Term t2 USES_REGS)
case big_int_e: case big_int_e:
return Yap_gmp_xor_big_big(t1, t2); return Yap_gmp_xor_big_big(t1, t2);
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "#/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "#/2");
default: default:
RERROR(); RERROR();
} }
@ -690,7 +690,7 @@ p_exp(Term t1, Term t2 USES_REGS)
Int pow; Int pow;
if (i2 < 0) { if (i2 < 0) {
return Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t2, Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t2,
"%d ^ %d", i1, i2); "%d ^ %d", i1, i2);
} }
pow = ipow(i1,i2); pow = ipow(i1,i2);
@ -836,7 +836,7 @@ p_gcd(Term t1, Term t2 USES_REGS)
RINT(gcd(i1,i2 PASS_REGS)); RINT(gcd(i1,i2 PASS_REGS));
} }
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_gcd_int_big(IntegerOfTerm(t1), t2); return Yap_gmp_gcd_int_big(IntegerOfTerm(t1), t2);
@ -846,7 +846,7 @@ p_gcd(Term t1, Term t2 USES_REGS)
} }
break; break;
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "gcd/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "gcd/2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
@ -855,7 +855,7 @@ p_gcd(Term t1, Term t2 USES_REGS)
case big_int_e: case big_int_e:
return Yap_gmp_gcd_big_big(t1, t2); return Yap_gmp_gcd_big_big(t1, t2);
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2");
default: default:
RERROR(); RERROR();
} }

File diff suppressed because it is too large Load Diff

View File

@ -1453,6 +1453,8 @@ static void addcl_permission_error(AtomEntry *ap, Int Arity, int in_use) {
ti[1] = MkIntegerTerm(Arity); ti[1] = MkIntegerTerm(Arity);
t = Yap_MkApplTerm(FunctorSlash, 2, ti); t = Yap_MkApplTerm(FunctorSlash, 2, ti);
LOCAL_Error_TYPE = PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE; LOCAL_Error_TYPE = PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE;
LOCAL_ErrorMessage = Malloc( 256 );
if (in_use) { if (in_use) {
if (Arity == 0) if (Arity == 0)
sprintf(LOCAL_ErrorMessage, "static predicate %s is in use", ap->StrOfAE); sprintf(LOCAL_ErrorMessage, "static predicate %s is in use", ap->StrOfAE);

View File

@ -379,7 +379,6 @@ inline static Int compare(Term t1, Term t2) /* compare terms t1 and t2 */
if (IsExtensionFunctor(f)) if (IsExtensionFunctor(f))
return 1; return 1;
else { else {
int out;
if (f != FunctorDot) if (f != FunctorDot)
return strcmp(".", RepAtom(NameOfFunctor(f))->StrOfAE); return strcmp(".", RepAtom(NameOfFunctor(f))->StrOfAE);
else { else {
@ -596,10 +595,10 @@ inline static Int flt_cmp(Float dif) {
static Int a_cmp(Term t1, Term t2 USES_REGS) { static Int a_cmp(Term t1, Term t2 USES_REGS) {
if (IsVarTerm(t1)) { if (IsVarTerm(t1)) {
Yap_ThrowError( INSTANTIATION_ERROR, t1, "while doing arithmetic comparison" ); Yap_ThrowError( INSTANTIATION_ERROR, t1, 4, "while doing arithmetic comparison" );
} }
if (IsVarTerm(t2)) { if (IsVarTerm(t2)) {
Yap_ThrowError( INSTANTIATION_ERROR, t1, "while doing arithmetic comparison" ); Yap_ThrowError( INSTANTIATION_ERROR, t1, 4, "while doing arithmetic comparison" );
} }
if (IsFloatTerm(t1) && IsFloatTerm(t2)) { if (IsFloatTerm(t1) && IsFloatTerm(t2)) {
return flt_cmp(FloatOfTerm(t1) - FloatOfTerm(t2)); return flt_cmp(FloatOfTerm(t1) - FloatOfTerm(t2));
@ -622,7 +621,7 @@ static Int a_cmp(Term t1, Term t2 USES_REGS) {
Float f2 = FloatOfTerm(t2); Float f2 = FloatOfTerm(t2);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(f2)) { if (isnan(f2)) {
Yap_ThrowError( EVALUATION_ERROR_UNDEFINED, t2, "trying to evaluate nan" ); Yap_ThrowError( EVALUATION_ERROR_UNDEFINED, t2, 4, "trying to evaluate nan" );
} }
#endif #endif
return flt_cmp(i1 - f2); return flt_cmp(i1 - f2);
@ -637,7 +636,7 @@ static Int a_cmp(Term t1, Term t2 USES_REGS) {
Float f1 = FloatOfTerm(t1); Float f1 = FloatOfTerm(t1);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(f1)) { if (isnan(f1)) {
Yap_ThrowError( EVALUATION_ERROR_UNDEFINED, t1, "trying to evaluate nan" ); Yap_ThrowError( EVALUATION_ERROR_UNDEFINED, t1, 4, "trying to evaluate nan" );
} }
#endif #endif
t2 = Yap_Eval(t2); t2 = Yap_Eval(t2);
@ -653,7 +652,7 @@ static Int a_cmp(Term t1, Term t2 USES_REGS) {
Float f2 = FloatOfTerm(t2); Float f2 = FloatOfTerm(t2);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(f2)) { if (isnan(f2)) {
Yap_ThrowError( EVALUATION_ERROR_UNDEFINED, t2, "trying to evaluate nan" ); Yap_ThrowError( EVALUATION_ERROR_UNDEFINED, t2, 4, "trying to evaluate nan" );
} }
#endif #endif
return flt_cmp(f1 - f2); return flt_cmp(f1 - f2);
@ -675,7 +674,7 @@ static Int a_cmp(Term t1, Term t2 USES_REGS) {
Float f2 = FloatOfTerm(t2); Float f2 = FloatOfTerm(t2);
#if HAVE_ISNAN #if HAVE_ISNAN
if (isnan(f2)) { if (isnan(f2)) {
Yap_ThrowError( EVALUATION_ERROR_UNDEFINED, t2, "trying to evaluate nan" ); Yap_ThrowError( EVALUATION_ERROR_UNDEFINED, t2, 4, "trying to evaluate nan" );
} }
#endif #endif
return Yap_gmp_cmp_big_float(t1, f2); return Yap_gmp_cmp_big_float(t1, f2);

View File

@ -1103,16 +1103,14 @@ static void c_bifun(basic_preds Op, Term t1, Term t2, Term t3, Term Goal,
Int i2; Int i2;
if (!IsIntegerTerm(t2)) { if (!IsIntegerTerm(t2)) {
char s[32]; Yap_Error( TYPE_ERROR_INTEGER, t2, "compiling functor/3");
Yap_ThrowError( TYPE_ERROR_INTEGER, t2, "compiling functor/3");
save_machine_regs(); save_machine_regs();
siglongjmp(cglobs->cint.CompilerBotch, 1); siglongjmp(cglobs->cint.CompilerBotch, 1);
} }
i2 = IntegerOfTerm(t2); i2 = IntegerOfTerm(t2);
if (i2 < 0) { if (i2 < 0) {
char s[32];
Yap_ThrowError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO , t2, "compiling functor/3"); Yap_ThrowError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO , t2,4, "compiling functor/3");
save_machine_regs(); save_machine_regs();
siglongjmp(cglobs->cint.CompilerBotch, 1); siglongjmp(cglobs->cint.CompilerBotch, 1);
} }

View File

@ -311,11 +311,11 @@ yap_error_descriptor_t *Yap_popErrorContext(void) {
} }
void Yap_ThrowError__(const char *file, const char *function, int lineno, void Yap_ThrowError__(const char *file, const char *function, int lineno,
yap_error_number type, Term where, ...) { yap_error_number type, Term where, int code, ...) {
va_list ap; va_list ap;
char tmpbuf[MAXPATHLEN]; char tmpbuf[MAXPATHLEN];
va_start(ap, where); va_start(ap, code);
char *format = va_arg(ap, char *); char *format = va_arg(ap, char *);
if (format != NULL) { if (format != NULL) {
#if HAVE_VSNPRINTF #if HAVE_VSNPRINTF
@ -328,7 +328,7 @@ Yap_Error__(file, function, lineno, type, where, tmpbuf);
} else { } else {
Yap_Error__(file, function, lineno, type, where); Yap_Error__(file, function, lineno, type, where);
} }
siglongjmp(LOCAL_RestartEnv, 2); siglongjmp(LOCAL_RestartEnv, code);
} }
/** /**
@ -560,8 +560,7 @@ yamop *Yap_Error__(const char *file, const char *function, int lineno,
/* This is used by some complex procedures to detect there was an error */ /* This is used by some complex procedures to detect there was an error */
if (IsAtomTerm(nt[0])) { if (IsAtomTerm(nt[0])) {
strncpy(LOCAL_ErrorMessage, (char *)RepAtom(AtomOfTerm(nt[0]))->StrOfAE, LOCAL_ErrorMessage = RepAtom(AtomOfTerm(nt[0]))->StrOfAE;
MAX_ERROR_MSG_SIZE);
} else { } else {
LOCAL_ErrorMessage = LOCAL_ErrorMessage =
(char *)RepAtom(NameOfFunctor(FunctorOfTerm(nt[0])))->StrOfAE; (char *)RepAtom(NameOfFunctor(FunctorOfTerm(nt[0])))->StrOfAE;

View File

@ -93,7 +93,7 @@ static Term get_matrix_element(Term t1, Term t2 USES_REGS) {
static Term Eval(Term t USES_REGS) { static Term Eval(Term t USES_REGS) {
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
return Yap_ArithError(INSTANTIATION_ERROR, t, "in arithmetic"); Yap_ArithError(INSTANTIATION_ERROR, t, "in arithmetic");
} else if (IsNumTerm(t)) { } else if (IsNumTerm(t)) {
return t; return t;
} else if (IsAtomTerm(t)) { } else if (IsAtomTerm(t)) {
@ -101,7 +101,7 @@ static Term Eval(Term t USES_REGS) {
Atom name = AtomOfTerm(t); Atom name = AtomOfTerm(t);
if (EndOfPAEntr(p = RepExpProp(Yap_GetExpProp(name, 0)))) { if (EndOfPAEntr(p = RepExpProp(Yap_GetExpProp(name, 0)))) {
return Yap_ArithError(TYPE_ERROR_EVALUABLE, takeIndicator(t), Yap_ArithError(TYPE_ERROR_EVALUABLE, takeIndicator(t),
"atom %s in arithmetic expression", "atom %s in arithmetic expression",
RepAtom(name)->StrOfAE); RepAtom(name)->StrOfAE);
} }
@ -112,10 +112,10 @@ static Term Eval(Term t USES_REGS) {
const char *s = (const char *)StringOfTerm(t); const char *s = (const char *)StringOfTerm(t);
if (s[1] == '\0') if (s[1] == '\0')
return MkIntegerTerm(s[0]); return MkIntegerTerm(s[0]);
return Yap_ArithError(TYPE_ERROR_EVALUABLE, t, Yap_ArithError(TYPE_ERROR_EVALUABLE, t,
"string in arithmetic expression"); "string in arithmetic expression");
} else if ((Atom)fun == AtomFoundVar) { } else if ((Atom)fun == AtomFoundVar) {
return Yap_ArithError(TYPE_ERROR_EVALUABLE, TermNil, Yap_ArithError(TYPE_ERROR_EVALUABLE, TermNil,
"cyclic term in arithmetic expression"); "cyclic term in arithmetic expression");
} else { } else {
Int n = ArityOfFunctor(fun); Int n = ArityOfFunctor(fun);
@ -124,7 +124,7 @@ static Term Eval(Term t USES_REGS) {
Term t1, t2; Term t1, t2;
if (EndOfPAEntr(p = RepExpProp(Yap_GetExpProp(name, n)))) { if (EndOfPAEntr(p = RepExpProp(Yap_GetExpProp(name, n)))) {
return Yap_ArithError(TYPE_ERROR_EVALUABLE, takeIndicator(t), Yap_ArithError(TYPE_ERROR_EVALUABLE, takeIndicator(t),
"functor %s/%d for arithmetic expression", "functor %s/%d for arithmetic expression",
RepAtom(name)->StrOfAE, n); RepAtom(name)->StrOfAE, n);
} }
@ -153,7 +153,7 @@ static Term Eval(Term t USES_REGS) {
} /* else if (IsPairTerm(t)) */ } /* else if (IsPairTerm(t)) */
{ {
if (TailOfTerm(t) != TermNil) { if (TailOfTerm(t) != TermNil) {
return Yap_ArithError(TYPE_ERROR_EVALUABLE, t, Yap_ArithError(TYPE_ERROR_EVALUABLE, t,
"string must contain a single character to be " "string must contain a single character to be "
"evaluated as an arithmetic expression"); "evaluated as an arithmetic expression");
} }
@ -369,32 +369,6 @@ static Int p_logsum(USES_REGS1) { /* X is Y */
} }
} }
Int Yap_ArithError__(const char *file, const char *function, int lineno,
yap_error_number type, Term where, ...) {
CACHE_REGS
va_list ap;
char *format;
char buf[MAX_ERROR_MSG_SIZE];
LOCAL_Error_TYPE = type;
LOCAL_Error_File = file;
LOCAL_Error_Function = function;
LOCAL_Error_Lineno = lineno;
va_start(ap, where);
format = va_arg(ap, char *);
if (format != NULL) {
#if HAVE_VSNPRINTF
(void)vsnprintf(buf, MAX_ERROR_MSG_SIZE, format, ap);
#else
(void)vsprintf(buf, format, ap);
#endif
} else {
buf[0] = '\0';
}
va_end(ap);
return 0L;
}
yamop *Yap_EvalError__(const char *file, const char *function, int lineno, yamop *Yap_EvalError__(const char *file, const char *function, int lineno,
yap_error_number type, Term where, ...) { yap_error_number type, Term where, ...) {
CACHE_REGS CACHE_REGS

View File

@ -292,7 +292,7 @@ inline static bool do_execute(Term t, Term mod USES_REGS) {
Term t2 = ArgOfTerm(2, t); Term t2 = ArgOfTerm(2, t);
if (IsVarTerm(t2)) if (IsVarTerm(t2))
return CallMetaCall(t, mod PASS_REGS); return CallMetaCall(t, mod PASS_REGS);
if (!CommaCall(t2, mod)) if (1 || !CommaCall(t2, mod))
return CallMetaCall(t, mod PASS_REGS); return CallMetaCall(t, mod PASS_REGS);
Term t1 = ArgOfTerm(1, t); Term t1 = ArgOfTerm(1, t);
@ -315,6 +315,9 @@ inline static bool do_execute(Term t, Term mod USES_REGS) {
/* I cannot use the standard macro here because /* I cannot use the standard macro here because
otherwise I would dereference the argument and otherwise I would dereference the argument and
might skip a svar */ might skip a svar */
if (pen->PredFlags & MetaPredFlag) {
return CallMetaCall(t, mod PASS_REGS);
}
pt = RepAppl(t) + 1; pt = RepAppl(t) + 1;
for (i = 1; i <= arity; i++) { for (i = 1; i <= arity; i++) {
#if YAPOR_SBA #if YAPOR_SBA
@ -1454,6 +1457,10 @@ static bool exec_absmi(bool top, yap_reset_t reset_mode USES_REGS) {
P = (yamop *)FAILCODE; P = (yamop *)FAILCODE;
LOCAL_PrologMode = UserMode; LOCAL_PrologMode = UserMode;
} break; } break;
case 4: {
P = (yamop *)FAILCODE;
LOCAL_PrologMode = UserMode;
} break;
case 3: { /* saved state */ case 3: { /* saved state */
LOCAL_CBorder = OldBorder; LOCAL_CBorder = OldBorder;
return false; return false;
@ -2074,16 +2081,15 @@ static Int jump_env(USES_REGS1) {
Yap_Error(INSTANTIATION_ERROR, t, "throw ball must be bound"); Yap_Error(INSTANTIATION_ERROR, t, "throw ball must be bound");
return false; return false;
} else if (IsApplTerm(t) && FunctorOfTerm(t) == FunctorError) { } else if (IsApplTerm(t) && FunctorOfTerm(t) == FunctorError) {
Term t2; Term t2, te;
Yap_find_prolog_culprit(PASS_REGS1); Yap_find_prolog_culprit(PASS_REGS1);
LOCAL_Error_TYPE = ERROR_EVENT; te = ArgOfTerm(1, t);
t = ArgOfTerm(1, t); if (IsApplTerm(te) && IsAtomTerm((t2 = ArgOfTerm(1, te)))) {
if (IsApplTerm(t) && IsAtomTerm((t2 = ArgOfTerm(1, t)))) {
LOCAL_ActiveError->errorAsText = AtomOfTerm(t2); LOCAL_ActiveError->errorAsText = AtomOfTerm(t2);
LOCAL_ActiveError->classAsText = NameOfFunctor(FunctorOfTerm(t)); LOCAL_ActiveError->classAsText = NameOfFunctor(FunctorOfTerm(te));
} else if (IsAtomTerm(t)) { } else if (IsAtomTerm(te)) {
LOCAL_ActiveError->errorAsText = AtomOfTerm(t); LOCAL_ActiveError->errorAsText = AtomOfTerm(te);
LOCAL_ActiveError->classAsText = NULL; LOCAL_ActiveError->classAsText = NULL;
} }
} else { } else {

View File

@ -1654,7 +1654,8 @@ static Int p_nb_queue_close(USES_REGS1) {
return Yap_unify(ARG3, ARG2); return Yap_unify(ARG3, ARG2);
} }
out = Yap_unify(ARG3, qp[QUEUE_TAIL]) && Yap_unify(ARG2, qp[QUEUE_HEAD]); out = Yap_unify(ARG3, qp[QUEUE_TAIL]) && Yap_unify(ARG2, qp[QUEUE_HEAD]);
qp[QUEUE_HEAD] = qp[QUEUE_TAIL] = RESET_VARIABLE(qp + QUEUE_TAIL); RESET_VARIABLE(qp + QUEUE_TAIL);
qp[QUEUE_HEAD] = qp[QUEUE_TAIL] = (CELL)(qp + QUEUE_TAIL);
qp[QUEUE_SIZE] = MkIntTerm(0); qp[QUEUE_SIZE] = MkIntTerm(0);
return out; return out;
} }

View File

@ -32,7 +32,7 @@ MkBigAndClose(MP_INT *new)
Term t = Yap_MkBigIntTerm(new); Term t = Yap_MkBigIntTerm(new);
mpz_clear(new); mpz_clear(new);
if (t == TermNil) { if (t == TermNil) {
return Yap_ArithError(RESOURCE_ERROR_STACK, t, ">>/2"); Yap_ArithError(RESOURCE_ERROR_STACK, t, ">>/2");
} }
return t; return t;
} }
@ -43,7 +43,7 @@ MkRatAndClose(MP_RAT *new)
Term t = Yap_MkBigRatTerm(new); Term t = Yap_MkBigRatTerm(new);
mpq_clear(new); mpq_clear(new);
if (t == TermNil) { if (t == TermNil) {
return Yap_ArithError(RESOURCE_ERROR_STACK, t, ">>/2"); Yap_ArithError(RESOURCE_ERROR_STACK, t, ">>/2");
} }
return t; return t;
} }
@ -243,7 +243,7 @@ Yap_gmp_div_big_int(Term t, Int i)
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) {
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2"); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
} else { } else {
/* we do not handle MIN_INT */ /* we do not handle MIN_INT */
mpz_tdiv_q_ui(&new, &new, -i); mpz_tdiv_q_ui(&new, &new, -i);
@ -253,7 +253,7 @@ Yap_gmp_div_big_int(Term t, Int i)
if (i > 0) { if (i > 0) {
mpz_fdiv_q_ui(&new, &new, i); mpz_fdiv_q_ui(&new, &new, i);
} else if (i == 0) { } else if (i == 0) {
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2"); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
} else { } else {
/* we do not handle MIN_INT */ /* we do not handle MIN_INT */
mpz_fdiv_q_ui(&new, &new, -i); mpz_fdiv_q_ui(&new, &new, -i);
@ -285,7 +285,7 @@ Yap_gmp_div2_big_int(Term t, Int i)
if (i > 0) { if (i > 0) {
mpz_fdiv_q_ui(&new, &new, i); mpz_fdiv_q_ui(&new, &new, i);
} else if (i == 0) { } else if (i == 0) {
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2"); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
} else { } else {
/* we do not handle MIN_INT */ /* we do not handle MIN_INT */
mpz_fdiv_q_ui(&new, &new, -i); mpz_fdiv_q_ui(&new, &new, -i);
@ -311,7 +311,7 @@ Yap_gmp_and_int_big(Int i, Term t)
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
MP_INT *b; MP_INT *b;
if (pt[1] != BIG_INT) { if (pt[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "/\\/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "/\\/2");
} }
b = Yap_BigIntOfTerm(t); b = Yap_BigIntOfTerm(t);
@ -328,7 +328,7 @@ Yap_gmp_ior_int_big(Int i, Term t)
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
MP_INT *b; MP_INT *b;
if (pt[1] != BIG_INT) { if (pt[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "\\/ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "\\/ /2");
} }
b = Yap_BigIntOfTerm(t); b = Yap_BigIntOfTerm(t);
@ -367,7 +367,7 @@ Yap_gmp_xor_int_big(Int i, Term t)
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
MP_INT *b; MP_INT *b;
if (pt[1] != BIG_INT) { if (pt[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "#/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "#/2");
} }
b = Yap_BigIntOfTerm(t); b = Yap_BigIntOfTerm(t);
@ -394,7 +394,7 @@ Yap_gmp_sll_big_int(Term t, Int i)
mpz_init(&new); mpz_init(&new);
if (i == Int_MIN) { if (i == Int_MIN) {
CACHE_REGS CACHE_REGS
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, MkIntegerTerm(i), "<</2"); Yap_ArithError(RESOURCE_ERROR_HUGE_INT, MkIntegerTerm(i), "<</2");
} }
mpz_fdiv_q_2exp(&new, b, -i); mpz_fdiv_q_2exp(&new, b, -i);
} }
@ -628,9 +628,9 @@ Yap_gmp_and_big_big(Term t1, Term t2)
return MkBigAndClose(&new); return MkBigAndClose(&new);
} else { } else {
if (pt1[1] != BIG_INT) { if (pt1[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "/\\/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "/\\/2");
} }
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\/2");
} }
} }
@ -649,9 +649,9 @@ Yap_gmp_ior_big_big(Term t1, Term t2)
return MkBigAndClose(&new); return MkBigAndClose(&new);
} else { } else {
if (pt1[1] != BIG_INT) { if (pt1[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "\\/ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "\\/ /2");
} }
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2");
} }
} }
@ -670,9 +670,9 @@ Yap_gmp_xor_big_big(Term t1, Term t2)
return MkBigAndClose(&new); return MkBigAndClose(&new);
} else { } else {
if (pt1[1] != BIG_INT) { if (pt1[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "\\/ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "\\/ /2");
} }
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2");
} }
} }
@ -691,9 +691,9 @@ Yap_gmp_mod_big_big(Term t1, Term t2)
return MkBigAndClose(&new); return MkBigAndClose(&new);
} else { } else {
if (pt1[1] != BIG_INT) { if (pt1[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "mod/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "mod/2");
} }
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "mod/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "mod/2");
} }
} }
@ -702,7 +702,7 @@ Yap_gmp_mod_big_int(Term t, Int i2)
{ {
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
if (pt[1] != BIG_INT) { if (pt[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "mod/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "mod/2");
} else { } else {
MP_INT *b = Yap_BigIntOfTerm(t); MP_INT *b = Yap_BigIntOfTerm(t);
MP_INT new; MP_INT new;
@ -719,7 +719,7 @@ Yap_gmp_mod_int_big(Int i1, Term t)
CACHE_REGS CACHE_REGS
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
if (pt[1] != BIG_INT) { if (pt[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "mod/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "mod/2");
} else { } else {
MP_INT *b = Yap_BigIntOfTerm(t); MP_INT *b = Yap_BigIntOfTerm(t);
/* integer is much smaller */ /* integer is much smaller */
@ -768,9 +768,9 @@ Yap_gmp_rem_big_big(Term t1, Term t2)
return MkBigAndClose(&new); return MkBigAndClose(&new);
} else { } else {
if (pt1[1] != BIG_INT) { if (pt1[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "rem/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "rem/2");
} }
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rem/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rem/2");
} }
} }
@ -779,7 +779,7 @@ Yap_gmp_rem_big_int(Term t, Int i2)
{ {
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
if (pt[1] != BIG_INT) { if (pt[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "rem/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "rem/2");
} else { } else {
MP_INT *b = Yap_BigIntOfTerm(t); MP_INT *b = Yap_BigIntOfTerm(t);
MP_INT new; MP_INT new;
@ -796,7 +796,7 @@ Yap_gmp_rem_int_big(Int i1, Term t)
CACHE_REGS CACHE_REGS
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
if (pt[1] != BIG_INT) { if (pt[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "rem/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "rem/2");
} else { } else {
/* integer is much smaller */ /* integer is much smaller */
return MkIntegerTerm(i1); return MkIntegerTerm(i1);
@ -818,9 +818,9 @@ Yap_gmp_gcd_big_big(Term t1, Term t2)
return MkBigAndClose(&new); return MkBigAndClose(&new);
} else { } else {
if (pt1[1] != BIG_INT) { if (pt1[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "gcd/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "gcd/2");
} }
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2");
} }
} }
@ -830,7 +830,7 @@ Yap_gmp_gcd_int_big(Int i, Term t)
CACHE_REGS CACHE_REGS
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
if (pt[1] != BIG_INT) { if (pt[1] != BIG_INT) {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "gcd/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "gcd/2");
} else { } else {
/* integer is much smaller */ /* integer is much smaller */
if (i > 0) { if (i > 0) {
@ -992,7 +992,7 @@ Yap_gmp_exp_int_big(Int i, Term t)
CACHE_REGS CACHE_REGS
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
if (pt[1] == BIG_INT) { if (pt[1] == BIG_INT) {
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t, "^/2"); Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t, "^/2");
} else { } else {
MP_INT *b = Yap_BigIntOfTerm(t); MP_INT *b = Yap_BigIntOfTerm(t);
Float dbl = mpz_get_d(b); Float dbl = mpz_get_d(b);
@ -1009,7 +1009,7 @@ Yap_gmp_exp_big_big(Term t1, Term t2)
Float dbl1, dbl2; Float dbl1, dbl2;
if (pt1[1] == BIG_INT && pt2[1] == BIG_INT) { if (pt1[1] == BIG_INT && pt2[1] == BIG_INT) {
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, "^/2"); Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, "^/2");
} else { } else {
if (pt1[1] != BIG_INT) { if (pt1[1] != BIG_INT) {
dbl1 = mpz_get_d(Yap_BigIntOfTerm(t1)); dbl1 = mpz_get_d(Yap_BigIntOfTerm(t1));
@ -1476,7 +1476,7 @@ Yap_gmp_unot_big(Term t)
mpz_com(&new, &new); mpz_com(&new, &new);
return MkBigAndClose(&new); return MkBigAndClose(&new);
} else { } else {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "#/1"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "#/1");
} }
} }
@ -1571,7 +1571,7 @@ Yap_gmp_float_fractional_part(Term t)
{ {
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
if (pt[1] == BIG_INT) { if (pt[1] == BIG_INT) {
return Yap_ArithError(TYPE_ERROR_FLOAT, t, "X is float_fractional_part(%f)", FloatOfTerm(t)); Yap_ArithError(TYPE_ERROR_FLOAT, t, "X is float_fractional_part(%f)", FloatOfTerm(t));
} else { } else {
MP_RAT *b = Yap_BigRatOfTerm(t); MP_RAT *b = Yap_BigRatOfTerm(t);
MP_RAT new; MP_RAT new;
@ -1591,7 +1591,7 @@ Yap_gmp_float_integer_part(Term t)
{ {
CELL *pt = RepAppl(t); CELL *pt = RepAppl(t);
if (pt[1] == BIG_INT) { if (pt[1] == BIG_INT) {
return Yap_ArithError(TYPE_ERROR_FLOAT, t, "X is float_integer_part(%f)", FloatOfTerm(t)); Yap_ArithError(TYPE_ERROR_FLOAT, t, "X is float_integer_part(%f)", FloatOfTerm(t));
} else { } else {
MP_RAT *b = Yap_BigRatOfTerm(t); MP_RAT *b = Yap_BigRatOfTerm(t);
MP_INT new; MP_INT new;
@ -1624,12 +1624,12 @@ Yap_gmp_lsb(Term t)
if (pt[1] == BIG_INT) { if (pt[1] == BIG_INT) {
MP_INT *big = Yap_BigIntOfTerm(t); MP_INT *big = Yap_BigIntOfTerm(t);
if ( mpz_sgn(big) <= 0 ) { if ( mpz_sgn(big) <= 0 ) {
return Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t, Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t,
"lsb/1 received negative bignum"); "lsb/1 received negative bignum");
} }
return MkIntegerTerm(mpz_scan1(big,0)); return MkIntegerTerm(mpz_scan1(big,0));
} else { } else {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "lsb"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "lsb");
} }
} }
@ -1641,12 +1641,12 @@ Yap_gmp_msb(Term t)
if (pt[1] == BIG_INT) { if (pt[1] == BIG_INT) {
MP_INT *big = Yap_BigIntOfTerm(t); MP_INT *big = Yap_BigIntOfTerm(t);
if ( mpz_sgn(big) <= 0 ) { if ( mpz_sgn(big) <= 0 ) {
return Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t, Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t,
"msb/1 received negative bignum"); "msb/1 received negative bignum");
} }
return MkIntegerTerm(mpz_sizeinbase(big,2)); return MkIntegerTerm(mpz_sizeinbase(big,2));
} else { } else {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "popcount"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "popcount");
} }
} }
@ -1658,17 +1658,17 @@ Yap_gmp_popcount(Term t)
if (pt[1] == BIG_INT) { if (pt[1] == BIG_INT) {
MP_INT *big = Yap_BigIntOfTerm(t); MP_INT *big = Yap_BigIntOfTerm(t);
if ( mpz_sgn(big) <= 0 ) { if ( mpz_sgn(big) <= 0 ) {
return Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t, Yap_ArithError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t,
"popcount/1 received negative bignum"); "popcount/1 received negative bignum");
} }
return MkIntegerTerm(mpz_popcount(big)); return MkIntegerTerm(mpz_popcount(big));
} else { } else {
return Yap_ArithError(TYPE_ERROR_INTEGER, t, "popcount"); Yap_ArithError(TYPE_ERROR_INTEGER, t, "popcount");
} }
} }
char * char *
Yap_mpz_to_string(MP_INT *b, char *s, size_t sz, int base) Yap_mpz_to_string( MP_INT *b, char *s, size_t sz, int base)
{ {
if (s) { if (s) {
size_t size = mpz_sizeinbase(b, base); size_t size = mpz_sizeinbase(b, base);

View File

@ -832,7 +832,7 @@ static_growheap(size_t esize, bool fix_code, struct intermediates *cip, tr_fr_pt
fprintf( stderr, "%% Worker Id %d:\n", worker_id); fprintf( stderr, "%% Worker Id %d:\n", worker_id);
#endif #endif
fprintf( stderr, "%% Database Overflow %d\n", LOCAL_heap_overflows); fprintf( stderr, "%% Database Overflow %d\n", LOCAL_heap_overflows);
fprintf( stderr, "%% growing the heap %ld bytes\n", size); fprintf( stderr, "%% growing the heap " Int_FORMAT " bytes\n", size);
} }
/* CreepFlag is set to force heap expansion */ /* CreepFlag is set to force heap expansion */
if ( Yap_only_has_signal( YAP_CDOVF_SIGNAL) ) { if ( Yap_only_has_signal( YAP_CDOVF_SIGNAL) ) {
@ -976,7 +976,7 @@ static_growglobal(size_t request, CELL **ptr, CELL *hsplit USES_REGS)
fprintf(stderr, "%% Worker Id %d:\n", worker_id); fprintf(stderr, "%% Worker Id %d:\n", worker_id);
#endif #endif
fprintf(stderr, "%% %cO %s Overflow %d\n", vb_msg1, vb_msg2, LOCAL_delay_overflows); fprintf(stderr, "%% %cO %s Overflow %d\n", vb_msg1, vb_msg2, LOCAL_delay_overflows);
fprintf(stderr, "%% %cO growing the stacks %ld bytes\n", vb_msg1, size); fprintf(stderr, "%% %cO growing the stacks " UInt_FORMAT " bytes\n", vb_msg1, size);
} }
ASP -= 256; ASP -= 256;
YAPEnterCriticalSection(); YAPEnterCriticalSection();
@ -1794,7 +1794,7 @@ static int do_growtrail(size_t esize, bool contiguous_only, bool in_parser, tr_f
fprintf(stderr, "%% Trail:%8ld cells (%p-%p)\n", fprintf(stderr, "%% Trail:%8ld cells (%p-%p)\n",
(unsigned long int)(TR-(tr_fr_ptr)LOCAL_TrailBase),LOCAL_TrailBase,TR); (unsigned long int)(TR-(tr_fr_ptr)LOCAL_TrailBase),LOCAL_TrailBase,TR);
#endif #endif
fprintf(stderr, "%% growing the trail %ld bytes\n", size); fprintf(stderr, "%% growing the trail " UInt_FORMAT " bytes\n", size);
} }
LOCAL_ErrorMessage = NULL; LOCAL_ErrorMessage = NULL;
if (!GLOBAL_AllowTrailExpansion) { if (!GLOBAL_AllowTrailExpansion) {

View File

@ -45,10 +45,10 @@ Yap_LoadForeignFile(char *file, int flags)
void *ptr= (void *)LoadLibrary(file); void *ptr= (void *)LoadLibrary(file);
if (!ptr) { if (!ptr) {
CACHE_REGS CACHE_REGS
LOCAL_ErrorSay[0]='\0'; LOCAL_ErrorMessage = NULL;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorSay, 256, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorMessage, 256,
NULL); NULL);
} }
return ptr; return ptr;
@ -86,13 +86,13 @@ LoadForeign(StringList ofiles, StringList libs,
if (!Yap_findFile(file, NULL, NULL, LOCAL_FileNameBuf, true, YAP_OBJ, true, true) && if (!Yap_findFile(file, NULL, NULL, LOCAL_FileNameBuf, true, YAP_OBJ, true, true) &&
(handle=LoadLibrary(LOCAL_FileNameBuf)) != 0) (handle=LoadLibrary(LOCAL_FileNameBuf)) != 0)
{ {
LOCAL_ErrorSay[0]=~'\0'; LOCAL_ErrorMessage = NULL;
if (*init_proc == NULL) if (*init_proc == NULL)
*init_proc = (YapInitProc)GetProcAddress((HMODULE)handle, proc_name); *init_proc = (YapInitProc)GetProcAddress((HMODULE)handle, proc_name);
} else { } else {
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorSay, 256, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorMessage, 256,
NULL); NULL);
//fprintf(stderr,"WinError: %s\n", LOCAL_ErrorSay); //fprintf(stderr,"WinError: %s\n", LOCAL_ErrorSay);
} }
@ -124,7 +124,7 @@ LoadForeign(StringList ofiles, StringList libs,
} }
if(*init_proc == NULL) { if(*init_proc == NULL) {
strcpy(LOCAL_ErrorSay,"Could not locate initialization routine"); LOCAL_ErrorMessage = "Could not locate initialization routine";
return LOAD_FAILLED; return LOAD_FAILLED;
} }

View File

@ -382,6 +382,47 @@ static Int strip_module(USES_REGS1) {
return Yap_unify(ARG3, t1) && Yap_unify(ARG2, tmod); return Yap_unify(ARG3, t1) && Yap_unify(ARG2, tmod);
} }
static Int yap_strip_clause(USES_REGS1) {
Functor f;
Term t1 = Deref(ARG1), tmod = LOCAL_SourceModule;
if (tmod == PROLOG_MODULE) {
tmod = TermProlog;
}
t1 = Yap_StripModule(t1, &tmod);
if (IsVarTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "trying to obtain module");
return false;
} else if (IsVarTerm(tmod)) {
Yap_Error(INSTANTIATION_ERROR, tmod, "trying to obtain module");
return false;
} else if (IsIntTerm(t1) || (IsApplTerm(t1) && IsExtensionFunctor((f = FunctorOfTerm(t1))))) {
Yap_Error(TYPE_ERROR_CALLABLE, t1, "trying to obtain module");
return false;
} else if (!IsAtomTerm(tmod)) {
Yap_Error(TYPE_ERROR_ATOM, tmod, "trying to obtain module");
return false;
}
if (f == FunctorAssert || f == FunctorDoubleArrow) {
Term thmod = tmod;
Term th = ArgOfTerm(1, t1);
th = Yap_StripModule(th, &thmod);
if (IsVarTerm(th)) {
Yap_Error(INSTANTIATION_ERROR, t1, "trying to obtain module");
return false;
} else if (IsVarTerm(thmod)) {
Yap_Error(INSTANTIATION_ERROR, thmod, "trying to obtain module");
return false;
} else if (IsIntTerm(th) || (IsApplTerm(th) && IsExtensionFunctor(FunctorOfTerm(t1)))) {
Yap_Error(TYPE_ERROR_CALLABLE, t1, "trying to obtain module");
return false;
}else if (!IsAtomTerm(thmod)) {
Yap_Error(TYPE_ERROR_ATOM, thmod, "trying to obtain module");
return false;
}
}
return Yap_unify(ARG3, t1) && Yap_unify(ARG2, tmod);
}
Term Yap_YapStripModule(Term t, Term *modp) { Term Yap_YapStripModule(Term t, Term *modp) {
CACHE_REGS CACHE_REGS
Term tmod; Term tmod;
@ -565,10 +606,11 @@ void Yap_InitModulesC(void) {
Yap_InitCPred("$change_module", 1, change_module, Yap_InitCPred("$change_module", 1, change_module,
SafePredFlag | SyncPredFlag); SafePredFlag | SyncPredFlag);
Yap_InitCPred("strip_module", 3, strip_module, SafePredFlag | SyncPredFlag); Yap_InitCPred("strip_module", 3, strip_module, SafePredFlag | SyncPredFlag);
Yap_InitCPred("$yap_strip_module", 3, yap_strip_module, SafePredFlag | SyncPredFlag);
Yap_InitCPred("source_module", 1, source_module, SafePredFlag | SyncPredFlag); Yap_InitCPred("source_module", 1, source_module, SafePredFlag | SyncPredFlag);
Yap_InitCPred("current_source_module", 2, current_source_module, Yap_InitCPred("current_source_module", 2, current_source_module,
SafePredFlag | SyncPredFlag); SafePredFlag | SyncPredFlag);
Yap_InitCPred("$yap_strip_module", 3, yap_strip_module, Yap_InitCPred("$yap_strip_clause", 3, yap_strip_clause,
SafePredFlag | SyncPredFlag); SafePredFlag | SyncPredFlag);
Yap_InitCPred("context_module", 1, context_module, 0); Yap_InitCPred("context_module", 1, context_module, 0);
Yap_InitCPred("$is_system_module", 1, is_system_module, SafePredFlag); Yap_InitCPred("$is_system_module", 1, is_system_module, SafePredFlag);

View File

@ -168,7 +168,8 @@ static Term ParseArgs(Atom, Term, JMPBUFF *, Term, encoding_t, Term CACHE_TYPE);
static Term ParseList(JMPBUFF *, encoding_t, Term CACHE_TYPE); static Term ParseList(JMPBUFF *, encoding_t, Term CACHE_TYPE);
static Term ParseTerm(int, JMPBUFF *, encoding_t, Term CACHE_TYPE); static Term ParseTerm(int, JMPBUFF *, encoding_t, Term CACHE_TYPE);
const char *Yap_tokRep(void *tokptr, encoding_t enc); extern Term Yap_tokRep(void* tokptr);
extern const char * Yap_tokText(void *tokptr);
static void syntax_msg(const char *msg, ...) { static void syntax_msg(const char *msg, ...) {
CACHE_REGS CACHE_REGS
@ -366,6 +367,7 @@ static Term Variables(VarEntry *p, Term l USES_REGS) {
Term Yap_Variables(VarEntry *p, Term l) { Term Yap_Variables(VarEntry *p, Term l) {
CACHE_REGS CACHE_REGS
l = Variables(LOCAL_AnonVarTable, l PASS_REGS);
return Variables(p, l PASS_REGS); return Variables(p, l PASS_REGS);
} }
@ -466,7 +468,7 @@ inline static void checkfor(Term c, JMPBUFF *FailBuff,
encoding_t enc USES_REGS) { encoding_t enc USES_REGS) {
if (LOCAL_tokptr->Tok != Ord(Ponctuation_tok) || LOCAL_tokptr->TokInfo != c) { if (LOCAL_tokptr->Tok != Ord(Ponctuation_tok) || LOCAL_tokptr->TokInfo != c) {
char s[1024]; char s[1024];
strncpy(s, Yap_tokRep(LOCAL_tokptr, enc), 1023); strncpy(s, Yap_tokText(LOCAL_tokptr), 1023);
syntax_msg("line %d: expected to find " syntax_msg("line %d: expected to find "
"\'%c....................................\', found %s", "\'%c....................................\', found %s",
LOCAL_tokptr->TokPos, c, s); LOCAL_tokptr->TokPos, c, s);
@ -654,7 +656,7 @@ loop:
} }
} else { } else {
syntax_msg("line %d: looking for symbol ',','|' got symbol '%s'", syntax_msg("line %d: looking for symbol ',','|' got symbol '%s'",
LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc)); LOCAL_tokptr->TokPos, Yap_tokText(LOCAL_tokptr));
FAIL; FAIL;
} }
return (o); return (o);
@ -675,7 +677,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
NextToken; NextToken;
/* special rules apply for +1, -2.3, etc... */ /* special rules apply for +1, -2.3, etc... */
if (LOCAL_tokptr->Tok == Number_tok) { if (LOCAL_tokptr->Tok == Number_tok) {
if ((Atom)t == AtomMinus) { if (t == TermMinus) {
t = LOCAL_tokptr->TokInfo; t = LOCAL_tokptr->TokInfo;
if (IsIntTerm(t)) if (IsIntTerm(t))
t = MkIntTerm(-IntOfTerm(t)); t = MkIntTerm(-IntOfTerm(t));
@ -698,7 +700,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
if (LOCAL_tokptr->Tok == Name_tok) { if (LOCAL_tokptr->Tok == Name_tok) {
Atom at = AtomOfTerm(LOCAL_tokptr->TokInfo); Atom at = AtomOfTerm(LOCAL_tokptr->TokInfo);
#ifndef _MSC_VER #ifndef _MSC_VER
if ((Atom)t == AtomPlus) { if (t == TermPlus) {
if (at == AtomInf) { if (at == AtomInf) {
t = MkFloatTerm(INFINITY); t = MkFloatTerm(INFINITY);
NextToken; NextToken;
@ -708,7 +710,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
NextToken; NextToken;
break; break;
} }
} else if ((Atom)t == AtomMinus) { } else if (t == TermMinus) {
if (at == AtomInf) { if (at == AtomInf) {
t = MkFloatTerm(-INFINITY); t = MkFloatTerm(-INFINITY);
NextToken; NextToken;
@ -764,7 +766,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
case Error_tok: case Error_tok:
syntax_msg("line %d: found ill-formed \"%s\"", LOCAL_tokptr->TokPos, syntax_msg("line %d: found ill-formed \"%s\"", LOCAL_tokptr->TokPos,
Yap_tokRep(LOCAL_tokptr, enc)); Yap_tokText(LOCAL_tokptr));
FAIL; FAIL;
case Ponctuation_tok: case Ponctuation_tok:
@ -806,7 +808,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
break; break;
default: default:
syntax_msg("line %d: unexpected ponctuation signal %s", syntax_msg("line %d: unexpected ponctuation signal %s",
LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc)); LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr));
FAIL; FAIL;
} }
break; break;
@ -851,12 +853,12 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
t = ParseTerm(GLOBAL_MaxPriority, FailBuff, enc, cmod PASS_REGS); t = ParseTerm(GLOBAL_MaxPriority, FailBuff, enc, cmod PASS_REGS);
if (LOCAL_tokptr->Tok != QuasiQuotes_tok) { if (LOCAL_tokptr->Tok != QuasiQuotes_tok) {
syntax_msg("expected to find quasi quotes, got \"%s\"", , syntax_msg("expected to find quasi quotes, got \"%s\"", ,
Yap_tokRep(LOCAL_tokptr, enc)); Yap_tokText(LOCAL_tokptr));
FAIL; FAIL;
} }
if (!(is_quasi_quotation_syntax(t, &at))) { if (!(is_quasi_quotation_syntax(t, &at))) {
syntax_msg("bad quasi quotation syntax, at \"%s\"", syntax_msg("bad quasi quotation syntax, at \"%s\"",
Yap_tokRep(LOCAL_tokptr, enc)); Yap_tokText(LOCAL_tokptr));
FAIL; FAIL;
} }
/* Arg 2: the content */ /* Arg 2: the content */
@ -866,7 +868,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
if (!get_quasi_quotation(Yap_InitSlot(ArgOfTerm(2, tn)), &qq->text, if (!get_quasi_quotation(Yap_InitSlot(ArgOfTerm(2, tn)), &qq->text,
qq->text + strlen((const char *)qq->text))) { qq->text + strlen((const char *)qq->text))) {
syntax_msg("could not get quasi quotation, at \"%s\"", syntax_msg("could not get quasi quotation, at \"%s\"",
Yap_tokRep(LOCAL_tokptr, enc)); Yap_tokText(LOCAL_tokptr));
FAIL; FAIL;
} }
if (positions) { if (positions) {
@ -878,7 +880,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
qq->mid.charno + 2, /* end of | token */ qq->mid.charno + 2, /* end of | token */
PL_INTPTR, qqend - 2)) /* end minus "|}" */ PL_INTPTR, qqend - 2)) /* end minus "|}" */
syntax_msg("failed to unify quasi quotation, at \"%s\"", syntax_msg("failed to unify quasi quotation, at \"%s\"",
Yap_tokRep(LOCAL_tokptr, enc)); Yap_tokText(LOCAL_tokptr));
FAIL; FAIL;
} }
@ -898,7 +900,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
break; break;
default: default:
syntax_msg("line %d: expected operator, got \'%s\'", LOCAL_tokptr->TokPos, syntax_msg("line %d: expected operator, got \'%s\'", LOCAL_tokptr->TokPos,
Yap_tokRep(LOCAL_tokptr, enc)); Yap_tokText(LOCAL_tokptr));
FAIL; FAIL;
} }
@ -1013,7 +1015,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
} }
if (LOCAL_tokptr->Tok <= Ord(String_tok)) { if (LOCAL_tokptr->Tok <= Ord(String_tok)) {
syntax_msg("line %d: expected operator, got \'%s\'", LOCAL_tokptr->TokPos, syntax_msg("line %d: expected operator, got \'%s\'", LOCAL_tokptr->TokPos,
Yap_tokRep(LOCAL_tokptr, enc)); Yap_tokText(LOCAL_tokptr));
FAIL; FAIL;
} }
break; break;
@ -1046,7 +1048,11 @@ Term Yap_Parse(UInt prio, encoding_t enc, Term cmod) {
} }
if (LOCAL_tokptr != NULL && LOCAL_tokptr->Tok != Ord(eot_tok)) { if (LOCAL_tokptr != NULL && LOCAL_tokptr->Tok != Ord(eot_tok)) {
LOCAL_Error_TYPE = SYNTAX_ERROR; LOCAL_Error_TYPE = SYNTAX_ERROR;
if (LOCAL_tokptr->TokNext) {
LOCAL_ErrorMessage = "operator misssing . ";
} else {
LOCAL_ErrorMessage = "term does not end on . "; LOCAL_ErrorMessage = "term does not end on . ";
}
t = 0; t = 0;
} }
if (t != 0 && LOCAL_Error_TYPE == SYNTAX_ERROR) { if (t != 0 && LOCAL_Error_TYPE == SYNTAX_ERROR) {

View File

@ -33,13 +33,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, plus_vv_unk, plus_vv_nvar); deref_body(d0, pt0, plus_vv_unk, plus_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, plus_vv_nvar_unk, plus_vv_nvar_nvar); deref_body(d1, pt0, plus_vv_nvar_unk, plus_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -67,7 +67,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, plus_vc_unk, plus_vc_nvar); deref_body(d0, pt0, plus_vc_unk, plus_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -101,13 +101,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, plus_y_vv_unk, plus_y_vv_nvar); deref_body(d0, pt0, plus_y_vv_unk, plus_y_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, plus_y_vv_nvar_unk, plus_y_vv_nvar_nvar); deref_body(d1, pt0, plus_y_vv_nvar_unk, plus_y_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -138,7 +138,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, plus_y_vc_unk, plus_y_vc_nvar); deref_body(d0, pt0, plus_y_vc_unk, plus_y_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -169,13 +169,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, minus_vv_unk, minus_vv_nvar); deref_body(d0, pt0, minus_vv_unk, minus_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, minus_vv_nvar_unk, minus_vv_nvar_nvar); deref_body(d1, pt0, minus_vv_nvar_unk, minus_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -203,7 +203,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, minus_cv_unk, minus_cv_nvar); deref_body(d0, pt0, minus_cv_unk, minus_cv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -237,13 +237,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, minus_y_vv_unk, minus_y_vv_nvar); deref_body(d0, pt0, minus_y_vv_unk, minus_y_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, minus_y_vv_nvar_unk, minus_y_vv_nvar_nvar); deref_body(d1, pt0, minus_y_vv_nvar_unk, minus_y_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -274,7 +274,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, minus_y_cv_unk, minus_y_cv_nvar); deref_body(d0, pt0, minus_y_cv_unk, minus_y_cv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -304,13 +304,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, times_vv_unk, times_vv_nvar); deref_body(d0, pt0, times_vv_unk, times_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, times_vv_nvar_unk, times_vv_nvar_nvar); deref_body(d1, pt0, times_vv_nvar_unk, times_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -338,7 +338,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, times_vc_unk, times_vc_nvar); deref_body(d0, pt0, times_vc_unk, times_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -372,13 +372,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, times_y_vv_unk, times_y_vv_nvar); deref_body(d0, pt0, times_y_vv_unk, times_y_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, times_y_vv_nvar_unk, times_y_vv_nvar_nvar); deref_body(d1, pt0, times_y_vv_nvar_unk, times_y_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -409,7 +409,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, times_y_vc_unk, times_y_vc_nvar); deref_body(d0, pt0, times_y_vc_unk, times_y_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -430,7 +430,7 @@
if (IsIntTerm(d0) && IsIntTerm(d1)) { if (IsIntTerm(d0) && IsIntTerm(d1)) {
Int div = IntOfTerm(d1); Int div = IntOfTerm(d1);
if (div == 0) { if (div == 0) {
Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR); Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR,d1);
} }
d0 = MkIntTerm(IntOfTerm(d0) / div); d0 = MkIntTerm(IntOfTerm(d0) / div);
} else { } else {
@ -444,13 +444,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_vv_unk, div_vv_nvar); deref_body(d0, pt0, div_vv_unk, div_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, div_vv_nvar_unk, div_vv_nvar_nvar); deref_body(d1, pt0, div_vv_nvar_unk, div_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -478,7 +478,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_vc_unk, div_vc_nvar); deref_body(d0, pt0, div_vc_unk, div_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -494,7 +494,7 @@
if (IsIntTerm(d0)) { if (IsIntTerm(d0)) {
Int div = IntOfTerm(d0); Int div = IntOfTerm(d0);
if (div == 0) { if (div == 0) {
Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR); Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR,d0);
FAIL(); FAIL();
} }
d0 = MkIntegerTerm(d1 / div); d0 = MkIntegerTerm(d1 / div);
@ -509,7 +509,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_cv_unk, div_cv_nvar); deref_body(d0, pt0, div_cv_unk, div_cv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -530,7 +530,7 @@
if (IsIntTerm(d0) && IsIntTerm(d1)) { if (IsIntTerm(d0) && IsIntTerm(d1)) {
Int div = IntOfTerm(d1); Int div = IntOfTerm(d1);
if (div == 0) { if (div == 0) {
Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR); Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR, d0);
FAIL(); FAIL();
} }
d0 = MkIntTerm(IntOfTerm(d0) / div); d0 = MkIntTerm(IntOfTerm(d0) / div);
@ -548,13 +548,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_y_vv_unk, div_y_vv_nvar); deref_body(d0, pt0, div_y_vv_unk, div_y_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, div_y_vv_nvar_unk, div_y_vv_nvar_nvar); deref_body(d1, pt0, div_y_vv_nvar_unk, div_y_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -585,7 +585,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, div_y_vc_unk, div_y_vc_nvar); deref_body(d0, pt0, div_y_vc_unk, div_y_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -601,7 +601,7 @@
if (IsIntTerm(d0)) { if (IsIntTerm(d0)) {
Int div = IntOfTerm(d0); Int div = IntOfTerm(d0);
if (div == 0) { if (div == 0) {
Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR); Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR,d0);
FAIL(); FAIL();
} }
d0 = MkIntegerTerm(d1 / div); d0 = MkIntegerTerm(d1 / div);
@ -651,13 +651,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, and_vv_unk, and_vv_nvar); deref_body(d0, pt0, and_vv_unk, and_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, and_vv_nvar_unk, and_vv_nvar_nvar); deref_body(d1, pt0, and_vv_nvar_unk, and_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -719,13 +719,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, and_y_vv_unk, and_y_vv_nvar); deref_body(d0, pt0, and_y_vv_unk, and_y_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, and_y_vv_nvar_unk, and_y_vv_nvar_nvar); deref_body(d1, pt0, and_y_vv_nvar_unk, and_y_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -787,13 +787,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, or_vv_unk, or_vv_nvar); deref_body(d0, pt0, or_vv_unk, or_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, or_vv_nvar_unk, or_vv_nvar_nvar); deref_body(d1, pt0, or_vv_nvar_unk, or_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -854,13 +854,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, or_y_vv_unk, or_y_vv_nvar); deref_body(d0, pt0, or_y_vv_unk, or_y_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, or_y_vv_nvar_unk, or_y_vv_nvar_nvar); deref_body(d1, pt0, or_y_vv_nvar_unk, or_y_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -926,13 +926,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_vv_unk, sll_vv_nvar); deref_body(d0, pt0, sll_vv_unk, sll_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, sll_vv_nvar_unk, sll_vv_nvar_nvar); deref_body(d1, pt0, sll_vv_nvar_unk, sll_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -960,7 +960,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_vc_unk, sll_vc_nvar); deref_body(d0, pt0, sll_vc_unk, sll_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -991,7 +991,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_cv_unk, sll_cv_nvar); deref_body(d0, pt0, sll_cv_unk, sll_cv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -1029,13 +1029,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_y_vv_unk, sll_y_vv_nvar); deref_body(d0, pt0, sll_y_vv_unk, sll_y_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, sll_y_vv_nvar_unk, sll_y_vv_nvar_nvar); deref_body(d1, pt0, sll_y_vv_nvar_unk, sll_y_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -1066,7 +1066,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_y_vc_unk, sll_y_vc_nvar); deref_body(d0, pt0, sll_y_vc_unk, sll_y_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -1100,7 +1100,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, sll_y_cv_unk, sll_y_cv_nvar); deref_body(d0, pt0, sll_y_cv_unk, sll_y_cv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -1135,13 +1135,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_vv_unk, slr_vv_nvar); deref_body(d0, pt0, slr_vv_unk, slr_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, slr_vv_nvar_unk, slr_vv_nvar_nvar); deref_body(d1, pt0, slr_vv_nvar_unk, slr_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -1169,7 +1169,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_vc_unk, slr_vc_nvar); deref_body(d0, pt0, slr_vc_unk, slr_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -1200,7 +1200,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_cv_unk, slr_cv_nvar); deref_body(d0, pt0, slr_cv_unk, slr_cv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -1238,13 +1238,13 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_y_vv_unk, slr_y_vv_nvar); deref_body(d0, pt0, slr_y_vv_unk, slr_y_vv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, slr_y_vv_nvar_unk, slr_y_vv_nvar_nvar); deref_body(d1, pt0, slr_y_vv_nvar_unk, slr_y_vv_nvar_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d1); ENDD(d1);
@ -1275,7 +1275,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_y_vc_unk, slr_y_vc_nvar); deref_body(d0, pt0, slr_y_vc_unk, slr_y_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
ENDOp(); ENDOp();
@ -1300,7 +1300,7 @@
} }
} }
if (d0 == 0L) { if (d0 == 0L) {
Yap_AsmError(LOCAL_Error_TYPE); Yap_AsmError(LOCAL_Error_TYPE,d0);
FAIL(); FAIL();
} }
BEGP(pt0); BEGP(pt0);
@ -1312,7 +1312,7 @@
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, slr_y_cv_unk, slr_y_cv_nvar); deref_body(d0, pt0, slr_y_cv_unk, slr_y_cv_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL(); FAIL();
ENDP(pt0); ENDP(pt0);
ENDD(d0); ENDD(d0);
@ -1968,7 +1968,7 @@
} else { } else {
if (IsBigIntTerm(d0)) if (IsBigIntTerm(d0))
FAIL(); FAIL();
Yap_AsmError(TYPE_ERROR_INTEGER); Yap_AsmError(TYPE_ERROR_INTEGER, d0);
FAIL(); FAIL();
} }
@ -1984,7 +1984,7 @@
pt0 = RepAppl(d1); pt0 = RepAppl(d1);
d1 = *pt0; d1 = *pt0;
if (IsExtensionFunctor((Functor)d1)) { if (IsExtensionFunctor((Functor)d1)) {
Yap_AsmError(TYPE_ERROR_COMPOUND); Yap_AsmError(TYPE_ERROR_COMPOUND, AbsAppl(pt0));
FAIL(); FAIL();
} }
if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) { if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) {
@ -2007,7 +2007,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
pt0 = RepPair(d1); pt0 = RepPair(d1);
if (d0 != 1 && d0 != 2) { if (d0 != 1 && d0 != 2) {
if ((Int)d0 < 0) { if ((Int)d0 < 0) {
Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO); Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d0) );
} }
FAIL(); FAIL();
} }
@ -2016,14 +2016,14 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
GONext(); GONext();
ENDP(pt0); ENDP(pt0);
} else { } else {
Yap_AsmError(TYPE_ERROR_COMPOUND); Yap_AsmError(TYPE_ERROR_COMPOUND, d1);
FAIL(); FAIL();
} }
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, arg_arg2_unk, arg_arg2_nvar); deref_body(d1, pt0, arg_arg2_unk, arg_arg2_nvar);
saveregs(); saveregs();
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
; ;
setregs(); setregs();
ENDP(pt0); ENDP(pt0);
@ -2033,7 +2033,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, arg_arg1_unk, arg_arg1_nvar); deref_body(d0, pt0, arg_arg1_unk, arg_arg1_nvar);
saveregs(); saveregs();
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
; ;
setregs(); setregs();
ENDP(pt0); ENDP(pt0);
@ -2068,7 +2068,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
pt0 = RepAppl(d1); pt0 = RepAppl(d1);
d1 = *pt0; d1 = *pt0;
if (IsExtensionFunctor((Functor)d1)) { if (IsExtensionFunctor((Functor)d1)) {
Yap_AsmError(TYPE_ERROR_COMPOUND); Yap_AsmError(TYPE_ERROR_COMPOUND,XREG(PREG->y_u.xxn.xi));
FAIL(); FAIL();
} }
if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) { if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) {
@ -2092,7 +2092,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (d0 != 1 && d0 != 2) { if (d0 != 1 && d0 != 2) {
if ((Int)d0 < 0) { if ((Int)d0 < 0) {
saveregs(); saveregs();
Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO); Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, XREG(PREG->y_u.xxn.xi));
} }
FAIL(); FAIL();
} }
@ -2101,13 +2101,13 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
GONext(); GONext();
ENDP(pt0); ENDP(pt0);
} else { } else {
Yap_AsmError(TYPE_ERROR_COMPOUND); Yap_AsmError(TYPE_ERROR_COMPOUND, XREG(PREG->y_u.xxn.xi));
FAIL(); FAIL();
} }
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, arg_arg2_vc_unk, arg_arg2_vc_nvar); deref_body(d1, pt0, arg_arg2_vc_unk, arg_arg2_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR, XREG(PREG->y_u.xxn.xi));
ENDP(pt0); ENDP(pt0);
FAIL(); FAIL();
ENDD(d1); ENDD(d1);
@ -2138,7 +2138,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
} else { } else {
if (IsBigIntTerm(d0)) if (IsBigIntTerm(d0))
FAIL(); FAIL();
Yap_AsmError(TYPE_ERROR_INTEGER); Yap_AsmError(TYPE_ERROR_INTEGER, XREG(PREG->y_u.yxx.x1));
FAIL(); FAIL();
} }
@ -2154,7 +2154,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
pt0 = RepAppl(d1); pt0 = RepAppl(d1);
d1 = *pt0; d1 = *pt0;
if (IsExtensionFunctor((Functor)d1)) { if (IsExtensionFunctor((Functor)d1)) {
Yap_AsmError(TYPE_ERROR_COMPOUND); Yap_AsmError(TYPE_ERROR_COMPOUND,XREG(PREG->y_u.yxx.x2));
FAIL(); FAIL();
} }
if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) { if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) {
@ -2181,7 +2181,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (d0 != 1 && d0 != 2) { if (d0 != 1 && d0 != 2) {
if ((Int)d0 < 0) { if ((Int)d0 < 0) {
saveregs(); saveregs();
Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO); Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, YREG[PREG->y_u.yxx.y]);
} }
FAIL(); FAIL();
} }
@ -2193,20 +2193,20 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
ENDP(pt1); ENDP(pt1);
ENDP(pt0); ENDP(pt0);
} else { } else {
Yap_AsmError(TYPE_ERROR_COMPOUND); Yap_AsmError(TYPE_ERROR_COMPOUND, d1);
FAIL(); FAIL();
} }
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, arg_y_arg2_unk, arg_y_arg2_nvar); deref_body(d1, pt0, arg_y_arg2_unk, arg_y_arg2_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt0); ENDP(pt0);
FAIL(); FAIL();
ENDD(d1); ENDD(d1);
BEGP(pt0); BEGP(pt0);
deref_body(d0, pt0, arg_y_arg1_unk, arg_y_arg1_nvar); deref_body(d0, pt0, arg_y_arg1_unk, arg_y_arg1_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt0); ENDP(pt0);
FAIL(); FAIL();
ENDD(d0); ENDD(d0);
@ -2240,7 +2240,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
pt0 = RepAppl(d1); pt0 = RepAppl(d1);
d1 = *pt0; d1 = *pt0;
if (IsExtensionFunctor((Functor)d1)) { if (IsExtensionFunctor((Functor)d1)) {
Yap_AsmError(TYPE_ERROR_COMPOUND); Yap_AsmError(TYPE_ERROR_COMPOUND, XREG(PREG->y_u.yxn.xi));
FAIL(); FAIL();
} }
if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) { if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) {
@ -2264,7 +2264,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (d0 != 1 && d0 != 2) { if (d0 != 1 && d0 != 2) {
if ((Int)d0 < 0) { if ((Int)d0 < 0) {
saveregs(); saveregs();
Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO); Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, YREG[PREG->y_u.yxn.y]);
} }
FAIL(); FAIL();
} }
@ -2276,13 +2276,13 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
GONext(); GONext();
ENDP(pt0); ENDP(pt0);
} else { } else {
Yap_AsmError(TYPE_ERROR_COMPOUND); Yap_AsmError(TYPE_ERROR_COMPOUND,YREG[PREG->y_u.yxn.y]);
FAIL(); FAIL();
} }
BEGP(pt0); BEGP(pt0);
deref_body(d1, pt0, arg_y_arg2_vc_unk, arg_y_arg2_vc_nvar); deref_body(d1, pt0, arg_y_arg2_vc_unk, arg_y_arg2_vc_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt0); ENDP(pt0);
FAIL(); FAIL();
ENDD(d1); ENDD(d1);
@ -2320,15 +2320,15 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
saveregs(); saveregs();
if (IsBigIntTerm(d1)) { if (IsBigIntTerm(d1)) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(RESOURCE_ERROR_STACK,d1);
} else { } else {
setregs(); setregs();
Yap_AsmError(TYPE_ERROR_INTEGER); Yap_AsmError(TYPE_ERROR_INTEGER,d1);
} }
FAIL(); FAIL();
} }
if (!IsAtomicTerm(d0)) { if (!IsAtomicTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL(); FAIL();
} }
/* We made it!!!!! we got in d0 the name, in d1 the arity and /* We made it!!!!! we got in d0 the name, in d1 the arity and
@ -2346,7 +2346,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
} else if ((Int)d1 > 0) { } else if ((Int)d1 > 0) {
/* now let's build a compound term */ /* now let's build a compound term */
if (!IsAtomTerm(d0)) { if (!IsAtomTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL(); FAIL();
} }
BEGP(pt1); BEGP(pt1);
@ -2363,7 +2363,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG, if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
NEXTOP(NEXTOP(PREG, xxx), Osbpp))) { NEXTOP(NEXTOP(PREG, xxx), Osbpp))) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(RESOURCE_ERROR_STACK, d1 );
JMPNext(); JMPNext();
} else { } else {
setregs(); setregs();
@ -2387,12 +2387,12 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxx), Osbpp), l); PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxx), Osbpp), l);
GONext(); GONext();
} else { } else {
Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO); Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d1));
} }
BEGP(pt1); BEGP(pt1);
deref_body(d1, pt1, func2s_unk2, func2s_nvar2); deref_body(d1, pt1, func2s_unk2, func2s_nvar2);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1); ENDP(pt1);
/* Oops, third argument was unbound */ /* Oops, third argument was unbound */
FAIL(); FAIL();
@ -2400,7 +2400,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d0, pt1, func2s_unk, func2s_nvar); deref_body(d0, pt1, func2s_unk, func2s_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1); ENDP(pt1);
/* Oops, second argument was unbound too */ /* Oops, second argument was unbound too */
FAIL(); FAIL();
@ -2435,10 +2435,10 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
saveregs(); saveregs();
if (IsBigIntTerm(d1)) { if (IsBigIntTerm(d1)) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(RESOURCE_ERROR_STACK, d1);
} else { } else {
setregs(); setregs();
Yap_AsmError(TYPE_ERROR_INTEGER); Yap_AsmError(TYPE_ERROR_INTEGER, d1);
} }
FAIL(); FAIL();
} }
@ -2457,7 +2457,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
} else if ((Int)d1 > 0) { } else if ((Int)d1 > 0) {
/* now let's build a compound term */ /* now let's build a compound term */
if (!IsAtomTerm(d0)) { if (!IsAtomTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL(); FAIL();
} }
BEGP(pt1); BEGP(pt1);
@ -2474,7 +2474,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG, if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
NEXTOP(NEXTOP(PREG, xxc), Osbpp))) { NEXTOP(NEXTOP(PREG, xxc), Osbpp))) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(RESOURCE_ERROR_STACK, d1);
JMPNext(); JMPNext();
} else { } else {
setregs(); setregs();
@ -2498,12 +2498,12 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxc), Osbpp), l); PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxc), Osbpp), l);
GONext(); GONext();
} else { } else {
Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO); Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,d1);
} }
BEGP(pt1); BEGP(pt1);
deref_body(d1, pt1, func2s_unk2_cv, func2s_nvar2_cv); deref_body(d1, pt1, func2s_unk2_cv, func2s_nvar2_cv);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1); ENDP(pt1);
/* Oops, third argument was unbound */ /* Oops, third argument was unbound */
FAIL(); FAIL();
@ -2537,7 +2537,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGD(d1); BEGD(d1);
d1 = PREG->y_u.xxn.c; d1 = PREG->y_u.xxn.c;
if (!IsAtomicTerm(d0)) { if (!IsAtomicTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL(); FAIL();
} }
/* We made it!!!!! we got in d0 the name, in d1 the arity and /* We made it!!!!! we got in d0 the name, in d1 the arity and
@ -2560,7 +2560,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
GONext(); GONext();
} }
if (!IsAtomTerm(d0)) { if (!IsAtomTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL(); FAIL();
} }
BEGP(pt1); BEGP(pt1);
@ -2576,7 +2576,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
saveregs(); saveregs();
if (!Yap_gc(0, YREG, NEXTOP(NEXTOP(PREG, xxn), Osbpp))) { if (!Yap_gc(0, YREG, NEXTOP(NEXTOP(PREG, xxn), Osbpp))) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(INSTANTIATION_ERROR,d1);
JMPNext(); JMPNext();
} else { } else {
setregs(); setregs();
@ -2599,7 +2599,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d0, pt1, func2s_unk_vc, func2s_nvar_vc); deref_body(d0, pt1, func2s_unk_vc, func2s_nvar_vc);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1); ENDP(pt1);
/* Oops, second argument was unbound too */ /* Oops, second argument was unbound too */
FAIL(); FAIL();
@ -2636,15 +2636,15 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
saveregs(); saveregs();
if (IsBigIntTerm(d1)) { if (IsBigIntTerm(d1)) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(RESOURCE_ERROR_STACK, d1);
} else { } else {
setregs(); setregs();
Yap_AsmError(TYPE_ERROR_INTEGER); Yap_AsmError(TYPE_ERROR_INTEGER, d1);
} }
FAIL(); FAIL();
} }
if (!IsAtomicTerm(d0)) { if (!IsAtomicTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL(); FAIL();
} }
/* We made it!!!!! we got in d0 the name, in d1 the arity and /* We made it!!!!! we got in d0 the name, in d1 the arity and
@ -2663,7 +2663,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
} else if ((Int)d1 > 0) { } else if ((Int)d1 > 0) {
/* now let's build a compound term */ /* now let's build a compound term */
if (!IsAtomTerm(d0)) { if (!IsAtomTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL(); FAIL();
} }
BEGP(pt1); BEGP(pt1);
@ -2680,7 +2680,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG, if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
NEXTOP(NEXTOP(PREG, yxx), Osbpp))) { NEXTOP(NEXTOP(PREG, yxx), Osbpp))) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(RESOURCE_ERROR_STACK, d1);
JMPNext(); JMPNext();
} else { } else {
setregs(); setregs();
@ -2710,12 +2710,12 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
ENDP(pt1); ENDP(pt1);
GONext(); GONext();
} else { } else {
Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO); Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d1));
} }
BEGP(pt1); BEGP(pt1);
deref_body(d1, pt1, func2s_y_unk2, func2s_y_nvar2); deref_body(d1, pt1, func2s_y_unk2, func2s_y_nvar2);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1); ENDP(pt1);
/* Oops, third argument was unbound */ /* Oops, third argument was unbound */
FAIL(); FAIL();
@ -2723,7 +2723,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d0, pt1, func2s_y_unk, func2s_y_nvar); deref_body(d0, pt1, func2s_y_unk, func2s_y_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1); ENDP(pt1);
/* Oops, second argument was unbound too */ /* Oops, second argument was unbound too */
FAIL(); FAIL();
@ -2756,9 +2756,9 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
d1 = IntegerOfTerm(d1); d1 = IntegerOfTerm(d1);
} else { } else {
if (IsBigIntTerm(d1)) { if (IsBigIntTerm(d1)) {
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(RESOURCE_ERROR_STACK, d1);
} else { } else {
Yap_AsmError(TYPE_ERROR_INTEGER); Yap_AsmError(TYPE_ERROR_INTEGER, d1);
} }
FAIL(); FAIL();
} }
@ -2780,7 +2780,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
} else if ((Int)d1 > 0) { } else if ((Int)d1 > 0) {
/* now let's build a compound term */ /* now let's build a compound term */
if (!IsAtomTerm(d0)) { if (!IsAtomTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL(); FAIL();
} }
if (!IsAtomTerm(d0)) { if (!IsAtomTerm(d0)) {
@ -2797,7 +2797,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG, if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
NEXTOP(NEXTOP(PREG, yxc), Osbpp))) { NEXTOP(NEXTOP(PREG, yxc), Osbpp))) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(RESOURCE_ERROR_STACK, d1);
JMPNext(); JMPNext();
} else { } else {
setregs(); setregs();
@ -2827,12 +2827,12 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
ENDP(pt1); ENDP(pt1);
GONext(); GONext();
} else { } else {
Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO); Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d1));
} }
BEGP(pt1); BEGP(pt1);
deref_body(d1, pt1, func2s_y_unk_cv, func2s_y_nvar_cv); deref_body(d1, pt1, func2s_y_unk_cv, func2s_y_nvar_cv);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1); ENDP(pt1);
/* Oops, third argument was unbound */ /* Oops, third argument was unbound */
FAIL(); FAIL();
@ -2866,7 +2866,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGD(d1); BEGD(d1);
d1 = PREG->y_u.yxn.c; d1 = PREG->y_u.yxn.c;
if (!IsAtomicTerm(d0)) { if (!IsAtomicTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL(); FAIL();
} }
/* We made it!!!!! we got in d0 the name, in d1 the arity and /* We made it!!!!! we got in d0 the name, in d1 the arity and
@ -2894,12 +2894,12 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
GONext(); GONext();
} }
if (!IsAtomTerm(d0)) { if (!IsAtomTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL(); FAIL();
} }
/* now let's build a compound term */ /* now let's build a compound term */
if (!IsAtomTerm(d0)) { if (!IsAtomTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL(); FAIL();
} }
BEGP(pt1); BEGP(pt1);
@ -2916,7 +2916,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG, if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
NEXTOP(NEXTOP(PREG, yxn), Osbpp))) { NEXTOP(NEXTOP(PREG, yxn), Osbpp))) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(RESOURCE_ERROR_STACK, d1);
JMPNext(); JMPNext();
} else { } else {
setregs(); setregs();
@ -2942,7 +2942,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d0, pt1, func2s_y_unk_vc, func2s_y_nvar_vc); deref_body(d0, pt1, func2s_y_unk_vc, func2s_y_nvar_vc);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1); ENDP(pt1);
/* Oops, second argument was unbound too */ /* Oops, second argument was unbound too */
FAIL(); FAIL();
@ -2990,7 +2990,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d0, pt1, func2f_xx_unk, func2f_xx_nvar); deref_body(d0, pt1, func2f_xx_unk, func2f_xx_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1); ENDP(pt1);
/* Oops, second argument was unbound too */ /* Oops, second argument was unbound too */
FAIL(); FAIL();
@ -3041,7 +3041,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d0, pt1, func2f_xy_unk, func2f_xy_nvar); deref_body(d0, pt1, func2f_xy_unk, func2f_xy_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1); ENDP(pt1);
/* Oops, second argument was unbound too */ /* Oops, second argument was unbound too */
FAIL(); FAIL();
@ -3092,7 +3092,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d0, pt1, func2f_yx_unk, func2f_yx_nvar); deref_body(d0, pt1, func2f_yx_unk, func2f_yx_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1); ENDP(pt1);
/* Oops, second argument was unbound too */ /* Oops, second argument was unbound too */
FAIL(); FAIL();
@ -3146,7 +3146,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d0, pt1, func2f_yy_unk, func2f_yy_nvar); deref_body(d0, pt1, func2f_yy_unk, func2f_yy_nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1); ENDP(pt1);
/* Oops, second argument was unbound too */ /* Oops, second argument was unbound too */
FAIL(); FAIL();
@ -3250,11 +3250,11 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (IsIntTerm(d1)) if (IsIntTerm(d1))
d1 = IntOfTerm(d1); d1 = IntOfTerm(d1);
else { else {
Yap_AsmError(TYPE_ERROR_INTEGER); Yap_AsmError(TYPE_ERROR_INTEGER, d1);
FAIL(); FAIL();
} }
if (!IsAtomicTerm(d0)) { if (!IsAtomicTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL(); FAIL();
} /* We made it!!!!! we got in d0 the name, in d1 the arity and } /* We made it!!!!! we got in d0 the name, in d1 the arity and
* in pt0 the variable to bind it to. */ * in pt0 the variable to bind it to. */
@ -3266,7 +3266,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
} else if ((Int)d1 > 0) { } else if ((Int)d1 > 0) {
/* now let's build a compound term */ /* now let's build a compound term */
if (!IsAtomTerm(d0)) { if (!IsAtomTerm(d0)) {
Yap_AsmError(TYPE_ERROR_ATOM); Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL(); FAIL();
} }
BEGP(pt1); BEGP(pt1);
@ -3283,7 +3283,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
if (!Yap_gcl((1 + d1) * sizeof(CELL), 3, YREG, if (!Yap_gcl((1 + d1) * sizeof(CELL), 3, YREG,
NEXTOP(NEXTOP(PREG, e), Osbmp))) { NEXTOP(NEXTOP(PREG, e), Osbmp))) {
setregs(); setregs();
Yap_AsmError(RESOURCE_ERROR_STACK); Yap_AsmError(INSTANTIATION_ERROR,d1);
} else { } else {
setregs(); setregs();
} }
@ -3297,7 +3297,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
HR = pt1; HR = pt1;
ENDP(pt1); ENDP(pt1);
} else if ((Int)d1 < 0) { } else if ((Int)d1 < 0) {
Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO); Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d1));
FAIL(); FAIL();
} }
/* else if arity is 0 just pass d0 through */ /* else if arity is 0 just pass d0 through */
@ -3308,7 +3308,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d1, pt1, func_var_3unk, func_var_3nvar); deref_body(d1, pt1, func_var_3unk, func_var_3nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1); ENDP(pt1);
/* Oops, third argument was unbound */ /* Oops, third argument was unbound */
FAIL(); FAIL();
@ -3316,7 +3316,7 @@ Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
BEGP(pt1); BEGP(pt1);
deref_body(d0, pt1, func_var_2unk, func_var_2nvar); deref_body(d0, pt1, func_var_2unk, func_var_2nvar);
Yap_AsmError(INSTANTIATION_ERROR); Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1); ENDP(pt1);
/* Oops, second argument was unbound too */ /* Oops, second argument was unbound too */
FAIL(); FAIL();

View File

@ -457,6 +457,7 @@ static void Yap_setCurrentSourceLocation(struct stream_desc *s) {
char_kind_t Yap_chtype0[NUMBER_OF_CHARS + 1] = { char_kind_t Yap_chtype0[NUMBER_OF_CHARS + 1] = {
EF, EF,
/* nul soh stx etx eot enq ack bel bs ht nl vt np cr so si /* nul soh stx etx eot enq ack bel bs ht nl vt np cr so si
*/ */
BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS, BS,
@ -630,18 +631,6 @@ static char *AllocScannerMemory(unsigned int size) {
return AuxSpScan; return AuxSpScan;
} }
static void PopScannerMemory(char *block, unsigned int size) {
CACHE_REGS
if (block == LOCAL_ScannerStack - size) {
LOCAL_ScannerStack -= size;
} else if (block == (char *)(LOCAL_ScannerExtraBlocks + 1)) {
struct scanner_extra_alloc *ptr = LOCAL_ScannerExtraBlocks;
LOCAL_ScannerExtraBlocks = ptr->next;
free(ptr);
}
}
char *Yap_AllocScannerMemory(unsigned int size) { char *Yap_AllocScannerMemory(unsigned int size) {
/* I assume memory has been initialized */ /* I assume memory has been initialized */
return AllocScannerMemory(size); return AllocScannerMemory(size);
@ -1111,13 +1100,12 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, int sign) {
/* given a function getchr scan until we either find the number /* given a function getchr scan until we either find the number
or end of file */ or end of file */
Term Yap_scan_num(StreamDesc *inp) { Term Yap_scan_num(StreamDesc *inp, bool error_on) {
CACHE_REGS CACHE_REGS
Term out; Term out;
int sign = 1; int sign = 1;
int ch, cherr; int ch, cherr;
char *ptr, *mp; char *ptr;
int kind;
void *old_tr = TR; void *old_tr = TR;
InitScannerMemory(); InitScannerMemory();
@ -1127,8 +1115,8 @@ Term Yap_scan_num(StreamDesc *inp) {
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL; LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
return 0; return 0;
} }
#if HAVE_ISWBLANK #if HAVE_ISWSPACE
while (iswblank(ch = getchr(inp))) while (iswspace(ch = getchr(inp)))
; ;
#else #else
while (isspace(ch = getchr(inp))) while (isspace(ch = getchr(inp)))
@ -1151,64 +1139,22 @@ Term Yap_scan_num(StreamDesc *inp) {
return 0; return 0;
} }
out = get_num(&ch, &cherr, inp, sign); /* */ out = get_num(&ch, &cherr, inp, sign); /* */
} } else {
if (LOCAL_ErrorMessage != NULL || ch != -1 || cherr) {
CACHE_REGS
char *s = ptr;
int sign = 1;
out = 0; out = 0;
if (s[0] == '+') {
s++;
} }
if (s[0] == '-') { #if HAVE_ISWSPACE
s++; while (iswspace(ch = getchr(inp)))
sign = -1; ;
} #else
if (strcmp(s, "inf") == 0) { while (isspace(ch = getchr(inp)))
if (sign > 0) { ;
out = MkFloatTerm(INFINITY); #endif
} else { if (LOCAL_ErrorMessage != NULL || ch != -1 || cherr) {
out = MkFloatTerm(-INFINITY);
}
}
if (strcmp(s, "nan") == 0) {
if (sign > 0) {
out = MkFloatTerm(NAN);
} else {
out = MkFloatTerm(-NAN);
}
}
if (out == 0) {
TokEntry *e, *ef;
size_t len = strlen(ptr);
mp = AllocScannerMemory(len + 1);
tokptr->Tok = Ord(kind = String_tok);
tokptr->TokInfo = MkStringTerm(mp);
e = (TokEntry *)AllocScannerMemory(sizeof(TokEntry));
ef = (TokEntry *)AllocScannerMemory(sizeof(TokEntry));
tokptr->TokNext = e;
e->Tok = Error_tok;
if (!LOCAL_ErrorMessage) {
LOCAL_ErrorMessage =
"syntax error while converting from a string to a number";
}
e->TokInfo = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
e->TokPos = GetCurInpPos(inp);
e->TokNext = ef;
ef->Tok = Ord(kind = eot_tok);
ef->TokInfo = TermSyntaxError;
ef->TokPos = GetCurInpPos(inp);
ef->TokNext = NULL;
LOCAL_tokptr = tokptr;
LOCAL_toktide = e;
Yap_JumpToEnv(
Yap_syntax_error(e, inp - GLOBAL_Stream) );
LOCAL_Error_TYPE = SYNTAX_ERROR;
}
}
PopScannerMemory(ptr, 4096);
Yap_clean_tokenizer(old_tr, NULL, NULL); Yap_clean_tokenizer(old_tr, NULL, NULL);
if (error_on)
Yap_Error(SYNTAX_ERROR, ARG2, "converting number");
return 0;
}
return out; return out;
} }
@ -1225,35 +1171,86 @@ Term Yap_scan_num(StreamDesc *inp) {
return l; \ return l; \
} }
const char *Yap_tokRep(void *tokptre, encoding_t encoding) { Term Yap_tokRep(void *tokptre) {
CACHE_REGS CACHE_REGS
TokEntry *tokptr = tokptre; TokEntry *tokptr = tokptre;
Term info = tokptr->TokInfo; Term info = tokptr->TokInfo;
size_t length;
UInt flags = 0;
switch (tokptr->Tok) { switch (tokptr->Tok) {
case Name_tok: case Name_tok:
case Number_tok: if (!info) {
case Ponctuation_tok: info = TermNil;
case String_tok:
case BQString_tok:
return Yap_TermToString(info, &length, encoding, flags);
case Var_tok:
{
VarEntry *varinfo = (VarEntry *)info;
varinfo->VarAdr = TermNil;
return RepAtom(varinfo->VarRep)->StrOfAE;
} }
return Yap_MkApplTerm(Yap_MkFunctor(AtomAtom, 1), 1, &info);
case QuasiQuotes_tok:
info = MkAtomTerm(Yap_LookupAtom("<QQ>"));
return Yap_MkApplTerm(Yap_MkFunctor(AtomAtom, 1), 1, &info);
case Number_tok:
return Yap_MkApplTerm(Yap_MkFunctor(AtomAtom, 1), 1, &info);
break;
case Var_tok: {
Term t[2];
VarEntry *varinfo = (VarEntry *)info;
if ((t[0]= varinfo->VarAdr) == TermNil) {
t[0] = varinfo->VarAdr = MkVarTerm();
}
t[1] = MkAtomTerm((Atom)(varinfo->VarRep));
return Yap_MkApplTerm(Yap_MkFunctor(AtomGVar, 2), 2, t);
}
case String_tok:
return Yap_MkApplTerm(Yap_MkFunctor(AtomString, 1), 1, &info);
case BQString_tok:
return Yap_MkApplTerm(Yap_MkFunctor(AtomString, 1), 1, &info);
case Error_tok: case Error_tok:
return "<ERR>"; return MkAtomTerm(AtomError);
case eot_tok: case eot_tok:
return "<EOT>"; return MkAtomTerm(Yap_LookupAtom("EOT"));
case Ponctuation_tok:
return info;
}
return TermDot;
}
const char * Yap_tokText(void *tokptre) {
CACHE_REGS
TokEntry *tokptr = tokptre;
Term info = tokptr->TokInfo;
switch (tokptr->Tok) {
case eot_tok:
return "EOT";
case Ponctuation_tok:
case Error_tok:
case BQString_tok:
case String_tok:
case Name_tok:
return AtomOfTerm(info)->StrOfAE;
case QuasiQuotes_tok: case QuasiQuotes_tok:
return "<QQ>"; return "<QQ>";
case Number_tok:
if (IsIntegerTerm(info)) {
char *s = Malloc(36);
snprintf(s, 35, Int_FORMAT, IntegerOfTerm(info));
return s;
}else if (IsFloatTerm(info)) {
char *s = Malloc( 64);
snprintf(s, 63, "%6g", FloatOfTerm(info));
return s;
} else {
size_t len = Yap_gmp_to_size(info,10);
char *s = Malloc(len+2);
return Yap_gmp_to_string(info,s, len+1,10);
} }
break;
case Var_tok:
if (info == 0) return "[]";
return ((Atom)info)->StrOfAE;
}
return ".";
} }
static void open_comment(int ch, StreamDesc *inp_stream USES_REGS) { static void open_comment(int ch, StreamDesc *inp_stream USES_REGS) {
CELL *h0 = HR; CELL *h0 = HR;
HR += 5; HR += 5;
@ -1314,6 +1311,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
int solo_flag = TRUE; int solo_flag = TRUE;
int32_t ch, och; int32_t ch, och;
struct qq_struct_t *cur_qq = NULL; struct qq_struct_t *cur_qq = NULL;
int sign = 1;
InitScannerMemory(); InitScannerMemory();
LOCAL_VarTable = NULL; LOCAL_VarTable = NULL;
@ -1331,7 +1329,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
do { do {
int quote, isvar; int quote, isvar;
unsigned char *charp, *mp; unsigned char *charp, *mp;
unsigned int len; size_t len;
unsigned char *TokImage = NULL; unsigned char *TokImage = NULL;
t = (TokEntry *)AllocScannerMemory(sizeof(TokEntry)); t = (TokEntry *)AllocScannerMemory(sizeof(TokEntry));
@ -1396,8 +1394,8 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
int32_t och = ch; int32_t och = ch;
ch = getchr(inp_stream); ch = getchr(inp_stream);
size_t sz = 512; size_t sz = 512;
scan_name:
TokImage = Malloc(sz PASS_REGS); TokImage = Malloc(sz PASS_REGS);
scan_name:
charp = (unsigned char *)TokImage; charp = (unsigned char *)TokImage;
isvar = (chtype(och) != LC); isvar = (chtype(och) != LC);
add_ch_to_buff(och); add_ch_to_buff(och);
@ -1448,11 +1446,14 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
case NU: { case NU: {
int cherr; int cherr;
int cha = ch; int cha;
sign = 1;
scan_number:
cha = ch;
cherr = 0; cherr = 0;
CHECK_SPACE(); CHECK_SPACE();
if ((t->TokInfo = get_num(&cha, &cherr, inp_stream, 1)) == 0L) { if ((t->TokInfo = get_num(&cha, &cherr, inp_stream, sign)) == 0L) {
if (p) { if (p) {
p->Tok = eot_tok; p->Tok = eot_tok;
t->TokInfo = TermError; t->TokInfo = TermError;
@ -1479,6 +1480,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
case 'e': case 'e':
case 'E': case 'E':
och = cherr; och = cherr;
TokImage = Malloc(1024 PASS_REGS);
goto scan_name; goto scan_name;
break; break;
case '=': case '=':
@ -1511,6 +1513,13 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
{ {
TokEntry *e2; TokEntry *e2;
if (chtype(ch) == NU) {
if (och == '-')
sign = -1;
else
sign = 1;
goto scan_number;
}
t->Tok = Name_tok; t->Tok = Name_tok;
if (ch == '(') if (ch == '(')
solo_flag = FALSE; solo_flag = FALSE;
@ -1558,7 +1567,9 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
LOCAL_ErrorMessage = "layout character \n inside quotes"; LOCAL_ErrorMessage = "layout character \n inside quotes";
break; break;
} }
if (ch == EOFCHAR) {
break;
}
if (ch == quote) { if (ch == quote) {
ch = getchrq(inp_stream); ch = getchrq(inp_stream);
if (ch != quote) if (ch != quote)
@ -1635,13 +1646,6 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
t->TokInfo = TermNewLine; t->TokInfo = TermNewLine;
return l; return l;
} }
ch = getchr(inp_stream);
if (chtype(ch) == EF) {
mark_eof(inp_stream);
t->TokInfo = TermEof;
} else {
t->TokInfo = TermNewLine;
}
return l; return l;
} }
if (ch == '`') if (ch == '`')
@ -1721,7 +1725,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
return l; return l;
} else { } else {
Atom ae; Atom ae;
size_t sz = 1024; sz = 1024;
TokImage = Malloc(sz); TokImage = Malloc(sz);
charp = TokImage; charp = TokImage;
add_ch_to_buff(och); add_ch_to_buff(och);
@ -1949,13 +1953,6 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
t->Tok = Ord(kind = eot_tok); t->Tok = Ord(kind = eot_tok);
t->TokInfo = TermEof; t->TokInfo = TermEof;
} }
#if DEBUG
if (GLOBAL_Option[2]) {
static int n;
fprintf(stderr, "[Token %d %s %d]", Ord(kind),
Yap_tokRep(t, inp_stream->encoding), n++);
}
#endif
if (LOCAL_ErrorMessage) { if (LOCAL_ErrorMessage) {
/* insert an error token to inform the system of what happened */ /* insert an error token to inform the system of what happened */
TokEntry *e = (TokEntry *)AllocScannerMemory(sizeof(TokEntry)); TokEntry *e = (TokEntry *)AllocScannerMemory(sizeof(TokEntry));

View File

@ -206,7 +206,7 @@ static Int SkipListCodes(unsigned char **bufp, Term *l, Term **tailp,
(*atoms)++; (*atoms)++;
if (*atoms < length) { if (*atoms < length) {
*tailp = l; *tailp = l;
return -TYPE_ERROR_NUMBER; return -REPRESENTATION_ERROR_CHARACTER_CODE;
} else { } else {
AtomEntry *ae = RepAtom(AtomOfTerm(hd)); AtomEntry *ae = RepAtom(AtomOfTerm(hd));
if ((ae->StrOfAE)[1] != '\0') { if ((ae->StrOfAE)[1] != '\0') {
@ -219,10 +219,10 @@ static Int SkipListCodes(unsigned char **bufp, Term *l, Term **tailp,
} else if (IsIntegerTerm(hd)) { } else if (IsIntegerTerm(hd)) {
ch = IntegerOfTerm(hd); ch = IntegerOfTerm(hd);
if (*atoms) if (*atoms)
length = -TYPE_ERROR_ATOM; length = -REPRESENTATION_ERROR_CHARACTER;
else if (ch < 0) { else if (ch < 0) {
*tailp = l; *tailp = l;
length = -DOMAIN_ERROR_NOT_LESS_THAN_ZERO; length = -REPRESENTATION_ERROR_CHARACTER_CODE;
} else { } else {
*wide |= ch > 0x80; *wide |= ch > 0x80;
} }
@ -386,30 +386,34 @@ unsigned char *Yap_readText(seq_tv_t *inp, size_t *lengp) {
// this is a term, extract to a buffer, and representation is wide // this is a term, extract to a buffer, and representation is wide
// Yap_DebugPlWriteln(inp->val.t); // Yap_DebugPlWriteln(inp->val.t);
Atom at = AtomOfTerm(inp->val.t); Atom at = AtomOfTerm(inp->val.t);
if (lengp)
*lengp = strlen_utf8(at->UStrOfAE);
return at->UStrOfAE; return at->UStrOfAE;
} }
if (IsStringTerm(inp->val.t) && inp->type & YAP_STRING_STRING) { if (IsStringTerm(inp->val.t) && inp->type & YAP_STRING_STRING) {
// this is a term, extract to a buffer, and representation is wide // this is a term, extract to a buffer, and representation is wide
// Yap_DebugPlWriteln(inp->val.t); // Yap_DebugPlWriteln(inp->val.t);
if (lengp)
*lengp = strlen_utf8(UStringOfTerm(inp->val.t));
return (unsigned char *)UStringOfTerm(inp->val.t); return (unsigned char *)UStringOfTerm(inp->val.t);
} }
if (((inp->type & (YAP_STRING_CODES | YAP_STRING_ATOMS)) == if (((inp->type & (YAP_STRING_CODES | YAP_STRING_ATOMS)) ==
(YAP_STRING_CODES | YAP_STRING_ATOMS)) && (YAP_STRING_CODES | YAP_STRING_ATOMS)) &&
IsPairOrNilTerm(inp->val.t)) { IsPairOrNilTerm(inp->val.t)) {
// Yap_DebugPlWriteln(inp->val.t); // Yap_DebugPlWriteln(inp->val.t);
return inp->val.uc = return
Yap_ListToBuffer(s0, inp->val.t, inp, &wide, lengp PASS_REGS); Yap_ListToBuffer(s0, inp->val.t, inp, &wide, lengp PASS_REGS);
// this is a term, extract to a sfer, and representation is wide // this is a term, extract to a sfer, and representation is wide
} }
if (inp->type & YAP_STRING_CODES && IsPairOrNilTerm(inp->val.t)) { if (inp->type & YAP_STRING_CODES && IsPairOrNilTerm(inp->val.t)) {
// Yap_DebugPlWriteln(inp->val.t); // Yap_DebugPlWriteln(inp->val.t);
return inp->val.uc = Yap_ListOfCodesToBuffer(s0, inp->val.t, inp, &wide, return Yap_ListOfCodesToBuffer(s0, inp->val.t, inp, &wide,
lengp PASS_REGS); lengp PASS_REGS);
// this is a term, extract to a sfer, and representation is wide // this is a term, extract to a sfer, and representation is wide
} }
if (inp->type & YAP_STRING_ATOMS && IsPairOrNilTerm(inp->val.t)) { if (inp->type & YAP_STRING_ATOMS && IsPairOrNilTerm(inp->val.t)) {
// Yap_DebugPlWriteln(inp->val.t); // Yap_DebugPlWriteln(inp->val.t);
return inp->val.uc = Yap_ListOfAtomsToBuffer(s0, inp->val.t, inp, &wide, return Yap_ListOfAtomsToBuffer(s0, inp->val.t, inp, &wide,
lengp PASS_REGS); lengp PASS_REGS);
// this is a term, extract to a buffer, and representation is wide // this is a term, extract to a buffer, and representation is wide
} }
@ -426,22 +430,23 @@ unsigned char *Yap_readText(seq_tv_t *inp, size_t *lengp) {
AUX_ERROR(inp->val.t, 2 * MaxTmp(PASS_REGS1), s, char); AUX_ERROR(inp->val.t, 2 * MaxTmp(PASS_REGS1), s, char);
} }
*lengp = strlen(s); *lengp = strlen(s);
Malloc(*lengp); return (unsigned char *)s;
return inp->val.uc = (unsigned char *)s;
} }
if (inp->type & YAP_STRING_FLOAT && IsFloatTerm(inp->val.t)) { if (inp->type & YAP_STRING_FLOAT && IsFloatTerm(inp->val.t)) {
char *s; char *s;
size_t sz = 1024;
// Yap_DebugPlWriteln(inp->val.t); // Yap_DebugPlWriteln(inp->val.t);
if (s0) if (s0)
s = (char *)s0; { s = (char *)s0; sz = strlen(s);}
else else
s = Malloc(0); s = Malloc(sz);
if (!s)
AUX_ERROR(inp->val.t, MaxTmp(PASS_REGS1), s, char); AUX_ERROR(inp->val.t, MaxTmp(PASS_REGS1), s, char);
if (!Yap_FormatFloat(FloatOfTerm(inp->val.t), &s, MaxTmp() - 1)) { while (!Yap_FormatFloat(FloatOfTerm(inp->val.t), &s, sz - 1)) {
AUX_ERROR(inp->val.t, 2 * MaxTmp(PASS_REGS1), s, char); if (s0) { s = Malloc(sz=1024); s0 = NULL; }
else s = Realloc(s, sz+1024);
} }
*lengp = strlen(s); *lengp = strlen(s);
Malloc(*lengp);
return inp->val.uc = (unsigned char *)s; return inp->val.uc = (unsigned char *)s;
} }
#if USE_GMP #if USE_GMP
@ -595,8 +600,7 @@ static Term write_codes(void *s0, seq_tv_t *out, size_t leng USES_REGS) {
unsigned char *s = s0, *lim = s + strlen((char *)s); unsigned char *s = s0, *lim = s + strlen((char *)s);
unsigned char *cp = s; unsigned char *cp = s;
wchar_t w[2];
w[1] = '\0';
LOCAL_TERM_ERROR(t, 2 * (lim - s)); LOCAL_TERM_ERROR(t, 2 * (lim - s));
while (*cp) { while (*cp) {
utf8proc_int32_t chr; utf8proc_int32_t chr;
@ -630,7 +634,10 @@ static Term write_codes(void *s0, seq_tv_t *out, size_t leng USES_REGS) {
static Atom write_atom(void *s0, seq_tv_t *out, size_t leng USES_REGS) { static Atom write_atom(void *s0, seq_tv_t *out, size_t leng USES_REGS) {
unsigned char *s = s0; unsigned char *s = s0;
int32_t ch; int32_t ch;
if (!leng || strlen_utf8(s0) <= leng) { if ( leng == 0) {
return Yap_LookupAtom("");
}
if ( strlen_utf8(s0) <= leng) {
return Yap_LookupAtom(s0); return Yap_LookupAtom(s0);
} else { } else {
size_t n = get_utf8(s, 1, &ch); size_t n = get_utf8(s, 1, &ch);
@ -713,10 +720,10 @@ static size_t write_length(const unsigned char *s0, seq_tv_t *out,
return leng; return leng;
} }
static Term write_number(unsigned char *s, seq_tv_t *out, int size USES_REGS) { static Term write_number(unsigned char *s, seq_tv_t *out, int size, bool error_on USES_REGS) {
Term t; Term t;
int i = push_text_stack(); int i = push_text_stack();
t = Yap_StringToNumberTerm((char *)s, &out->enc); t = Yap_StringToNumberTerm((char *)s, &out->enc, error_on);
pop_text_stack(i); pop_text_stack(i);
return t; return t;
} }
@ -739,7 +746,7 @@ bool write_Text(unsigned char *inp, seq_tv_t *out, size_t leng USES_REGS) {
return out->val.t != 0; return out->val.t != 0;
} }
if (out->type & (YAP_STRING_INT | YAP_STRING_FLOAT | YAP_STRING_BIG)) { if (out->type & (YAP_STRING_INT | YAP_STRING_FLOAT | YAP_STRING_BIG)) {
if ((out->val.t = write_number(inp, out, leng PASS_REGS)) != 0L) { if ((out->val.t = write_number(inp, out, leng,!(out->type & YAP_STRING_ATOM) PASS_REGS)) != 0L) {
// Yap_DebugPlWriteln(out->val.t); // Yap_DebugPlWriteln(out->val.t);
return true; return true;
@ -790,7 +797,7 @@ bool write_Text(unsigned char *inp, seq_tv_t *out, size_t leng USES_REGS) {
// Yap_DebugPlWriteln(out->val.t); // Yap_DebugPlWriteln(out->val.t);
return out->val.a != NULL; return out->val.a != NULL;
case YAP_STRING_INT | YAP_STRING_FLOAT | YAP_STRING_BIG: case YAP_STRING_INT | YAP_STRING_FLOAT | YAP_STRING_BIG:
out->val.t = write_number(inp, out, leng PASS_REGS); out->val.t = write_number(inp, out, leng, true PASS_REGS);
// Yap_DebugPlWriteln(out->val.t); // Yap_DebugPlWriteln(out->val.t);
return out->val.t != 0; return out->val.t != 0;
default: { return true ; } default: { return true ; }
@ -898,8 +905,8 @@ static int cmp_Text(const unsigned char *s1, const unsigned char *s2, int l) {
return 0; return 0;
} }
static unsigned char *concat(int n, unsigned char *sv[] USES_REGS) { static unsigned char *concat(int n, void *sv[] USES_REGS) {
char *buf; void *buf;
unsigned char *buf0; unsigned char *buf0;
size_t room = 0; size_t room = 0;
int i; int i;
@ -908,9 +915,14 @@ static unsigned char *concat(int n, unsigned char *sv[] USES_REGS) {
room += strlen((char *)sv[i]); room += strlen((char *)sv[i]);
} }
buf = Malloc(room + 1); buf = Malloc(room + 1);
buf0 = (unsigned char *)buf; buf0 = buf;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
#if _WIN32
strcpy(buf, sv[i]);
buf = (char*)buf + strlen(buf);
#else
buf = stpcpy(buf, sv[i]); buf = stpcpy(buf, sv[i]);
#endif
} }
return buf0; return buf0;
} }
@ -932,7 +944,7 @@ static void *slice(size_t min, size_t max, unsigned char *buf USES_REGS) {
// //
// Out must be an atom or a string // Out must be an atom or a string
bool Yap_Concat_Text(int tot, seq_tv_t inp[], seq_tv_t *out USES_REGS) { bool Yap_Concat_Text(int tot, seq_tv_t inp[], seq_tv_t *out USES_REGS) {
unsigned char **bufv; void **bufv;
unsigned char *buf; unsigned char *buf;
int i; int i;
size_t leng; size_t leng;
@ -951,7 +963,7 @@ bool Yap_Concat_Text(int tot, seq_tv_t inp[], seq_tv_t *out USES_REGS) {
bufv[i] = nbuf; bufv[i] = nbuf;
} }
buf = concat(tot, bufv PASS_REGS); buf = concat(tot, bufv PASS_REGS);
bool rc = write_Text(buf, out, 0 PASS_REGS); bool rc = write_Text(buf, out, strlen_utf8(buf) PASS_REGS);
return rc; return rc;
} }
@ -1009,7 +1021,7 @@ bool Yap_Splice_Text(int n, size_t cuts[], seq_tv_t *inp,
next = 0; next = 0;
else else
next = cuts[i - 1]; next = cuts[i - 1];
if (cuts[i] == 0) if (i>0 && cuts[i] == 0)
break; break;
void *bufi = slice(next, cuts[i], buf PASS_REGS); void *bufi = slice(next, cuts[i], buf PASS_REGS);
if (!write_Text(bufi, outv + i, cuts[i] - next PASS_REGS)) { if (!write_Text(bufi, outv + i, cuts[i] - next PASS_REGS)) {
@ -1022,7 +1034,7 @@ bool Yap_Splice_Text(int n, size_t cuts[], seq_tv_t *inp,
/** /**
* Function to convert a generic text term (string, atom, list of codes, list * Function to convert a generic text term (string, atom, list of codes, list
of of<
atoms) into a buff atoms) into a buff
er. er.
* *
@ -1073,7 +1085,7 @@ const char *Yap_TextTermToText(Term t, char *buf, size_t len, encoding_t enc) {
const char *Yap_PredIndicatorToUTF8String(PredEntry *ap) { const char *Yap_PredIndicatorToUTF8String(PredEntry *ap) {
CACHE_REGS CACHE_REGS
Atom at; Atom at;
arity_t arity; arity_t arity = 0;
Functor f; Functor f;
char *s, *smax, *s0; char *s, *smax, *s0;
s = s0 = malloc(1024); s = s0 = malloc(1024);

View File

@ -565,9 +565,12 @@ static void write_string(const unsigned char *s,
qt = '"'; qt = '"';
wrputc(qt, stream); wrputc(qt, stream);
do { do {
ptr += get_utf8(ptr, -1, &chr); int delta;
ptr += (delta = get_utf8(ptr, -1, &chr) );
if (chr == '\0') if (chr == '\0')
break; break;
if (delta == 0) {chr = *ptr++; }
write_quoted(chr, qt, stream); write_quoted(chr, qt, stream);
} while (TRUE); } while (TRUE);
wrputc(qt, stream); wrputc(qt, stream);

View File

@ -8,11 +8,15 @@
project( YAP ) project( YAP )
if (ANDROID)
set(YAP_APP_DIR "$CMAKE_SOURCE_DIR/../..")
cmake_policy(VERSION 3.4)
else ()
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 2.8)
include(CMakeToolsHelpers OPTIONAL) include(CMakeToolsHelpers OPTIONAL)
# cmake_policy(VERSION 3.4)
endif()
set( set(
CMAKE_MODULE_PATH CMAKE_MODULE_PATH
@ -43,6 +47,7 @@ include(Model NO_POLICY_SCOPE)
include_directories ( utf8proc packages/myddas packages/myddas/sqlite3 ) include_directories ( utf8proc packages/myddas packages/myddas/sqlite3 )
if (ANDROID) if (ANDROID)
include_directories ( packages/myddas/sqlite3/Android/jni/sqlite/nativehelper packages/myddas/sqlite3/Android/jni/sqlite ) include_directories ( packages/myddas/sqlite3/Android/jni/sqlite/nativehelper packages/myddas/sqlite3/Android/jni/sqlite )
endif (ANDROID) endif (ANDROID)
add_definitions(-DUSE_MYDDAS=1 -DMYDDAS_SQLITE3=1) add_definitions(-DUSE_MYDDAS=1 -DMYDDAS_SQLITE3=1)
@ -69,18 +74,12 @@ if (ANDROID)
# #
# #
set (SWIG_SOURCES ${CMAKE_SOURCE_DIR}/packages/swig/yap.i)
set (SWIG_CXX ${CMAKE_BINARY_DIR}/yap_swig.cpp)
find_host_package (SWIG)
macro_log_feature (SWIG_FOUND "Swig"
"Use SWIG Language Interface "
"http://www.swig.org" ON)
add_custom_command (OUTPUT ${SWIG_CXX} set (SWIG_CXX ${CMAKE_BINARY_DIR}/packages/swig/android/yap_swig.cpp)
COMMAND ${SWIG_EXECUTABLE} -c++ -java -package pt.up.yap.lib -outdir ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/../../../../../src/generated/java -I${CMAKE_SOURCE_DIR}/CXX -o ${SWIG_CXX}
${SWIG_SOURCES}
) add_subdirectory("packages/swig")
ADD_SUBDIRECTORY(os) ADD_SUBDIRECTORY(os)
ADD_SUBDIRECTORY(OPTYap) ADD_SUBDIRECTORY(OPTYap)
@ -132,7 +131,7 @@ endif (USE_READLINE)
if (ANDROID) if (ANDROID)
add_dependencies(libYap plmyddas) add_dependencies(libYap plmyddas swig)
target_link_libraries(libYap android log) target_link_libraries(libYap android log)

View File

@ -59,6 +59,8 @@ class YAPAtom {
public: public:
/// construct new YAPAtom from UTF-8 string /// construct new YAPAtom from UTF-8 string
YAPAtom( const char * s) { a = Yap_LookupAtom( s ); } YAPAtom( const char * s) { a = Yap_LookupAtom( s ); }
/// construct new YAPAtom from UTF-8 string
YAPAtom( const wchar_t * s) { CACHE_REGS a = UTF32ToAtom( s PASS_REGS ); }
/// construct new YAPAtom from wide string /// construct new YAPAtom from wide string
//YAPAtom( const wchar_t * s) { a = Yap_LookupMaybeWideAtom( s ); } //YAPAtom( const wchar_t * s) { a = Yap_LookupMaybeWideAtom( s ); }
/// construct new YAPAtom from max-length string /// construct new YAPAtom from max-length string

View File

@ -97,7 +97,7 @@ public:
/// Note: Python confuses the 3 constructors, /// Note: Python confuses the 3 constructors,
/// use YAPFunctorFromWideString /// use YAPFunctorFromWideString
inline YAPFunctor(const wchar_t *s, uintptr_t arity) { inline YAPFunctor(const wchar_t *s, uintptr_t arity) {
f = Yap_MkFunctor(Yap_LookupWideAtom(s), arity); CACHE_REGS f = Yap_MkFunctor(UTF32ToAtom(s PASS_REGS), arity);
} }
~YAPFunctor(){}; ~YAPFunctor(){};
/// Getter: extract name of functor as an atom /// Getter: extract name of functor as an atom

View File

@ -412,31 +412,6 @@ YAPTerm YAPListTerm::car() {
} }
} }
YAPTerm::YAPTerm(YAPFunctor f, YAPTerm ts[]) {
CACHE_REGS
BACKUP_H();
Functor fun = f.f;
arity_t arity = ArityOfFunctor(fun);
while (HR + arity > ASP - 1024) {
RECOVER_H();
if (!Yap_dogc(0, NULL PASS_REGS)) {
t = TermNil;
}
BACKUP_H();
}
if (fun == FunctorDot) {
t = AbsPair(HR);
HR[0] = ts[0].term();
HR[1] = ts[1].term();
} else {
t = AbsAppl(HR);
*HR++ = (CELL)fun;
for (arity_t i = 0; i < arity; i++) {
HR[i] = ts[i].term();
}
RECOVER_H();
}
}
YAPListTerm::YAPListTerm(YAPTerm ts[], arity_t n) { YAPListTerm::YAPListTerm(YAPTerm ts[], arity_t n) {
CACHE_REGS CACHE_REGS
@ -519,12 +494,8 @@ bool YAPEngine::call(YAPPredicate ap, YAPTerm ts[]) {
} }
return false; return false;
} }
// don't forget, on success these l); // don't forget, on success these bindings will still be there);
if (!result) {
YAP_LeaveGoal(false, &q); YAP_LeaveGoal(false, &q);
} else {
YAP_LeaveGoal(FALSE, &q);
}
RECOVER_MACHINE_REGS(); RECOVER_MACHINE_REGS();
return result; return result;
} }
@ -595,7 +566,7 @@ Term YAPEngine::fun(Term t) {
BACKUP_MACHINE_REGS(); BACKUP_MACHINE_REGS();
Term tmod = CurrentModule, *ts = nullptr; Term tmod = CurrentModule, *ts = nullptr;
PredEntry *ap ; PredEntry *ap ;
arity_t arity = arity; arity_t arity;
Functor f; Functor f;
jmp_buf q_env; jmp_buf q_env;
Atom name; Atom name;
@ -612,9 +583,11 @@ Term YAPEngine::fun(Term t) {
} else if (IsAtomTerm(t)) { } else if (IsAtomTerm(t)) {
name = AtomOfTerm(t); name = AtomOfTerm(t);
f = nullptr; f = nullptr;
arity = 0;
} else if (IsPairTerm(t)) { } else if (IsPairTerm(t)) {
XREGS[1] = ts[0]; XREGS[1] = ts[0];
XREGS[2] = ts[1]; XREGS[2] = ts[1];
arity = 2;
name = AtomDot; name = AtomDot;
f = FunctorDot; f = FunctorDot;
} else { } else {
@ -653,12 +626,11 @@ Term YAPEngine::fun(Term t) {
} }
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "out %d", result); __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "out %d", result);
Term result;
t = Yap_GetFromSlot(q.CurSlot); t = Yap_GetFromSlot(q.CurSlot);
Yap_CloseHandles(q.CurSlot); Yap_CloseHandles(q.CurSlot);
if (!t) { if (!t) {
YAP_LeaveGoal(false, &q); YAP_LeaveGoal(false, &q);
result = 0; t = 0;
} }
RECOVER_MACHINE_REGS(); RECOVER_MACHINE_REGS();
return t; return t;
@ -668,7 +640,7 @@ YAPQuery::YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm ts[])
: YAPPredicate(f, mod) { : YAPPredicate(f, mod) {
/* ignore flags for now */ /* ignore flags for now */
BACKUP_MACHINE_REGS(); BACKUP_MACHINE_REGS();
goal = YAPTerm(f, ts); goal = YAPApplTerm(f, ts);
vnames = YAPListTerm(); vnames = YAPListTerm();
openQuery(); openQuery();
RECOVER_MACHINE_REGS(); RECOVER_MACHINE_REGS();
@ -677,7 +649,7 @@ YAPQuery::YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm ts[])
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm ts[]) : YAPPredicate(f) { YAPQuery::YAPQuery(YAPFunctor f, YAPTerm ts[]) : YAPPredicate(f) {
/* ignore flags for now */ /* ignore flags for now */
BACKUP_MACHINE_REGS(); BACKUP_MACHINE_REGS();
goal = YAPTerm(f, ts); goal = YAPApplTerm(f, ts);
vnames = YAPListTerm(); vnames = YAPListTerm();
openQuery(); openQuery();
RECOVER_MACHINE_REGS(); RECOVER_MACHINE_REGS();
@ -685,7 +657,7 @@ YAPQuery::YAPQuery(YAPFunctor f, YAPTerm ts[]) : YAPPredicate(f) {
YAPQuery::YAPQuery(YAPPredicate p, YAPTerm ts[]) : YAPPredicate(p.ap) { YAPQuery::YAPQuery(YAPPredicate p, YAPTerm ts[]) : YAPPredicate(p.ap) {
BACKUP_MACHINE_REGS(); BACKUP_MACHINE_REGS();
goal = YAPTerm(YAPFunctor(ap->FunctorOfPred), ts); goal = YAPApplTerm(YAPFunctor(ap->FunctorOfPred), ts);
vnames = YAPListTerm(); vnames = YAPListTerm();
openQuery(); openQuery();
RECOVER_MACHINE_REGS(); RECOVER_MACHINE_REGS();

View File

@ -39,12 +39,12 @@ public:
} }
/// construct a term out of an integer (if you know object type use /// construct a term out of an integer (if you know object type use
/// YAPIntegerTerm) /// YAPIntegerTerm)
YAPTerm(long int num) { mk(MkIntegerTerm(num)); } /// YAPTerm(long int num) { mk(MkIntegerTerm(num)); }
/// construct a term out of an integer (if you know object type use /// construct a term out of an integer (if you know object type use
/// YAPIntegerTerm) /// YAPIntegerTerm)
YAPTerm(double num) { mk(MkFloatTerm(num)); } /// YAPTerm(double num) { mk(MkFloatTerm(num)); }
/// parse string s and construct a term. /// parse string s and construct a term.
YAPTerm(YAPFunctor f, YAPTerm ts[]); /// YAPTerm(YAPFunctor f, YAPTerm ts[]);
/// extract the tag of a term, after dereferencing. /// extract the tag of a term, after dereferencing.
YAP_tag_t tag(); YAP_tag_t tag();
/// copy the term ( term copy ) /// copy the term ( term copy )
@ -322,8 +322,6 @@ class YAPAtomTerm : public YAPTerm {
// Constructor: receives a C-atom; // Constructor: receives a C-atom;
YAPAtomTerm(Atom a) { mk(MkAtomTerm(a)); } YAPAtomTerm(Atom a) { mk(MkAtomTerm(a)); }
YAPAtomTerm(Term t) : YAPTerm(t) { IsAtomTerm(t); } YAPAtomTerm(Term t) : YAPTerm(t) { IsAtomTerm(t); }
// Getter for Prolog atom
Term getTerm() { return t; }
public: public:
// Constructor: receives an atom; // Constructor: receives an atom;

View File

@ -196,6 +196,7 @@ A Id N "id"
A Ignore N "ignore" A Ignore N "ignore"
A Inf N "inf" A Inf N "inf"
A Infinity N "infinity" A Infinity N "infinity"
A Info N "info"
A InitGoal F "$init_goal" A InitGoal F "$init_goal"
A InitProlog F "$init_prolog" A InitProlog F "$init_prolog"
A InStackExpansion N "in stack expansion" A InStackExpansion N "in stack expansion"
@ -495,6 +496,7 @@ F Dot6 Dot 6
F Dot7 Dot 7 F Dot7 Dot 7
F Dot8 Dot 8 F Dot8 Dot 8
F Dot9 Dot 9 F Dot9 Dot 9
F DoubleArrow DoubleArrow 2
F DoubleSlash DoubleSlash 2 F DoubleSlash DoubleSlash 2
F EmptySquareBrackets EmptySquareBrackets 2 F EmptySquareBrackets EmptySquareBrackets 2
F Eq Eq 2 F Eq Eq 2
@ -523,6 +525,10 @@ F HandleThrow HandleThrow 3
F Hat Hat 2 F Hat Hat 2
F I I 2 F I I 2
F Id Id 1 F Id Id 1
F Info1 Info 1
F Info2 Info 2
F Info3 Info 3
F Info4 Info 4
F Is Is 2 F Is Is 2
F J J 2 F J J 2
F LastExecuteWithin LastExecuteWithin 1 F LastExecuteWithin LastExecuteWithin 1

View File

@ -40,7 +40,9 @@ extern void Free(void *buf USES_REGS);
extern int push_text_stack( USES_REGS1 ); extern int push_text_stack( USES_REGS1 );
extern int pop_text_stack( int lvl USES_REGS ); extern int pop_text_stack( int lvl USES_REGS );
#ifndef min
#define min(x,y) (x<y ? x : y) #define min(x,y) (x<y ? x : y)
#endif
#define MBYTE (1024*1024) #define MBYTE (1024*1024)
@ -154,12 +156,18 @@ INLINE_ONLY EXTERN inline char_kind_t chtype(Int ch) {
#define __android_log_print(...) #define __android_log_print(...)
#endif #endif
inline static utf8proc_ssize_t get_utf8(const utf8proc_uint8_t *ptr, size_t n, INLINE_ONLY inline EXTERN utf8proc_ssize_t get_utf8(const utf8proc_uint8_t *ptr, size_t n,
utf8proc_int32_t *valp);
INLINE_ONLY inline EXTERN utf8proc_ssize_t get_utf8(const utf8proc_uint8_t *ptr, size_t n,
utf8proc_int32_t *valp) { utf8proc_int32_t *valp) {
return utf8proc_iterate(ptr, n, valp); return utf8proc_iterate(ptr, n, valp);
} }
inline static utf8proc_ssize_t put_utf8(utf8proc_uint8_t *ptr, INLINE_ONLY inline EXTERN utf8proc_ssize_t put_utf8(utf8proc_uint8_t *ptr,
utf8proc_int32_t val);
INLINE_ONLY inline EXTERN utf8proc_ssize_t put_utf8(utf8proc_uint8_t *ptr,
utf8proc_int32_t val) { utf8proc_int32_t val) {
return utf8proc_encode_char(val, ptr); return utf8proc_encode_char(val, ptr);
} }
@ -286,7 +294,8 @@ inline static int cmpn_utf8(const utf8proc_uint8_t *pt1,
#define SURROGATE_OFFSET \ #define SURROGATE_OFFSET \
((uint32_t)0x10000 - (uint32_t)(0xD800 << 10) - (uint32_t)0xDC00) ((uint32_t)0x10000 - (uint32_t)(0xD800 << 10) - (uint32_t)0xDC00)
const char *Yap_tokRep(void*tokptr, encoding_t enc); extern const char *Yap_tokText(void*tokptr);
extern Term Yap_tokRep(void*tokptr);
// standard strings // standard strings
@ -670,6 +679,17 @@ static inline Term Yap_AtomicToTDQ(Term t0, Term mod USES_REGS) {
return out.val.t; return out.val.t;
} }
static inline wchar_t *Yap_AtomToWide(Atom at USES_REGS) {
seq_tv_t inp, out;
inp.val.a = at;
inp.type = YAP_STRING_ATOM;
out.val.uc = NULL;
out.type = YAP_STRING_WCHARS;
if (!Yap_CVT_Text(&inp, &out PASS_REGS))
return NIL;
return out.val.w;
}
static inline Term Yap_AtomicToTBQ(Term t0, Term mod USES_REGS) { static inline Term Yap_AtomicToTBQ(Term t0, Term mod USES_REGS) {
seq_tv_t inp, out; seq_tv_t inp, out;
@ -1362,6 +1382,19 @@ static inline Term Yap_UTF8ToString(const char *s USES_REGS) {
return MkStringTerm(s); return MkStringTerm(s);
} }
static inline Atom UTF32ToAtom(const wchar_t *s USES_REGS) {
seq_tv_t inp, out;
inp.val.w0 = s;
inp.type = YAP_STRING_WCHARS ;
out.type = YAP_STRING_ATOM;
out.max = -1;
if (!Yap_CVT_Text(&inp, &out PASS_REGS))
return 0L;
return out.val.a;
}
static inline Term Yap_WCharsToListOfCodes(const wchar_t *s USES_REGS) { static inline Term Yap_WCharsToListOfCodes(const wchar_t *s USES_REGS) {
seq_tv_t inp, out; seq_tv_t inp, out;
inp.val.w0 = s; inp.val.w0 = s;

View File

@ -2452,10 +2452,10 @@ extern yamop *headoftrace;
ENDD(d0); ENDD(d0);
#endif #endif
#define Yap_AsmError(e) \ #define Yap_AsmError(e, d) \
{ \ { \
saveregs(); \ saveregs(); \
Yap_Error(e, 0, ""); \ Yap_ThrowError(e, d, 4, ""); \
setregs(); \ setregs(); \
} }

View File

@ -301,12 +301,12 @@ static Term p_div(Term t1, Term t2 USES_REGS) {
Int i1 = IntegerOfTerm(t1), i2 = IntegerOfTerm(t2); Int i1 = IntegerOfTerm(t1), i2 = IntegerOfTerm(t2);
if (i2 == 0) { if (i2 == 0) {
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "// /2"); Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "// /2");
} else if (i1 == Int_MIN && i2 == -1) { } else if (i1 == Int_MIN && i2 == -1) {
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_add_ints(Int_MAX, 1); return Yap_gmp_add_ints(Int_MAX, 1);
#else #else
return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, t1, Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, t1,
"rem/2 with %d and %d", i1, i2); "rem/2 with %d and %d", i1, i2);
#endif #endif
} else { } else {
@ -314,7 +314,7 @@ static Term p_div(Term t1, Term t2 USES_REGS) {
} }
} }
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "// /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "// /2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
/* dividing a bignum by an integer */ /* dividing a bignum by an integer */
@ -325,7 +325,7 @@ static Term p_div(Term t1, Term t2 USES_REGS) {
} }
break; break;
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "// /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "// /2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
@ -336,7 +336,7 @@ static Term p_div(Term t1, Term t2 USES_REGS) {
/* two bignums */ /* two bignums */
return Yap_gmp_div_big_big(t1, t2); return Yap_gmp_div_big_big(t1, t2);
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "// /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "// /2");
default: default:
RERROR(); RERROR();
} }
@ -355,7 +355,7 @@ static Term p_and(Term t1, Term t2 USES_REGS) {
/* two integers */ /* two integers */
RINT(IntegerOfTerm(t1) & IntegerOfTerm(t2)); RINT(IntegerOfTerm(t1) & IntegerOfTerm(t2));
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\ /2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_and_int_big(IntegerOfTerm(t1), t2); return Yap_gmp_and_int_big(IntegerOfTerm(t1), t2);
@ -365,7 +365,7 @@ static Term p_and(Term t1, Term t2 USES_REGS) {
} }
break; break;
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "/\\ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "/\\ /2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
@ -376,7 +376,7 @@ static Term p_and(Term t1, Term t2 USES_REGS) {
/* two bignums */ /* two bignums */
return Yap_gmp_and_big_big(t1, t2); return Yap_gmp_and_big_big(t1, t2);
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\ /2");
default: default:
RERROR(); RERROR();
} }
@ -395,7 +395,7 @@ static Term p_or(Term t1, Term t2 USES_REGS) {
/* two integers */ /* two integers */
RINT(IntegerOfTerm(t1) | IntegerOfTerm(t2)); RINT(IntegerOfTerm(t1) | IntegerOfTerm(t2));
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_gmp_ior_int_big(IntegerOfTerm(t1), t2); return Yap_gmp_ior_int_big(IntegerOfTerm(t1), t2);
@ -405,7 +405,7 @@ static Term p_or(Term t1, Term t2 USES_REGS) {
} }
break; break;
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "\\/ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "\\/ /2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
@ -416,7 +416,7 @@ static Term p_or(Term t1, Term t2 USES_REGS) {
/* two bignums */ /* two bignums */
return Yap_gmp_ior_big_big(t1, t2); return Yap_gmp_ior_big_big(t1, t2);
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2");
default: default:
RERROR(); RERROR();
} }
@ -438,33 +438,33 @@ static Term p_sll(Term t1, Term t2 USES_REGS) {
if (i2 <= 0) { if (i2 <= 0) {
if (i2 == Int_MIN) { if (i2 == Int_MIN) {
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2"); Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
} }
RINT(SLR(IntegerOfTerm(t1), -i2)); RINT(SLR(IntegerOfTerm(t1), -i2));
} }
return do_sll(IntegerOfTerm(t1), i2 PASS_REGS); return do_sll(IntegerOfTerm(t1), i2 PASS_REGS);
} }
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "<</2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "<</2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, "<</2"); Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, "<</2");
#endif #endif
default: default:
RERROR(); RERROR();
} }
break; break;
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "<< /2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, "<< /2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
case long_int_e: case long_int_e:
return Yap_gmp_sll_big_int(t1, IntegerOfTerm(t2)); return Yap_gmp_sll_big_int(t1, IntegerOfTerm(t2));
case big_int_e: case big_int_e:
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2"); Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "<</2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, "<</2");
default: default:
RERROR(); RERROR();
} }
@ -486,33 +486,33 @@ static Term p_slr(Term t1, Term t2 USES_REGS) {
if (i2 < 0) { if (i2 < 0) {
if (i2 == Int_MIN) { if (i2 == Int_MIN) {
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2"); Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
} }
return do_sll(IntegerOfTerm(t1), -i2 PASS_REGS); return do_sll(IntegerOfTerm(t1), -i2 PASS_REGS);
} }
RINT(SLR(IntegerOfTerm(t1), i2)); RINT(SLR(IntegerOfTerm(t1), i2));
} }
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, ">>/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, ">>/2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2"); Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
#endif #endif
default: default:
RERROR(); RERROR();
} }
break; break;
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t1, ">>/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t1, ">>/2");
case big_int_e: case big_int_e:
#ifdef USE_GMP #ifdef USE_GMP
switch (ETypeOfTerm(t2)) { switch (ETypeOfTerm(t2)) {
case long_int_e: case long_int_e:
return Yap_gmp_sll_big_int(t1, -IntegerOfTerm(t2)); return Yap_gmp_sll_big_int(t1, -IntegerOfTerm(t2));
case big_int_e: case big_int_e:
return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2"); Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
case double_e: case double_e:
return Yap_ArithError(TYPE_ERROR_INTEGER, t2, ">>/2"); Yap_ArithError(TYPE_ERROR_INTEGER, t2, ">>/2");
default: default:
RERROR(); RERROR();
} }

View File

@ -407,7 +407,7 @@ yamop *Yap_EvalError__(const char *, const char *, int, yap_error_number, Term,
...); ...);
#define Yap_ArithError(id, t, ...) \ #define Yap_ArithError(id, t, ...) \
Yap_ArithError__(__FILE__, __FUNCTION__, __LINE__, id, t, __VA_ARGS__) Yap_ThrowError__(__FILE__, __FUNCTION__, __LINE__, id, t, 2, __VA_ARGS__)
#define Yap_BinError(id) \ #define Yap_BinError(id) \
Yap_Error__(__FILE__, __FUNCTION__, __LINE__, id, 0L, "") Yap_Error__(__FILE__, __FUNCTION__, __LINE__, id, 0L, "")
#define Yap_AbsmiError(id) \ #define Yap_AbsmiError(id) \

View File

@ -191,6 +191,7 @@
AtomIgnore = Yap_LookupAtom("ignore"); TermIgnore = MkAtomTerm(AtomIgnore); AtomIgnore = Yap_LookupAtom("ignore"); TermIgnore = MkAtomTerm(AtomIgnore);
AtomInf = Yap_LookupAtom("inf"); TermInf = MkAtomTerm(AtomInf); AtomInf = Yap_LookupAtom("inf"); TermInf = MkAtomTerm(AtomInf);
AtomInfinity = Yap_LookupAtom("infinity"); TermInfinity = MkAtomTerm(AtomInfinity); AtomInfinity = Yap_LookupAtom("infinity"); TermInfinity = MkAtomTerm(AtomInfinity);
AtomInfo = Yap_LookupAtom("info"); TermInfo = MkAtomTerm(AtomInfo);
AtomInitGoal = Yap_FullLookupAtom("$init_goal"); TermInitGoal = MkAtomTerm(AtomInitGoal); AtomInitGoal = Yap_FullLookupAtom("$init_goal"); TermInitGoal = MkAtomTerm(AtomInitGoal);
AtomInitProlog = Yap_FullLookupAtom("$init_prolog"); TermInitProlog = MkAtomTerm(AtomInitProlog); AtomInitProlog = Yap_FullLookupAtom("$init_prolog"); TermInitProlog = MkAtomTerm(AtomInitProlog);
AtomInStackExpansion = Yap_LookupAtom("in stack expansion"); TermInStackExpansion = MkAtomTerm(AtomInStackExpansion); AtomInStackExpansion = Yap_LookupAtom("in stack expansion"); TermInStackExpansion = MkAtomTerm(AtomInStackExpansion);
@ -490,6 +491,7 @@
FunctorDot7 = Yap_MkFunctor(AtomDot,7); FunctorDot7 = Yap_MkFunctor(AtomDot,7);
FunctorDot8 = Yap_MkFunctor(AtomDot,8); FunctorDot8 = Yap_MkFunctor(AtomDot,8);
FunctorDot9 = Yap_MkFunctor(AtomDot,9); FunctorDot9 = Yap_MkFunctor(AtomDot,9);
FunctorDoubleArrow = Yap_MkFunctor(AtomDoubleArrow,2);
FunctorDoubleSlash = Yap_MkFunctor(AtomDoubleSlash,2); FunctorDoubleSlash = Yap_MkFunctor(AtomDoubleSlash,2);
FunctorEmptySquareBrackets = Yap_MkFunctor(AtomEmptySquareBrackets,2); FunctorEmptySquareBrackets = Yap_MkFunctor(AtomEmptySquareBrackets,2);
FunctorEq = Yap_MkFunctor(AtomEq,2); FunctorEq = Yap_MkFunctor(AtomEq,2);
@ -518,6 +520,10 @@
FunctorHat = Yap_MkFunctor(AtomHat,2); FunctorHat = Yap_MkFunctor(AtomHat,2);
FunctorI = Yap_MkFunctor(AtomI,2); FunctorI = Yap_MkFunctor(AtomI,2);
FunctorId = Yap_MkFunctor(AtomId,1); FunctorId = Yap_MkFunctor(AtomId,1);
FunctorInfo1 = Yap_MkFunctor(AtomInfo,1);
FunctorInfo2 = Yap_MkFunctor(AtomInfo,2);
FunctorInfo3 = Yap_MkFunctor(AtomInfo,3);
FunctorInfo4 = Yap_MkFunctor(AtomInfo,4);
FunctorIs = Yap_MkFunctor(AtomIs,2); FunctorIs = Yap_MkFunctor(AtomIs,2);
FunctorJ = Yap_MkFunctor(AtomJ,2); FunctorJ = Yap_MkFunctor(AtomJ,2);
FunctorLastExecuteWithin = Yap_MkFunctor(AtomLastExecuteWithin,1); FunctorLastExecuteWithin = Yap_MkFunctor(AtomLastExecuteWithin,1);

View File

@ -191,6 +191,7 @@
AtomIgnore = AtomAdjust(AtomIgnore); TermIgnore = MkAtomTerm(AtomIgnore); AtomIgnore = AtomAdjust(AtomIgnore); TermIgnore = MkAtomTerm(AtomIgnore);
AtomInf = AtomAdjust(AtomInf); TermInf = MkAtomTerm(AtomInf); AtomInf = AtomAdjust(AtomInf); TermInf = MkAtomTerm(AtomInf);
AtomInfinity = AtomAdjust(AtomInfinity); TermInfinity = MkAtomTerm(AtomInfinity); AtomInfinity = AtomAdjust(AtomInfinity); TermInfinity = MkAtomTerm(AtomInfinity);
AtomInfo = AtomAdjust(AtomInfo); TermInfo = MkAtomTerm(AtomInfo);
AtomInitGoal = AtomAdjust(AtomInitGoal); TermInitGoal = MkAtomTerm(AtomInitGoal); AtomInitGoal = AtomAdjust(AtomInitGoal); TermInitGoal = MkAtomTerm(AtomInitGoal);
AtomInitProlog = AtomAdjust(AtomInitProlog); TermInitProlog = MkAtomTerm(AtomInitProlog); AtomInitProlog = AtomAdjust(AtomInitProlog); TermInitProlog = MkAtomTerm(AtomInitProlog);
AtomInStackExpansion = AtomAdjust(AtomInStackExpansion); TermInStackExpansion = MkAtomTerm(AtomInStackExpansion); AtomInStackExpansion = AtomAdjust(AtomInStackExpansion); TermInStackExpansion = MkAtomTerm(AtomInStackExpansion);
@ -490,6 +491,7 @@
FunctorDot7 = FuncAdjust(FunctorDot7); FunctorDot7 = FuncAdjust(FunctorDot7);
FunctorDot8 = FuncAdjust(FunctorDot8); FunctorDot8 = FuncAdjust(FunctorDot8);
FunctorDot9 = FuncAdjust(FunctorDot9); FunctorDot9 = FuncAdjust(FunctorDot9);
FunctorDoubleArrow = FuncAdjust(FunctorDoubleArrow);
FunctorDoubleSlash = FuncAdjust(FunctorDoubleSlash); FunctorDoubleSlash = FuncAdjust(FunctorDoubleSlash);
FunctorEmptySquareBrackets = FuncAdjust(FunctorEmptySquareBrackets); FunctorEmptySquareBrackets = FuncAdjust(FunctorEmptySquareBrackets);
FunctorEq = FuncAdjust(FunctorEq); FunctorEq = FuncAdjust(FunctorEq);
@ -518,6 +520,10 @@
FunctorHat = FuncAdjust(FunctorHat); FunctorHat = FuncAdjust(FunctorHat);
FunctorI = FuncAdjust(FunctorI); FunctorI = FuncAdjust(FunctorI);
FunctorId = FuncAdjust(FunctorId); FunctorId = FuncAdjust(FunctorId);
FunctorInfo1 = FuncAdjust(FunctorInfo1);
FunctorInfo2 = FuncAdjust(FunctorInfo2);
FunctorInfo3 = FuncAdjust(FunctorInfo3);
FunctorInfo4 = FuncAdjust(FunctorInfo4);
FunctorIs = FuncAdjust(FunctorIs); FunctorIs = FuncAdjust(FunctorIs);
FunctorJ = FuncAdjust(FunctorJ); FunctorJ = FuncAdjust(FunctorJ);
FunctorLastExecuteWithin = FuncAdjust(FunctorLastExecuteWithin); FunctorLastExecuteWithin = FuncAdjust(FunctorLastExecuteWithin);

View File

@ -191,6 +191,7 @@ EXTERNAL Atom AtomId; EXTERNAL Term TermId;
EXTERNAL Atom AtomIgnore; EXTERNAL Term TermIgnore; EXTERNAL Atom AtomIgnore; EXTERNAL Term TermIgnore;
EXTERNAL Atom AtomInf; EXTERNAL Term TermInf; EXTERNAL Atom AtomInf; EXTERNAL Term TermInf;
EXTERNAL Atom AtomInfinity; EXTERNAL Term TermInfinity; EXTERNAL Atom AtomInfinity; EXTERNAL Term TermInfinity;
EXTERNAL Atom AtomInfo; EXTERNAL Term TermInfo;
EXTERNAL Atom AtomInitGoal; EXTERNAL Term TermInitGoal; EXTERNAL Atom AtomInitGoal; EXTERNAL Term TermInitGoal;
EXTERNAL Atom AtomInitProlog; EXTERNAL Term TermInitProlog; EXTERNAL Atom AtomInitProlog; EXTERNAL Term TermInitProlog;
EXTERNAL Atom AtomInStackExpansion; EXTERNAL Term TermInStackExpansion; EXTERNAL Atom AtomInStackExpansion; EXTERNAL Term TermInStackExpansion;
@ -544,6 +545,8 @@ EXTERNAL Functor FunctorDot8;
EXTERNAL Functor FunctorDot9; EXTERNAL Functor FunctorDot9;
EXTERNAL Functor FunctorDoubleArrow;
EXTERNAL Functor FunctorDoubleSlash; EXTERNAL Functor FunctorDoubleSlash;
EXTERNAL Functor FunctorEmptySquareBrackets; EXTERNAL Functor FunctorEmptySquareBrackets;
@ -600,6 +603,14 @@ EXTERNAL Functor FunctorI;
EXTERNAL Functor FunctorId; EXTERNAL Functor FunctorId;
EXTERNAL Functor FunctorInfo1;
EXTERNAL Functor FunctorInfo2;
EXTERNAL Functor FunctorInfo3;
EXTERNAL Functor FunctorInfo4;
EXTERNAL Functor FunctorIs; EXTERNAL Functor FunctorIs;
EXTERNAL Functor FunctorJ; EXTERNAL Functor FunctorJ;

View File

@ -141,18 +141,20 @@ if(POLICY CMP0043)
endif(POLICY CMP0043) endif(POLICY CMP0043)
if (ANDROID)
set ( prefix ${YAP_APP_DIR}/app/build/generated )
set ( datarootdir ${YAP_APP_DIR}/app/build/generated/assets )
set ( includedir "${prefix}/assets/include")
set ( libpl ${YAP_APP_DIR}/app/build/generated/assets/Yap)
else()
set ( prefix "${CMAKE_INSTALL_PREFIX}") set ( prefix "${CMAKE_INSTALL_PREFIX}")
set ( datarootdir "${prefix}/share")
set ( libpl "${datarootdir}/Yap")
set ( includedir "${prefix}/include")
endif()
set ( exec_prefix "${prefix}") set ( exec_prefix "${prefix}")
set ( libdir "${exec_prefix}/lib") set ( libdir "${exec_prefix}/lib")
set ( dlls "${exec_prefix}/lib/Yap") set ( dlls "${exec_prefix}/lib/Yap")
set ( includedir "${prefix}/include")
set ( datarootdir "${prefix}/share")
if (ANDROID)
set ( libpl "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/../../../../../build/generated/assets/Yap")
else()
set ( libpl "${datarootdir}/Yap")
endif()
set ( datadir "${datarootdir}") set ( datadir "${datarootdir}")
set ( mandir "${datarootdir}/man") set ( mandir "${datarootdir}/man")
set ( bindir "${exec_prefix}/bin") set ( bindir "${exec_prefix}/bin")

View File

@ -255,6 +255,7 @@ check_function_exists(__builtin_ffsll HAVE___BUILTIN_FFSLL)
check_function_exists(fgetpos HAVE_FGETPOS) check_function_exists(fgetpos HAVE_FGETPOS)
check_function_exists(finite HAVE_FINITE) check_function_exists(finite HAVE_FINITE)
check_function_exists(iswblank HAVE_ISWBLANK) check_function_exists(iswblank HAVE_ISWBLANK)
check_function_exists(iswspace HAVE_ISWSPACE)
check_symbol_exists(flsl <string.h> HAVE_FLSL) check_symbol_exists(flsl <string.h> HAVE_FLSL)
check_symbol_exists(flsll <string.h> HAVE_FLSLL) check_symbol_exists(flsll <string.h> HAVE_FLSLL)
check_function_exists(fmemopen HAVE_FMEMOPEN) check_function_exists(fmemopen HAVE_FMEMOPEN)

View File

@ -586,6 +586,11 @@ function. */
#cmakedefine HAVE_ISWBLANK ${HAVE_ISWBLANK} #cmakedefine HAVE_ISWBLANK ${HAVE_ISWBLANK}
#endif #endif
/* Define to 1 if you have the `iswspace' function. */
#ifndef HAVE_ISWSPACE
#cmakedefine HAVE_ISWSPACE ${HAVE_ISWSPACE}
#endif
/* Define to 1 if you have the <Judy.h> header file. */ /* Define to 1 if you have the <Judy.h> header file. */
#ifndef HAVE_JUDY_H #ifndef HAVE_JUDY_H
#cmakedefine HAVE_JUDY_H ${HAVE_JUDY_H} #cmakedefine HAVE_JUDY_H ${HAVE_JUDY_H}

View File

@ -42,7 +42,7 @@ struct yami *Yap_Error__(const char *file, const char *function, int lineno,
yap_error_number err, YAP_Term wheret, ...); yap_error_number err, YAP_Term wheret, ...);
void Yap_ThrowError__(const char *file, const char *function, int lineno, void Yap_ThrowError__(const char *file, const char *function, int lineno,
yap_error_number err, YAP_Term wheret, ...); yap_error_number err, YAP_Term wheret, int code, ...) __attribute__ ((noreturn));
#define Yap_NilError(id, ...) \ #define Yap_NilError(id, ...) \
@ -51,8 +51,8 @@ void Yap_ThrowError__(const char *file, const char *function, int lineno,
#define Yap_Error(id, inp, ...) \ #define Yap_Error(id, inp, ...) \
Yap_Error__(__FILE__, __FUNCTION__, __LINE__, id, inp, __VA_ARGS__) Yap_Error__(__FILE__, __FUNCTION__, __LINE__, id, inp, __VA_ARGS__)
#define Yap_ThrowError(id, inp, ...) \ #define Yap_ThrowError(id, inp, code, ...) \
Yap_ThrowError__(__FILE__, __FUNCTION__, __LINE__, id, inp, __VA_ARGS__) Yap_ThrowError__(__FILE__, __FUNCTION__, __LINE__, id, inp, code, __VA_ARGS__)
#ifdef YAP_TERM_H #ifdef YAP_TERM_H
/** /**

View File

@ -248,6 +248,49 @@ split_within(SplitCodes, DoubleQs, C-SingleQs, Strings, C) -->
split_within(SplitCodes, DoubleQs, SingleQs, [[C|String]|Strings], C) --> split_within(SplitCodes, DoubleQs, SingleQs, [[C|String]|Strings], C) -->
split_within(SplitCodes, DoubleQs, SingleQs, [String|Strings]). split_within(SplitCodes, DoubleQs, SingleQs, [String|Strings]).
/** @pred split_unquoted(+ _Line_,+ _Separators_,- _Split_)
Unify _Words_ with a set of strings obtained from _Line_ by
using the character codes in _Separators_ as separators, but treat text wi
thin double quotes as a single unit. As an
example, consider:
~~~~~{.prolog}
?- split("Hello * I \"am free\""," *",S).
S = ["Hello","I","am free"] ?
no
~~~~~
*/
split_unquoted(String, SplitCodes, Strings) :-
split_unquoted_at_blank(SplitCodes, Strings, String, []).
split_unquoted_at_blank(SplitCodes, [[0'"|New]|More]) --> %0'"
"\"",
split_quoted(New, More),
split_unquoted_at_blank(SplitCodes, More).
split_unquoted_at_blank(SplitCodes, More) -->
[C],
{ member(C, SplitCodes) }, !,
split_unquoted_at_blank(SplitCodes, More).
split_unquoted_at_blank(SplitCodes, [[C|New]| More]) -->
[C], !,
split_unquoted(SplitCodes, New, More).
split_unquoted_at_blank(_, []) --> [].
split_unquoted(SplitCodes, [], More) -->
[C],
{ member(C, SplitCodes) }, !,
split_unquoted_at_blank(SplitCodes, More).
split_unquoted(SplitCodes, [C|New], Set) -->
[C], !,
split_unquoted(SplitCodes, New, Set).
split_unquoted(_, [], []) --> [].
/** @pred split_quoted(+ _Line_,+ _Separators_, GroupQuotes, SingleQuotes, - _Split_) /** @pred split_quoted(+ _Line_,+ _Separators_, GroupQuotes, SingleQuotes, - _Split_)

View File

@ -79,7 +79,7 @@ static char SccsId[] = "%W% %G%";
static Int p_change_type_of_char(USES_REGS1); static Int p_change_type_of_char(USES_REGS1);
Term Yap_StringToNumberTerm(const char *s, encoding_t *encp) { Term Yap_StringToNumberTerm(const char *s, encoding_t *encp, bool error_on) {
CACHE_REGS CACHE_REGS
int sno; int sno;
Term t; Term t;
@ -95,7 +95,7 @@ Term Yap_StringToNumberTerm(const char *s, encoding_t *encp) {
while (*s && isblank(*s) && Yap_wide_chtype(*s) == BS) while (*s && isblank(*s) && Yap_wide_chtype(*s) == BS)
s++; s++;
#endif #endif
t = Yap_scan_num(GLOBAL_Stream + sno); t = Yap_scan_num(GLOBAL_Stream + sno, error_on);
if (LOCAL_Error_TYPE == SYNTAX_ERROR) if (LOCAL_Error_TYPE == SYNTAX_ERROR)
LOCAL_Error_TYPE = YAP_NO_ERROR; LOCAL_Error_TYPE = YAP_NO_ERROR;
Yap_CloseStream(sno); Yap_CloseStream(sno);

View File

@ -109,7 +109,7 @@ extern void Yap_plwrite(Term, struct stream_desc *, int, int, int);
extern void Yap_WriteAtom(struct stream_desc *s, Atom atom); extern void Yap_WriteAtom(struct stream_desc *s, Atom atom);
extern bool Yap_WriteTerm( int output_stream, Term t, Term opts USES_REGS); extern bool Yap_WriteTerm( int output_stream, Term t, Term opts USES_REGS);
extern Term Yap_scan_num(struct stream_desc *); extern Term Yap_scan_num(struct stream_desc *, bool);
extern void Yap_DefaultStreamOps(StreamDesc *st); extern void Yap_DefaultStreamOps(StreamDesc *st);
extern void Yap_PipeOps(StreamDesc *st); extern void Yap_PipeOps(StreamDesc *st);

View File

@ -217,26 +217,26 @@ static const param_t read_defs[] = {READ_DEFS()};
*/ */
static Term syntax_error(TokEntry *errtok, int sno, Term cmod) { static Term syntax_error(TokEntry *errtok, int sno, Term cmod) {
CACHE_REGS CACHE_REGS
Term info;
Term startline, errline, endline; Term startline, errline, endline;
Term tf[4]; Term tf[3];
Term *tailp = tf + 3; Term tm;
Term *tailp = tf + 2;
CELL *Hi = HR; CELL *Hi = HR;
TokEntry *tok = LOCAL_tokptr; TokEntry *tok = LOCAL_tokptr;
Int cline = tok->TokPos; Int cline = tok->TokPos;
startline = MkIntegerTerm(cline); startline = MkIntegerTerm(cline);
endline = MkIntegerTerm(cline);
if (errtok != LOCAL_toktide) { if (errtok != LOCAL_toktide) {
errtok = LOCAL_toktide; errtok = LOCAL_toktide;
} }
LOCAL_Error_TYPE = YAP_NO_ERROR; LOCAL_Error_TYPE = YAP_NO_ERROR;
errline = MkIntegerTerm(errtok->TokPos); errline = MkIntegerTerm(errtok->TokPos);
if (LOCAL_ErrorMessage) if (LOCAL_ErrorMessage)
tf[0] = MkStringTerm(LOCAL_ErrorMessage); tm = MkStringTerm(LOCAL_ErrorMessage);
else else
tf[0] = MkStringTerm(""); tm = MkStringTerm("syntax error");
while (tok) { while (tok) {
Term ts[2];
if (HR > ASP - 1024) { if (HR > ASP - 1024) {
errline = MkIntegerTerm(0); errline = MkIntegerTerm(0);
@ -254,57 +254,7 @@ static Term syntax_error(TokEntry *errtok, int sno, Term cmod) {
*tailp = MkPairTerm(MkAtomTerm(AtomError), TermNil); *tailp = MkPairTerm(MkAtomTerm(AtomError), TermNil);
tailp = RepPair(*tailp) + 1; tailp = RepPair(*tailp) + 1;
} }
info = tok->TokInfo; Term rep = Yap_tokRep(tok );
switch (tok->Tok) {
case Name_tok: {
Term t0[1];
if (info) {
t0[0] = MkAtomTerm((Atom)info);
} else {
t0[0] = TermNil;
}
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomAtom, 1), 1, t0);
} break;
case QuasiQuotes_tok: {
Term t0[2];
t0[0] = MkAtomTerm(Yap_LookupAtom("<QQ>"));
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomAtom, 1), 1, t0);
} break;
case Number_tok:
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomNumber, 1), 1, &info);
break;
case Var_tok: {
Term t[2];
VarEntry *varinfo = (VarEntry *)info;
t[1] = Yap_CharsToString(varinfo->VarRep, ENC_ISO_LATIN1 PASS_REGS);
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomGVar, 2), 2, t);
} break;
case String_tok: {
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomString, 1), 1, &info);
} break;
case BQString_tok: {
ts[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomString, 1), 1, &info);
} break;
case Error_tok: {
ts[0] = MkAtomTerm(AtomError);
} break;
case eot_tok:
endline = MkIntegerTerm(tok->TokPos);
ts[0] = MkAtomTerm(Yap_LookupAtom("EOT"));
break;
case Ponctuation_tok: {
char s[2];
s[1] = '\0';
if ((info) == 'l') {
s[0] = '(';
} else {
s[0] = (char)info;
}
ts[0] = MkAtomTerm(Yap_LookupAtom(s));
}
}
if (tok->TokNext) { if (tok->TokNext) {
tok = tok->TokNext; tok = tok->TokNext;
} else { } else {
@ -312,7 +262,7 @@ static Term syntax_error(TokEntry *errtok, int sno, Term cmod) {
tok = NULL; tok = NULL;
break; break;
} }
*tailp = MkPairTerm(ts[0], TermNil); *tailp = MkPairTerm(rep , TermNil);
tailp = RepPair(*tailp) + 1; tailp = RepPair(*tailp) + 1;
} }
{ {
@ -320,19 +270,18 @@ static Term syntax_error(TokEntry *errtok, int sno, Term cmod) {
t[0] = startline; t[0] = startline;
t[1] = errline; t[1] = errline;
t[2] = endline; t[2] = endline;
tf[1] = Yap_MkApplTerm(Yap_MkFunctor(AtomBetween, 3), 3, t); tf[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomBetween, 3), 3, t);
} }
/* 0: id */ /* 0: strat, error, end line */
/* 1: strat, error, end line */
/*2 msg */ /*2 msg */
/* file */ /* 1: file */
tf[2] = Yap_StreamUserName(sno); tf[1] = Yap_StreamUserName(sno);
clean_vars(LOCAL_VarTable); clean_vars(LOCAL_VarTable);
clean_vars(LOCAL_AnonVarTable); clean_vars(LOCAL_AnonVarTable);
Term terr = Yap_MkApplTerm(FunctorSyntaxError, 4, tf); Term terr = Yap_MkApplTerm(FunctorInfo3, 3, tf);
Term tn[2]; Term tn[2];
tn[0] = Yap_MkApplTerm(FunctorShortSyntaxError, 1, &terr); tn[0] = Yap_MkApplTerm(FunctorShortSyntaxError, 1, &tm);
tn[1] = TermNil; tn[1] = terr;
terr = Yap_MkApplTerm(FunctorError, 2, tn); terr = Yap_MkApplTerm(FunctorError, 2, tn);
#if DEBUG #if DEBUG
if (Yap_ExecutionMode == YAP_BOOT_MODE) { if (Yap_ExecutionMode == YAP_BOOT_MODE) {
@ -401,7 +350,6 @@ static xarg *setReadEnv(Term opts, FEnv *fe, struct renv *re, int inp_stream) {
fe->cmod = PROLOG_MODULE; fe->cmod = PROLOG_MODULE;
if (args[READ_BACKQUOTED_STRING].used) { if (args[READ_BACKQUOTED_STRING].used) {
if (!setBackQuotesFlag(args[READ_BACKQUOTED_STRING].tvalue)) { if (!setBackQuotesFlag(args[READ_BACKQUOTED_STRING].tvalue)) {
free(args);
return false; return false;
} }
} }
@ -782,10 +730,11 @@ static parser_state_t scan(REnv *re, FEnv *fe, int inp_stream) {
TokEntry *t = LOCAL_tokptr; TokEntry *t = LOCAL_tokptr;
int n = 0; int n = 0;
while (t) { while (t) {
fprintf(stderr, "[Token %d %s %d]", Ord(t->Tok), fprintf(stderr, "[Token %d %s %d]",
Yap_tokRep(t, ENC_ISO_UTF8), n++); Ord(t->Tok),Yap_tokText(t), n++);
t = t->TokNext; t = t->TokNext;
} }
fprintf(stderr, "\n");
} }
#endif #endif
if (LOCAL_ErrorMessage) if (LOCAL_ErrorMessage)
@ -856,14 +805,12 @@ static parser_state_t parseError(REnv *re, FEnv *fe, int inp_stream) {
LOCAL_Error_TYPE = YAP_NO_ERROR; LOCAL_Error_TYPE = YAP_NO_ERROR;
return YAP_PARSING_FINISHED; return YAP_PARSING_FINISHED;
} else { } else {
char *s = syntax_error(fe->toklast, inp_stream, fe->cmod); Term t = syntax_error(fe->toklast, inp_stream, fe->cmod);
if (ParserErrorStyle == TermError) { if (ParserErrorStyle == TermError) {
LOCAL_ErrorMessage = s; LOCAL_ActiveError->errorTerm = Yap_StoreTermInDB( t, 4);
LOCAL_Error_TYPE = SYNTAX_ERROR; LOCAL_Error_TYPE = SYNTAX_ERROR;
return YAP_PARSING_FINISHED;
// dec-10 // dec-10
} else if (Yap_PrintWarning(MkStringTerm(s))) { } else if (Yap_PrintWarning(t)) {
free(s);
LOCAL_Error_TYPE = YAP_NO_ERROR; LOCAL_Error_TYPE = YAP_NO_ERROR;
return YAP_SCANNING; return YAP_SCANNING;
} }

View File

@ -1926,34 +1926,8 @@ static HKEY reg_open_key(const wchar_t *which, int create) {
#define MAXREGSTRLEN 1024 #define MAXREGSTRLEN 1024
static void recover_space(wchar_t *k, Atom At) {
if (At->WStrOfAE != k)
Yap_FreeCodeSpace((char *)k);
}
static wchar_t *WideStringFromAtom(Atom KeyAt USES_REGS) { static wchar_t *WideStringFromAtom(Atom KeyAt USES_REGS) {
if (IsWideAtom(KeyAt)) { return Yap_AtomToWide( KeyAt );
return KeyAt->WStrOfAE;
} else {
int len = strlen(KeyAt->StrOfAE);
int sz = sizeof(wchar_t) * (len + 1);
char *chp = KeyAt->StrOfAE;
wchar_t *kptr, *k;
k = (wchar_t *)Yap_AllocCodeSpace(sz);
while (k == NULL) {
if (!Yap_growheap(false, sz, NULL)) {
Yap_Error(RESOURCE_ERROR_HEAP, MkIntegerTerm(sz),
"generating key in win_registry_get_value/3");
return false;
}
k = (wchar_t *)Yap_AllocCodeSpace(sz);
}
kptr = k;
while ((*kptr++ = *chp++))
;
return k;
}
} }
static Int p_win_registry_get_value(USES_REGS1) { static Int p_win_registry_get_value(USES_REGS1) {
@ -1965,24 +1939,29 @@ static Int p_win_registry_get_value(USES_REGS1) {
Term Key = Deref(ARG1); Term Key = Deref(ARG1);
Term Name = Deref(ARG2); Term Name = Deref(ARG2);
Atom KeyAt, NameAt; Atom KeyAt, NameAt;
int l = push_text_stack();
if (IsVarTerm(Key)) { if (IsVarTerm(Key)) {
Yap_Error(INSTANTIATION_ERROR, Key, Yap_Error(INSTANTIATION_ERROR, Key,
"argument to win_registry_get_value unbound"); "argument to win_registry_get_value unbound");
pop_text_stack(l);
return FALSE; return FALSE;
} }
if (!IsAtomTerm(Key)) { if (!IsAtomTerm(Key)) {
Yap_Error(TYPE_ERROR_ATOM, Key, "argument to win_registry_get_value"); Yap_Error(TYPE_ERROR_ATOM, Key, "argument to win_registry_get_value");
pop_text_stack(l);
return FALSE; return FALSE;
} }
KeyAt = AtomOfTerm(Key); KeyAt = AtomOfTerm(Key);
if (IsVarTerm(Name)) { if (IsVarTerm(Name)) {
Yap_Error(INSTANTIATION_ERROR, Key, Yap_Error(INSTANTIATION_ERROR, Key,
"argument to win_registry_get_value unbound"); "argument to win_registry_get_value unbound");
pop_text_stack(l);
return FALSE; return FALSE;
} }
if (!IsAtomTerm(Name)) { if (!IsAtomTerm(Name)) {
Yap_Error(TYPE_ERROR_ATOM, Key, "argument to win_registry_get_value"); Yap_Error(TYPE_ERROR_ATOM, Key, "argument to win_registry_get_value");
pop_text_stack(l);
return FALSE; return FALSE;
} }
NameAt = AtomOfTerm(Name); NameAt = AtomOfTerm(Name);
@ -1990,7 +1969,7 @@ static Int p_win_registry_get_value(USES_REGS1) {
k = WideStringFromAtom(KeyAt PASS_REGS); k = WideStringFromAtom(KeyAt PASS_REGS);
if (!(key = reg_open_key(k, FALSE))) { if (!(key = reg_open_key(k, FALSE))) {
Yap_Error(EXISTENCE_ERROR_KEY, Key, "argument to win_registry_get_value"); Yap_Error(EXISTENCE_ERROR_KEY, Key, "argument to win_registry_get_value");
recover_space(k, KeyAt); pop_text_stack(l);
return FALSE; return FALSE;
} }
name = WideStringFromAtom(NameAt PASS_REGS); name = WideStringFromAtom(NameAt PASS_REGS);
@ -1999,26 +1978,22 @@ static Int p_win_registry_get_value(USES_REGS1) {
RegCloseKey(key); RegCloseKey(key);
switch (type) { switch (type) {
case REG_SZ: case REG_SZ:
recover_space(k, KeyAt);
recover_space(name, NameAt);
((wchar_t *)data)[len] = '\0'; ((wchar_t *)data)[len] = '\0';
return Yap_unify(MkAtomTerm(Yap_LookupMaybeWideAtom((wchar_t *)data)), Atom at = Yap_NWCharsToAtom((wchar_t *)data, len PASS_REGS);
ARG3); pop_text_stack(l);
return Yap_unify(MkAtomTerm(at),ARG3);
case REG_DWORD: case REG_DWORD:
recover_space(k, KeyAt);
recover_space(name, NameAt);
{ {
DWORD *d = (DWORD *)data; DWORD *d = (DWORD *)data;
pop_text_stack(l);
return Yap_unify(MkIntegerTerm((Int)d[0]), ARG3); return Yap_unify(MkIntegerTerm((Int)d[0]), ARG3);
} }
default: default:
recover_space(k, KeyAt); pop_text_stack(l);
recover_space(name, NameAt);
return FALSE; return FALSE;
} }
} }
recover_space(k, KeyAt); pop_text_stack(l);
recover_space(name, NameAt);
return FALSE; return FALSE;
} }

View File

@ -224,7 +224,7 @@ static bool write_term(int output_stream, Term t, xarg *args USES_REGS) {
flags |= AttVar_Dots_f; flags |= AttVar_Dots_f;
} else if (ctl != TermIgnore) { } else if (ctl != TermIgnore) {
Yap_Error( Yap_Error(
DOMAIN_ERROR_OUT_OF_RANGE, ctl, DOMAIN_ERROR_WRITE_OPTION, ctl,
"write attributes should be one of {dots,ignore,portray,write}"); "write attributes should be one of {dots,ignore,portray,write}");
rc = false; rc = false;
goto end; goto end;

View File

@ -107,7 +107,7 @@ extern char *Yap_MemStreamBuf(int sno);
extern X_API Term Yap_StringToTerm(const char *s, size_t len, encoding_t *encp, extern X_API Term Yap_StringToTerm(const char *s, size_t len, encoding_t *encp,
int prio, Term *bindings_p); int prio, Term *bindings_p);
extern Term Yap_StringToNumberTerm(const char *s, encoding_t *encp); extern Term Yap_StringToNumberTerm(const char *s, encoding_t *encp, bool error_on);
extern int Yap_FormatFloat(Float f, char **s, size_t sz); extern int Yap_FormatFloat(Float f, char **s, size_t sz);
extern int Yap_open_buf_read_stream(const char *buf, size_t nchars, extern int Yap_open_buf_read_stream(const char *buf, size_t nchars,
encoding_t *encp, memBufSource src); encoding_t *encp, memBufSource src);

View File

@ -388,7 +388,7 @@ int simpleNamedBDDtoDot(DdManager *manager, namedvars varmap, DdNode *bdd,
perror(filename); perror(filename);
return -1; return -1;
} }
const char *vs = varmap.vars; const char **vs = varmap.vars;
ret = Cudd_DumpDot(manager, 1, f, vs, NULL, fd); ret = Cudd_DumpDot(manager, 1, f, vs, NULL, fd);
fclose(fd); fclose(fd);
return ret; return ret;

View File

@ -586,8 +586,7 @@ static Int c_sqlite3_row(USES_REGS1) {
} else if (res == SQLITE_ROW) { } else if (res == SQLITE_ROW) {
list = arg_list_args; list = arg_list_args;
Term tf; Term tf = 0;
for (i = 0; i < arity; i++) { for (i = 0; i < arity; i++) {
/* convert data types here */ /* convert data types here */
head = HeadOfTerm(list); head = HeadOfTerm(list);

View File

@ -1,25 +1,21 @@
# This is a CMake example for Python and Java # This is a CMake example for Python and Java
INCLUDE(UseJava)
# set(ANDROID_SO_OUTDIR ${libdir})
# set(CMAKE_SWIG_OUTDIR ${CMAKE_SOURCE_DIR}/android/yaplib/build/generated/source/pt/up/yap/lib)
#set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/derived)
set(CMAKE_SWIG_OUTDIR ${YAP_APP_DIR}/app/src/main/java/pt/up/yap/lib )
set ( SWIG_SOURCES ../yap.i )
SET_SOURCE_FILES_PROPERTIES(${SWIG_SOURCES} PROPERTIES CPLUSPLUS ON) SET_SOURCE_FILES_PROPERTIES(${SWIG_SOURCES} PROPERTIES CPLUSPLUS ON)
include_directories ( include_directories (
${CMAKE_SOURCE_DIR}/CXX ${CMAKE_SOURCE_DIR}/CXX
${JAVA_INCLUDE_DIRS}
${JNI_INCLUDE_DIRS}
) )
add_custom_target ( swig ALL
DEPENDS ${SWIG_CXX}
)
add_custom_command (OUTPUT ${SWIG_CXX} add_custom_command (OUTPUT ${SWIG_CXX}
COMMAND ${SWIG} -java -outdir ${CMAKE_CURRENT_BINARY_DIR} -c++ -addextern -I${CMAKE_SOURCE_DIR}/CXX ${SWIG_SOURCES} -o ${SWIG_CXX} COMMAND ${SWIG} -java -outdir ${CMAKE_SWIG_OUTDIR} -c++ -addextern -I${CMAKE_SOURCE_DIR}/CXX -o ${SWIG_CXX}${SWIG_SOURCES}
${SWIG_SOURCES}
) )

View File

@ -165,8 +165,6 @@ current_atom(A) :- % check
atom(A), !. atom(A), !.
current_atom(A) :- % generate current_atom(A) :- % generate
'$current_atom'(A). '$current_atom'(A).
current_atom(A) :- % generate
'$current_wide_atom'(A).
string_concat(Xs,At) :- string_concat(Xs,At) :-
( var(At) -> ( var(At) ->

View File

@ -1,3 +1,4 @@
/************************************************************************* /*************************************************************************
* * * *
* YAP Prolog * * YAP Prolog *
@ -174,7 +175,7 @@ list, since backtracking could not "pass through" the cut.
system_module(_Mod, _SysExps, _Decls). system_module(_Mod, _SysExps, _Decls).
% new_system_module(Mod). % new_system_module(Mod).
use_system_module(Module, _SysExps). use_system_module(_Module, _SysExps).
private(_). private(_).
@ -292,7 +293,8 @@ private(_).
'$early_print_message'(Context, Msg). '$early_print_message'(Context, Msg).
'$bootstrap_predicate'(print_message(Context, Msg), _M, _) :- !, '$bootstrap_predicate'(print_message(Context, Msg), _M, _) :- !,
'$early_print_message'(Context, Msg). '$early_print_message'(Context, Msg).
'$bootstrap_predicate'(prolog_file_type(A,B), _, prolog_file_type(A,B)) :- !, B = prolog. '$bootstrap_predicate'(prolog_file_type(A,prolog), _, _) :- !,
( A = yap ; A = pl ; A = prolog ).
'$bootstrap_predicate'(file_search_path(_A,_B), _, _ ) :- !, fail. '$bootstrap_predicate'(file_search_path(_A,_B), _, _ ) :- !, fail.
'$bootstrap_predicate'(meta_predicate(G), M, _) :- !, '$bootstrap_predicate'(meta_predicate(G), M, _) :- !,
strip_module(M:G, M1, G1), strip_module(M:G, M1, G1),
@ -446,7 +448,6 @@ live :-
W1 is W-1, W1 is W-1,
'$start_orp_threads'(W1). '$start_orp_threads'(W1).
% Start file for yap % Start file for yap
/* I/O predicates */ /* I/O predicates */
@ -1428,7 +1429,7 @@ Command = (H --> B) ->
'$check_head_and_body'(MH, M, H, true, P) :- '$check_head_and_body'(MH, M, H, true, P) :-
'$yap_strip_module'(MH,M,H), '$yap_strip_module'(MH,M,H),
error:is_callable(M:H,P). is_callable(M:H,P).
% term expansion % term expansion
% %
% return two arguments: Expanded0 is the term after "USER" expansion. % return two arguments: Expanded0 is the term after "USER" expansion.
@ -1454,7 +1455,7 @@ Command = (H --> B) ->
'$expand_clause'(InputCl, C1, CO) :- '$expand_clause'(InputCl, C1, CO) :-
source_module(SM), source_module(SM),
'$yap_strip_module'(SM:InputCl, M, ICl), '$yap_strip_clause'(SM:InputCl, M, ICl),
'$expand_a_clause'( M:ICl, SM, C1, CO), '$expand_a_clause'( M:ICl, SM, C1, CO),
!. !.
'$expand_clause'(Cl, Cl, Cl). '$expand_clause'(Cl, Cl, Cl).

View File

@ -29,10 +29,7 @@
dbload_from_stream(R, M0, rdf, term ) :- dbload_from_stream(R, M0, rdf, term ) :-
'$lines_in_file'(R, Lines), '$lines_in_file'(R, Lines),
'$input_lines'(R, Type, Lines), '$input_lines'(R, Type, Lines).
dbload_from_stream(R, M0, Type, Storage ) :-
'$lines_in_file'(R, Lines),
'$input_lines'(R, Type, Lines),
'$input_lines'(R, csv, yeLines ) :- '$input_lines'(R, csv, yeLines ) :-
'$process_lines'(R, Lines, Type ), '$process_lines'(R, Lines, Type ),

View File

@ -138,6 +138,8 @@ system_error(Type,Goal,Culprit) :-
throw(error(permission_error(module,redefined,A),B)). throw(error(permission_error(module,redefined,A),B)).
'$process_error'(error(Msg, Where), _) :- '$process_error'(error(Msg, Where), _) :-
print_message(error,error(Msg, Where)), !. print_message(error,error(Msg, Where)), !.
'$process_error'(error(Msg, Where), _) :-
print_message(error,error(Msg, [g|Where])), !.
'$process_error'(Throw, _) :- '$process_error'(Throw, _) :-
print_message(error,error(unhandled_exception,Throw)). print_message(error,error(unhandled_exception,Throw)).

View File

@ -65,6 +65,34 @@ messages that do not produce output but that can be intercepted by hooks.
The next table shows the main predicates and hooks associated to message The next table shows the main predicates and hooks associated to message
handling in YAP: handling in YAP:
An error record comsists of An ISO compatible descriptor of the format
error(errror_kind(Culprit,..), Info)
In YAP, the infoo field describes:
- what() more detauls on the event
- input_stream, may be ine of;
- loop_sream
- file()
- none
- prolog_source(_) a record containing file, line, predicate, and clause
that activated the goal, or a list therof. YAP tries to search for the user
code generatinng the error.
- c_source(0), a record containing the line of C-code thhat caused the event. This
is reported under systm debugging mode, or if this is user code.
- stream_source() - a record containg data on the the I/O stream datum causisng the evwnt.
- user_message () - ttext on the event.
@{ @{
*/ */
@ -210,11 +238,11 @@ compose_message(Term, Level) -->
main_message( Term, Level, LC), main_message( Term, Level, LC),
[nl,nl]. [nl,nl].
location(error(syntax_error(syntax_error(_,between(_,LN,_),FileName,_)),_), _ , _) --> location(error(syntax_error(_),info(between(_,LN,_), FileName, _)), _ , _) -->
!, !,
[ '~a:~d:0 ' - [FileName,LN] ] . [ '~a:~d:~d ' - [FileName,LN,0] ] .
location(error(style_check(style_check(_,LN,FileName,_ ) ),_), _ , _) --> location(error(style_check(style_check(_,LN,FileName,_ ) ),_), _ , _) -->
% { stream_position_data( line_count, LN) },
!, !,
[ '~a:~d:0 ' - [FileName,LN] ] . [ '~a:~d:0 ' - [FileName,LN] ] .
location( error(_,Term), Level, LC ) --> location( error(_,Term), Level, LC ) -->
@ -231,7 +259,7 @@ location( error(_,Term), Level, LC ) -->
%message(loaded(Past,AbsoluteFileName,user,Msec,Bytes), Prefix, Suffix) :- !, %message(loaded(Past,AbsoluteFileName,user,Msec,Bytes), Prefix, Suffix) :- !,
main_message(error(Msg,Info), _, _) --> {var(Info)}, !, main_message(error(Msg,Info), _, _) --> {var(Info)}, !,
[ ' error: uninstantiated message ~w~n.' - [Msg], nl ]. [ ' error: uninstantiated message ~w~n.' - [Msg], nl ].
main_message( error(syntax_error(syntax_error(Msg,between(L0,LM,LF),_Stream,Term)),_), Level, LC ) --> main_message( error(syntax_error(Msg),info(between(L0,LM,LF),_Stream,Term)), Level, LC ) -->
!, !,
[' ~a: syntax error ~s' - [Level,Msg]], [' ~a: syntax error ~s' - [Level,Msg]],
[nl], [nl],
@ -602,7 +630,7 @@ list_of_preds([P|L]) -->
list_of_preds(L). list_of_preds(L).
syntax_error_term(between(_I,_J,_L),LTaL,LC) --> syntax_error_term(between(_I,_J,_L),LTaL,LC) -->
['error found at line ~d to line ~d' - [_I,_L], nl ], ['term between lines ~d and ~d' - [_I,_L], nl ],
syntax_error_tokens(LTaL, LC). syntax_error_tokens(LTaL, LC).
syntax_error_tokens([], _LC) --> []. syntax_error_tokens([], _LC) --> [].
@ -615,7 +643,7 @@ syntax_error_token(atom(A), _LC) --> !,
syntax_error_token(number(N), _LC) --> !, syntax_error_token(number(N), _LC) --> !,
[ '~w' - [N] ]. [ '~w' - [N] ].
syntax_error_token(var(_,S), _LC) --> !, syntax_error_token(var(_,S), _LC) --> !,
[ '~s' - [S] ]. [ '~a' - [S] ].
syntax_error_token(string(S), _LC) --> !, syntax_error_token(string(S), _LC) --> !,
[ '`~s`' - [S] ]. [ '`~s`' - [S] ].
syntax_error_token(error, _LC) --> !, syntax_error_token(error, _LC) --> !,

View File

@ -284,14 +284,14 @@ meta_predicate declaration
nonvar(G), nonvar(G),
G = (A = B), G = (A = B),
!. !.
'$expand_goals'(\+A,\+A1,(AO-> false;true),HM,SM,BM,HVars) :- !, '$expand_goals'(\+A,\+A1,('$current_choice_point'(CP),AO,'$$cut_by'(CP)-> false;true),HM,SM,BM,HVars) :- !,
'$expand_goals'(A,A1,AO,HM,SM,BM,HVars). '$expand_goals'(A,A1,AO,HM,SM,BM,HVars).
'$expand_goals'(once(A),once(A1), '$expand_goals'(once(A),once(A1),
('$current_choice_point'(CP),AO,'$$cut_by'(CP)),HM,SM,BM,HVars) :- !, ('$current_choice_point'(CP),AO,'$$cut_by'(CP)),HM,SM,BM,HVars) :- !,
'$expand_goals'(A,A1,AO0,HM,SM,BM,HVars), '$expand_goals'(A,A1,AO0,HM,SM,BM,HVars),
'$clean_cuts'(AO0, CP, AO). '$clean_cuts'(AO0, CP, AO).
'$expand_goals'(ignore(A),ignore(A1), '$expand_goals'(ignore(A),ignore(A1),
(AO -> true ; true),HM,SM,BM,HVars) :- !, ('$current_choice_point'(CP),AO,'$$cut_by'(CP)-> true ; true),HM,SM,BM,HVars) :- !,
'$expand_goals'(A,A1,AO0,HM,SM,BM,HVars), '$expand_goals'(A,A1,AO0,HM,SM,BM,HVars),
'$clean_cuts'(AO0, AO). '$clean_cuts'(AO0, AO).
'$expand_goals'(forall(A,B),forall(A1,B1), '$expand_goals'(forall(A,B),forall(A1,B1),
@ -299,7 +299,7 @@ meta_predicate declaration
'$expand_goals'(A,A1,AO0,HM,SM,BM,HVars), '$expand_goals'(A,A1,AO0,HM,SM,BM,HVars),
'$expand_goals'(B,B1,BO,HM,SM,BM,HVars), '$expand_goals'(B,B1,BO,HM,SM,BM,HVars),
'$clean_cuts'(AO0, AO). '$clean_cuts'(AO0, AO).
'$expand_goals'(not(A),not(A1),(AO -> fail; true),HM,SM,BM,HVars) :- !, '$expand_goals'(not(A),not(A1),('$current_choice_point'(CP),AO,'$$cut_by'(CP) -> fail; true),HM,SM,BM,HVars) :- !,
'$expand_goals'(A,A1,AO,HM,SM,BM,HVars). '$expand_goals'(A,A1,AO,HM,SM,BM,HVars).
'$expand_goals'(if(A,B,C),if(A1,B1,C1), '$expand_goals'(if(A,B,C),if(A1,B1,C1),
('$current_choicepoint'(DCP),AO,yap_hacks:cut_at(DCP),BO; CO),HM,SM,BM,HVars) :- !, ('$current_choicepoint'(DCP),AO,yap_hacks:cut_at(DCP),BO; CO),HM,SM,BM,HVars) :- !,

View File

@ -338,8 +338,8 @@ system_module(Mod) :-
'$pred_exists'(Pred, Mod), '$pred_exists'(Pred, Mod),
!. !.
'$continue_imported'(FM,Mod,FPred,Pred) :- '$continue_imported'(FM,Mod,FPred,Pred) :-
recorded('$import','$import'(IM,Mod,IPred,Pred,_,_),_), !, recorded('$import','$import'(IM,Mod,IPred,Pred,_,_),_),
'$continue_imported'(FM, IM, FPred, IPred). '$continue_imported'(FM, IM, FPred, IPred), !.
'$continue_imported'(FM,Mod,FPred,Pred) :- '$continue_imported'(FM,Mod,FPred,Pred) :-
prolog:'$parent_module'(Mod,IM), prolog:'$parent_module'(Mod,IM),
'$continue_imported'(FM, IM, FPred, Pred). '$continue_imported'(FM, IM, FPred, Pred).

View File

@ -51,6 +51,7 @@ assert(Clause) :-
'$assert'(Clause, assertz, _). '$assert'(Clause, assertz, _).
'$assert'(Clause, Where, R) :- '$assert'(Clause, Where, R) :-
'$yap_strip_clause'(Clause, _, _Clause0),
'$expand_clause'(Clause,C0,C), '$expand_clause'(Clause,C0,C),
'$$compile'(C, Where, C0, R). '$$compile'(C, Where, C0, R).

View File

@ -192,7 +192,7 @@ order of dispatch.
'$hacks':'$stack_dump', '$hacks':'$stack_dump',
'$execute0'(G,M). '$execute0'(G,M).
'$do_signal'(sig_fpe,G) :- '$do_signal'(sig_fpe,G) :-
'$signal_handler'(sig_fpe, G) '$signal_handler'(sig_fpe, G).
'$do_signal'(sig_alarm, G) :- '$do_signal'(sig_alarm, G) :-
'$signal_handler'(sig_alarm, G). '$signal_handler'(sig_alarm, G).
'$do_signal'(sig_vtalarm, G) :- '$do_signal'(sig_vtalarm, G) :-