@anchor integer_1_op
- If _X_ evaluates to a float, the integer between the value of _X_ and 0 closest to the value of _X_, else if _X_ evaluates to an
+ If _X_ evaluates to a float, the integer between the value of _X_ and 0 closest to the value of _X_, else if _X_ evaluates to an
integer, the value of _X_.
- float( _X_) [ISO]
@anchor float_1_op
@@ -178,7 +178,7 @@ A = 3602879701896397 rdiv 36028797018963968
Convert the expression _X_ to a rational number or integer. The function is
similar to [rational/1](@ref rational_1), but the result is only accurate within the
rounding error of floating point numbers, generally producing a much
- smaller denominator.
+ smaller denominator.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~prolog
?- A is rationalize(0.25).
@@ -298,24 +298,24 @@ get_float(Term t) {
#else
static
double my_rint(double x)
-{
- double y, z;
- Int n;
-
- if (x >= 0) {
- y = x + 0.5;
- z = floor(y);
- n = (Int) z;
+{
+ double y, z;
+ Int n;
+
+ if (x >= 0) {
+ y = x + 0.5;
+ z = floor(y);
+ n = (Int) z;
if (y == z && n % 2)
- return(z-1);
- } else {
- y = x - 0.5;
- z = ceil(y);
- n = (Int) z;
+ return(z-1);
+ } else {
+ y = x - 0.5;
+ z = ceil(y);
+ n = (Int) z;
if (y == z && n % 2)
- return(z+1);
+ return(z+1);
}
- return(z);
+ return(z);
}
#endif
@@ -326,7 +326,7 @@ msb(Int inp USES_REGS) /* calculate the most significant bit for an integer */
Int out = 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);
}
@@ -363,7 +363,7 @@ lsb(Int inp USES_REGS) /* calculate the least significant bit for an integer */
Int out = 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);
}
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);
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);
}
if (inp==0)
@@ -412,7 +412,7 @@ eval1(Int fi, Term t USES_REGS) {
{
#ifdef USE_GMP
Int i = IntegerOfTerm(t);
-
+
if (i == Int_MIN) {
return Yap_gmp_neg_int(i);
}
@@ -434,7 +434,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e:
RINT(~IntegerOfTerm(t));
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:
#ifdef USE_GMP
return Yap_gmp_unot_big(t);
@@ -450,7 +450,7 @@ eval1(Int fi, Term t USES_REGS) {
if (dbl >= 0) {
RFLOAT(log(dbl));
} 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:
@@ -459,7 +459,7 @@ eval1(Int fi, Term t USES_REGS) {
if (dbl >= 0) {
RFLOAT(log10(dbl));
} 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:
@@ -468,7 +468,7 @@ eval1(Int fi, Term t USES_REGS) {
out = sqrt(dbl);
#if HAVE_ISNAN
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
RFLOAT(out);
@@ -517,7 +517,7 @@ eval1(Int fi, Term t USES_REGS) {
out = asin(dbl);
#if HAVE_ISNAN
if (isnan(out)) {
- return Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "asin(%f)", dbl);
+ Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "asin(%f)", dbl);
}
#endif
RFLOAT(out);
@@ -530,7 +530,7 @@ eval1(Int fi, Term t USES_REGS) {
out = acos(dbl);
#if HAVE_ISNAN
if (isnan(out)) {
- return Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "acos(%f)", dbl);
+ Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t, "acos(%f)", dbl);
}
#endif
RFLOAT(out);
@@ -543,7 +543,7 @@ eval1(Int fi, Term t USES_REGS) {
out = atan(dbl);
#if HAVE_ISNAN
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
RFLOAT(out);
@@ -556,7 +556,7 @@ eval1(Int fi, Term t USES_REGS) {
out = asinh(dbl);
#if HAVE_ISNAN
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
RFLOAT(out);
@@ -569,7 +569,7 @@ eval1(Int fi, Term t USES_REGS) {
out = acosh(dbl);
#if HAVE_ISNAN
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
RFLOAT(out);
@@ -582,7 +582,7 @@ eval1(Int fi, Term t USES_REGS) {
out = atanh(dbl);
#if HAVE_ISNAN
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
RFLOAT(out);
@@ -645,12 +645,12 @@ eval1(Int fi, Term t USES_REGS) {
}
#if HAVE_ISNAN
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
#if HAVE_ISINF
if (isinf(dbl)) {
- return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\
+ Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\
(%f)",dbl);
}
#endif
@@ -674,12 +674,12 @@ eval1(Int fi, Term t USES_REGS) {
}
#if HAVE_ISNAN
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
#if HAVE_ISINF
if (isinf(dbl)) {
- return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\
+ Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\
(%f)",dbl);
}
#endif
@@ -704,12 +704,12 @@ eval1(Int fi, Term t USES_REGS) {
}
#if HAVE_ISNAN
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
#if HAVE_ISINF
if (isinf(dbl)) {
- return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\
+ Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, MkFloatTerm(dbl), "integer\
(%f)",dbl);
}
#endif
@@ -734,18 +734,18 @@ eval1(Int fi, Term t USES_REGS) {
}
#if HAVE_ISNAN
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
#if HAVE_ISINF
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
if (dbl < 0.0)
RBIG_FL(ceil(dbl));
else
- RBIG_FL(floor(dbl));
+ RBIG_FL(floor(dbl));
}
case op_float:
switch (ETypeOfTerm(t)) {
@@ -804,7 +804,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e:
RINT(msb(IntegerOfTerm(t) PASS_REGS));
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:
#ifdef USE_GMP
return Yap_gmp_msb(t);
@@ -817,7 +817,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e:
RINT(lsb(IntegerOfTerm(t) PASS_REGS));
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:
#ifdef USE_GMP
return Yap_gmp_lsb(t);
@@ -830,7 +830,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e:
RINT(popcount(IntegerOfTerm(t) PASS_REGS));
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:
#ifdef USE_GMP
return Yap_gmp_popcount(t);
@@ -842,7 +842,7 @@ eval1(Int fi, Term t USES_REGS) {
switch (ETypeOfTerm(t)) {
case long_int_e:
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 {
RFLOAT(0.0);
}
@@ -863,7 +863,7 @@ eval1(Int fi, Term t USES_REGS) {
case op_fintp:
switch (ETypeOfTerm(t)) {
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:
RFLOAT(rint(FloatOfTerm(t)));
break;
@@ -901,7 +901,7 @@ eval1(Int fi, Term t USES_REGS) {
case long_int_e:
RINT(Yap_random()*IntegerOfTerm(t));
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:
#ifdef USE_GMP
return Yap_gmp_mul_float_big(Yap_random(), t);
@@ -967,7 +967,7 @@ Yap_NameOfUnaryOp(int i)
return Yap_LookupAtom(InitUnTab[i].OpName);
}
-static Int
+static Int
p_unary_is( USES_REGS1 )
{ /* X is Y */
Term t = Deref(ARG2);
@@ -1017,7 +1017,7 @@ p_unary_is( USES_REGS1 )
return(FALSE);
}
-static Int
+static Int
p_unary_op_as_integer( USES_REGS1 )
{ /* X is Y */
Term t = Deref(ARG1);
@@ -1075,4 +1075,3 @@ Yap_ReInitUnaryExps(void)
{
return TRUE;
}
-
diff --git a/C/arith2.c b/C/arith2.c
index 4551bf8da..ddce481a5 100644
--- a/C/arith2.c
+++ b/C/arith2.c
@@ -150,7 +150,7 @@ p_mod(Term t1, Term t2 USES_REGS) {
Int mod;
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) {
return MkIntTerm(0);
}
@@ -160,7 +160,7 @@ p_mod(Term t1, Term t2 USES_REGS) {
RINT(mod);
}
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:
#ifdef USE_GMP
return Yap_gmp_mod_int_big(IntegerOfTerm(t1), t2);
@@ -170,7 +170,7 @@ p_mod(Term t1, Term t2 USES_REGS) {
break;
}
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:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
@@ -180,14 +180,14 @@ p_mod(Term t1, Term t2 USES_REGS) {
Int i2 = IntegerOfTerm(t2);
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);
}
case (CELL)big_int_e:
/* two bignums */
return Yap_gmp_mod_big_big(t1, t2);
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "mod/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "mod/2");
default:
RERROR();
}
@@ -210,12 +210,12 @@ p_div2(Term t1, Term t2 USES_REGS) {
Int res, mod;
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) {
#ifdef USE_GMP
return Yap_gmp_add_ints(Int_MAX, 1);
#else
- return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, t1,
+ Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, t1,
"// /2 with %d and %d", i1, i2);
#endif
}
@@ -226,7 +226,7 @@ p_div2(Term t1, Term t2 USES_REGS) {
RINT(res);
}
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:
#ifdef USE_GMP
return Yap_gmp_div_int_big(IntegerOfTerm(t1), t2);
@@ -236,7 +236,7 @@ p_div2(Term t1, Term t2 USES_REGS) {
break;
}
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:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
@@ -246,14 +246,14 @@ p_div2(Term t1, Term t2 USES_REGS) {
Int i2 = IntegerOfTerm(t2);
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);
}
case (CELL)big_int_e:
/* two bignums */
return Yap_gmp_div2_big_big(t1, t2);
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "div/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "div/2");
default:
RERROR();
}
@@ -275,14 +275,14 @@ p_rem(Term t1, Term t2 USES_REGS) {
Int i2 = IntegerOfTerm(t2);
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) {
return MkIntTerm(0);
}
RINT(i1%i2);
}
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:
#ifdef USE_GMP
return Yap_gmp_rem_int_big(IntegerOfTerm(t1), t2);
@@ -292,19 +292,19 @@ p_rem(Term t1, Term t2 USES_REGS) {
}
break;
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:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
case long_int_e:
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));
case (CELL)big_int_e:
/* two bignums */
return Yap_gmp_rem_big_big(t1, t2);
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rem/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rem/2");
default:
RERROR();
}
@@ -320,7 +320,7 @@ p_rdiv(Term t1, Term t2 USES_REGS) {
#ifdef USE_GMP
switch (ETypeOfTerm(t1)) {
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:
switch (ETypeOfTerm(t2)) {
case (CELL)long_int_e:
@@ -330,7 +330,7 @@ p_rdiv(Term t1, Term t2 USES_REGS) {
Int i2 = IntegerOfTerm(t2);
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);
}
case (CELL)big_int_e:
@@ -344,13 +344,13 @@ p_rdiv(Term t1, Term t2 USES_REGS) {
switch (ETypeOfTerm(t2)) {
case long_int_e:
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: */
return Yap_gmq_rdiv_big_int(t1, IntegerOfTerm(t2));
case (CELL)big_int_e:
return Yap_gmq_rdiv_big_big(t1, t2);
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rdiv/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "rdiv/2");
default:
RERROR();
}
@@ -449,7 +449,7 @@ p_xor(Term t1, Term t2 USES_REGS)
/* two integers */
RINT(IntegerOfTerm(t1) ^ IntegerOfTerm(t2));
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "#/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "#/2");
case big_int_e:
#ifdef USE_GMP
return Yap_gmp_xor_int_big(IntegerOfTerm(t1), t2);
@@ -459,7 +459,7 @@ p_xor(Term t1, Term t2 USES_REGS)
}
break;
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "#/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t1, "#/2");
case big_int_e:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
@@ -468,7 +468,7 @@ p_xor(Term t1, Term t2 USES_REGS)
case big_int_e:
return Yap_gmp_xor_big_big(t1, t2);
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "#/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "#/2");
default:
RERROR();
}
@@ -690,7 +690,7 @@ p_exp(Term t1, Term t2 USES_REGS)
Int pow;
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);
}
pow = ipow(i1,i2);
@@ -836,7 +836,7 @@ p_gcd(Term t1, Term t2 USES_REGS)
RINT(gcd(i1,i2 PASS_REGS));
}
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2");
case big_int_e:
#ifdef USE_GMP
return Yap_gmp_gcd_int_big(IntegerOfTerm(t1), t2);
@@ -846,7 +846,7 @@ p_gcd(Term t1, Term t2 USES_REGS)
}
break;
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "gcd/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t1, "gcd/2");
case big_int_e:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
@@ -855,7 +855,7 @@ p_gcd(Term t1, Term t2 USES_REGS)
case big_int_e:
return Yap_gmp_gcd_big_big(t1, t2);
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "gcd/2");
default:
RERROR();
}
diff --git a/C/atomic.c b/C/atomic.c
index cfe1c099c..3dc5f90e3 100644
--- a/C/atomic.c
+++ b/C/atomic.c
@@ -68,6 +68,22 @@ static Int hide_atom(USES_REGS1);
static Int hidden_atom(USES_REGS1);
static Int unhide_atom(USES_REGS1);
+#define ReleaseAndReturn(r) \
+ { \
+ pop_text_stack(l); \
+ return r; \
+ }
+#define release_cut_fail() \
+ { \
+ pop_text_stack(l); \
+ cut_fail(); \
+ }
+#define release_cut_succeed() \
+ { \
+ pop_text_stack(l); \
+ cut_succeed(); \
+ }
+
static int AlreadyHidden(unsigned char *name) {
AtomEntry *chain;
@@ -78,8 +94,8 @@ static int AlreadyHidden(unsigned char *name) {
strcmp((char *)chain->StrOfAE, (char *)name) != 0)
chain = RepAtom(chain->NextOfAE);
if (EndOfPAEntr(chain))
- return (FALSE);
- return (TRUE);
+ return false;
+ return true;
}
/** @pred hide_atom(+ _Atom_)
@@ -230,15 +246,15 @@ static Int char_code(USES_REGS1) {
return (FALSE);
}
if (code > MAX_ISO_LATIN1) {
- wchar_t wcodes[2];
+ unsigned char codes[10];
if (code > CHARCODE_MAX) {
Yap_Error(REPRESENTATION_ERROR_INT, t1, "char_code/2");
return (FALSE);
}
- wcodes[0] = code;
- wcodes[1] = '\0';
- tout = MkAtomTerm(Yap_LookupWideAtom(wcodes));
+ size_t n = put_utf8(codes, code);
+ codes[n] = code;
+ tout = MkAtomTerm(Yap_ULookupAtom(codes));
} else {
char codes[2];
@@ -254,24 +270,14 @@ static Int char_code(USES_REGS1) {
} else {
Atom at = AtomOfTerm(t0);
Term tf;
-
- if (IsWideAtom(at)) {
- wchar_t *c = RepAtom(at)->WStrOfAE;
-
- if (c[1] != '\0') {
- Yap_Error(TYPE_ERROR_CHARACTER, t0, "char_code/2");
- return FALSE;
- }
- tf = MkIntegerTerm(c[0]);
- } else {
- unsigned char *c = RepAtom(at)->UStrOfAE;
-
- if (c[1] != '\0') {
- Yap_Error(TYPE_ERROR_CHARACTER, t0, "char_code/2");
- return FALSE;
- }
- tf = MkIntTerm((unsigned char)(c[0]));
+ unsigned char *c = RepAtom(at)->UStrOfAE;
+ int32_t v;
+ c += get_utf8(c, 1, &v);
+ if (c[0] != '\0') {
+ Yap_Error(TYPE_ERROR_CHARACTER, t0, "char_code/2");
+ return FALSE;
}
+ tf = MkIntTerm(v);
return Yap_unify(ARG2, tf);
}
}
@@ -280,50 +286,62 @@ static Int name(USES_REGS1) { /* name(?Atomic,?String) */
Term t = Deref(ARG2), NewT, AtomNameT = Deref(ARG1);
LOCAL_MAX_SIZE = 1024;
+ int l = push_text_stack();
restart_aux:
if (Yap_IsGroundTerm(AtomNameT)) {
if (!IsVarTerm(t) && !IsPairTerm(t) && t != TermNil) {
Yap_Error(TYPE_ERROR_LIST, ARG2, "name/2");
- return FALSE;
+ pop_text_stack(l);
+ ReleaseAndReturn(FALSE);
}
// verify if an atom, int, float or bi§gnnum
NewT = Yap_AtomicToListOfCodes(AtomNameT PASS_REGS);
- if (NewT)
- return Yap_unify(NewT, ARG2);
+ if (NewT) {
+ pop_text_stack(l);
+ ReleaseAndReturn(Yap_unify(NewT, ARG2));
+ }
// else
} else if (IsVarTerm(t)) {
Yap_Error(INSTANTIATION_ERROR, t, "name/2");
+ pop_text_stack(l);
return FALSE;
} else {
Term at = Yap_ListToAtomic(t PASS_REGS);
- if (at)
- return Yap_unify(at, ARG1);
+ if (at) {
+ pop_text_stack(l);
+ ReleaseAndReturn(Yap_unify(at, ARG1));
+ }
}
if (LOCAL_Error_TYPE && Yap_HandleError("atom/2")) {
AtomNameT = Deref(ARG1);
t = Deref(ARG2);
goto restart_aux;
}
- return FALSE;
+ pop_text_stack(l);
+ ReleaseAndReturn(FALSE);
}
static Int string_to_atomic(
USES_REGS1) { /* string_to_atom(?String,?Atom) */
Term t2 = Deref(ARG2), t1 = Deref(ARG1);
LOCAL_MAX_SIZE = 1024;
-
+ int l = push_text_stack();
restart_aux:
if (IsStringTerm(t1)) {
Term t;
// verify if an atom, int, float or bignnum
t = Yap_StringToAtomic(t1 PASS_REGS);
- if (t != 0L)
- return Yap_unify(t, t2);
+ if (t != 0L) {
+ pop_text_stack(l);
+ ReleaseAndReturn(Yap_unify(t, t2));
+ }
// else
} else if (IsVarTerm(t1)) {
Term t0 = Yap_AtomicToString(t2 PASS_REGS);
- if (t0)
- return Yap_unify(t0, t1);
+ if (t0) {
+ pop_text_stack(l);
+ ReleaseAndReturn(Yap_unify(t0, t1));
+ }
} else {
LOCAL_Error_TYPE = TYPE_ERROR_STRING;
}
@@ -332,26 +350,32 @@ restart_aux:
t2 = Deref(ARG2);
goto restart_aux;
}
- return FALSE;
+ pop_text_stack(l);
+ ReleaseAndReturn(FALSE);
}
static Int string_to_atom(
USES_REGS1) { /* string_to_atom(?String,?Atom) */
Term t2 = Deref(ARG2), t1 = Deref(ARG1);
LOCAL_MAX_SIZE = 1024;
+ int l = push_text_stack();
restart_aux:
if (IsStringTerm(t1)) {
Atom at;
// verify if an atom, int, float or bignnum
at = Yap_StringSWIToAtom(t1 PASS_REGS);
- if (at)
- return Yap_unify(MkAtomTerm(at), t2);
+ if (at) {
+ pop_text_stack(l);
+ ReleaseAndReturn(Yap_unify(MkAtomTerm(at), t2));
+ }
// else
} else if (IsVarTerm(t1)) {
Term t0 = Yap_AtomSWIToString(t2 PASS_REGS);
- if (t0)
- return Yap_unify(t0, t1);
+ if (t0) {
+ pop_text_stack(l);
+ ReleaseAndReturn(Yap_unify(t0, t1));
+ }
} else {
LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
}
@@ -360,21 +384,26 @@ restart_aux:
t2 = Deref(ARG2);
goto restart_aux;
}
- return FALSE;
+ pop_text_stack(l);
+ ReleaseAndReturn(FALSE);
}
static Int string_to_list(USES_REGS1) {
Term list = Deref(ARG2), string = Deref(ARG1);
LOCAL_MAX_SIZE = 1024;
+ int l = push_text_stack();
restart_aux:
if (IsVarTerm(string)) {
Term t1 = Yap_ListToString(list PASS_REGS);
- if (t1)
- return Yap_unify(ARG1, t1);
+ if (t1) {
+ pop_text_stack(l);
+ ReleaseAndReturn(Yap_unify(ARG1, t1));
+ }
} else if (IsStringTerm(string)) {
Term tf = Yap_StringToListOfCodes(string PASS_REGS);
- return Yap_unify(ARG2, tf);
+ pop_text_stack(l);
+ ReleaseAndReturn(Yap_unify(ARG2, tf));
} else {
LOCAL_Error_TYPE = TYPE_ERROR_STRING;
}
@@ -383,12 +412,14 @@ restart_aux:
list = Deref(ARG2);
goto restart_aux;
}
- return FALSE;
+ pop_text_stack(l);
+ ReleaseAndReturn(FALSE);
}
static Int atom_string(USES_REGS1) {
Term t1 = Deref(ARG1), t2 = Deref(ARG2);
LOCAL_MAX_SIZE = 1024;
+ int l = push_text_stack();
restart_aux:
if (IsVarTerm(t1)) {
@@ -396,12 +427,12 @@ restart_aux:
// verify if an atom, int, float or bignnum
at = Yap_StringSWIToAtom(t2 PASS_REGS);
if (at)
- return Yap_unify(MkAtomTerm(at), t1);
+ ReleaseAndReturn(Yap_unify(MkAtomTerm(at), t1));
// else
} else if (IsAtomTerm(t1)) {
Term t0 = Yap_AtomSWIToString(t1 PASS_REGS);
if (t0)
- return Yap_unify(t0, t2);
+ ReleaseAndReturn(Yap_unify(t0, t2));
} else {
LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
}
@@ -410,25 +441,26 @@ restart_aux:
t2 = Deref(ARG2);
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int atom_chars(USES_REGS1) {
Term t1;
LOCAL_MAX_SIZE = 1024;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
if (IsAtomTerm(t1)) {
Term tf = Yap_AtomSWIToListOfAtoms(t1 PASS_REGS);
if (tf)
- return Yap_unify(ARG2, tf);
+ ReleaseAndReturn(Yap_unify(ARG2, tf));
} else if (IsVarTerm(t1)) {
/* ARG1 unbound */
Term t = Deref(ARG2);
Atom af = Yap_ListOfAtomsToAtom(t PASS_REGS);
if (af)
- return Yap_unify(ARG1, MkAtomTerm(af));
+ ReleaseAndReturn(Yap_unify(ARG1, MkAtomTerm(af)));
/* error handling */
} else {
LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
@@ -436,24 +468,24 @@ restart_aux:
if (LOCAL_Error_TYPE && Yap_HandleError("atom_chars/2")) {
goto restart_aux;
}
- return false;
+ ReleaseAndReturn(false);
}
static Int atom_codes(USES_REGS1) {
Term t1;
t1 = Deref(ARG1);
- LOCAL_Error_TYPE = 0;
+ int l = push_text_stack();
restart_aux:
if (IsAtomTerm(t1)) {
Term tf = Yap_AtomToListOfCodes(t1 PASS_REGS);
if (tf)
- return Yap_unify(ARG2, tf);
+ ReleaseAndReturn(Yap_unify(ARG2, tf));
} else if (IsVarTerm(t1)) {
/* ARG1 unbound */
Term t = Deref(ARG2);
Atom af = Yap_ListToAtom(t PASS_REGS);
if (af)
- return Yap_unify(ARG1, MkAtomTerm(af));
+ ReleaseAndReturn(Yap_unify(ARG1, MkAtomTerm(af)));
} else if (IsVarTerm(t1)) {
LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
}
@@ -462,23 +494,24 @@ restart_aux:
t1 = Deref(ARG1);
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int string_codes(USES_REGS1) {
Term t1;
t1 = Deref(ARG1);
+ int l = push_text_stack();
restart_aux:
if (IsStringTerm(t1)) {
Term tf = Yap_StringSWIToListOfCodes(t1 PASS_REGS);
if (tf)
- return Yap_unify(ARG2, tf);
+ ReleaseAndReturn(Yap_unify(ARG2, tf));
} else if (IsVarTerm(t1)) {
/* ARG1 unbound */
Term t = Deref(ARG2);
Term tf = Yap_ListSWIToString(t PASS_REGS);
if (tf)
- return Yap_unify(ARG1, tf);
+ ReleaseAndReturn(Yap_unify(ARG1, tf));
} else {
LOCAL_Error_TYPE = TYPE_ERROR_STRING;
}
@@ -487,23 +520,24 @@ restart_aux:
t1 = Deref(ARG1);
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int string_chars(USES_REGS1) {
Term t1;
t1 = Deref(ARG1);
+ int l = push_text_stack();
restart_aux:
if (IsStringTerm(t1)) {
Term tf = Yap_StringSWIToListOfAtoms(t1 PASS_REGS);
if (tf)
- return Yap_unify(ARG2, tf);
+ ReleaseAndReturn(Yap_unify(ARG2, tf));
} else if (IsVarTerm(t1)) {
/* ARG1 unbound */
Term t = Deref(ARG2);
Term tf = Yap_ListSWIToString(t PASS_REGS);
if (tf)
- return Yap_unify(ARG1, tf);
+ ReleaseAndReturn(Yap_unify(ARG1, tf));
} else {
LOCAL_Error_TYPE = TYPE_ERROR_STRING;
}
@@ -512,7 +546,7 @@ restart_aux:
t1 = Deref(ARG1);
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
/** @pred number_chars(? _I_,? _L_) is iso
@@ -525,22 +559,28 @@ characters of the external representation of _I_.
*/
static Int number_chars(USES_REGS1) {
Term t1;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
if (IsNumTerm(t1)) {
- Term tf;
- tf = Yap_NumberToListOfAtoms(t1 PASS_REGS);
- if (tf) {
- LOCAL_Error_TYPE = YAP_NO_ERROR;
- return Yap_unify(ARG2, tf);
+ Term t2 = Deref(ARG2);
+ if (IsVarTerm(t2)) {
+ t1 = Yap_NumberToListOfAtoms(t1 PASS_REGS);
+ }
+ if (t1) {
+ ReleaseAndReturn(Yap_unify(t1, t2));
+ } else {
+ t2 = Yap_ListToNumber(t2 PASS_REGS);
+ if (t2) {
+ ReleaseAndReturn(Yap_unify(t1, t2));
+ }
}
} else if (IsVarTerm(t1)) {
/* ARG1 unbound */
Term t = Deref(ARG2);
Term tf = Yap_ListToNumber(t PASS_REGS);
if (tf) {
- LOCAL_Error_TYPE = YAP_NO_ERROR;
- return Yap_unify(ARG1, tf);
+ ReleaseAndReturn(Yap_unify(ARG1, tf));
}
} else if (IsVarTerm(t1)) {
LOCAL_Error_TYPE = TYPE_ERROR_NUMBER;
@@ -549,48 +589,59 @@ restart_aux:
if (LOCAL_Error_TYPE && Yap_HandleError("number_chars/2")) {
goto restart_aux;
}
- return false;
+ ReleaseAndReturn(false);
}
static Int number_atom(USES_REGS1) {
Term t1;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
if (IsNumTerm(t1)) {
+ Term t2 = Deref(ARG2);
Atom af;
af = Yap_NumberToAtom(t1 PASS_REGS);
- if (af)
- return Yap_unify(ARG2, MkAtomTerm(af));
+ if (af) {
+ if (IsVarTerm(t2)) {
+
+ ReleaseAndReturn(Yap_unify(t1, t2));
+ } else {
+ t2 = Yap_AtomToNumber(t2 PASS_REGS);
+ if (t2) {
+ ReleaseAndReturn(Yap_unify(t1, t2));
+ }
+ }
+ }
} else if (IsVarTerm(t1)) {
/* ARG1 unbound */
Term t = Deref(ARG2);
Term tf = Yap_AtomToNumber(t PASS_REGS);
- if (tf)
- return Yap_unify(ARG1, tf);
+ ReleaseAndReturn(Yap_unify(ARG1, tf));
} else if (IsVarTerm(t1)) {
LOCAL_Error_TYPE = TYPE_ERROR_NUMBER;
} /* error handling */
if (LOCAL_Error_TYPE && Yap_HandleError("number_atom/2")) {
goto restart_aux;
}
- return false;
+ ReleaseAndReturn(false);
}
static Int number_string(USES_REGS1) {
Term t1;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
if (IsNumTerm(t1)) {
Term tf;
tf = Yap_NumberToString(t1 PASS_REGS);
if (tf)
- return Yap_unify(ARG2, tf);
+ ReleaseAndReturn(Yap_unify(ARG2, tf));
} else if (IsVarTerm(t1)) {
/* ARG1 unbound */
Term t = Deref(ARG2);
Term tf = Yap_StringToNumber(t PASS_REGS);
if (tf)
- return Yap_unify(ARG1, tf);
+ ReleaseAndReturn(Yap_unify(ARG1, tf));
} else {
LOCAL_Error_TYPE = TYPE_ERROR_NUMBER;
}
@@ -598,24 +649,25 @@ restart_aux:
if (LOCAL_Error_TYPE && Yap_HandleError("number_string/2")) {
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int number_codes(USES_REGS1) {
Term t1;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
if (IsNumTerm(t1)) {
Term tf;
tf = Yap_NumberToListOfCodes(t1 PASS_REGS);
if (tf)
- return Yap_unify(ARG2, tf);
+ ReleaseAndReturn(Yap_unify(ARG2, tf));
} else if (IsVarTerm(t1)) {
/* ARG1 unbound */
Term t = Deref(ARG2);
Term tf = Yap_ListToNumber(t PASS_REGS);
if (tf)
- return Yap_unify(ARG1, tf);
+ ReleaseAndReturn(Yap_unify(ARG1, tf));
} else {
LOCAL_Error_TYPE = TYPE_ERROR_NUMBER;
}
@@ -623,39 +675,41 @@ restart_aux:
if (LOCAL_Error_TYPE && Yap_HandleError("number_codes/2")) {
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int cont_atom_concat3(USES_REGS1) {
Term t3;
Atom ats[2];
Int i, max;
+ int l = push_text_stack();
restart_aux:
t3 = Deref(ARG3);
i = IntOfTerm(EXTRA_CBACK_ARG(3, 1));
max = IntOfTerm(EXTRA_CBACK_ARG(3, 2));
EXTRA_CBACK_ARG(3, 1) = MkIntTerm(i + 1);
- if (!Yap_SpliceAtom(t3, ats, i, max PASS_REGS) && LOCAL_Error_TYPE ==
- YAP_NO_ERROR) {
- cut_fail();
+ if (!Yap_SpliceAtom(t3, ats, i, max PASS_REGS) &&
+ LOCAL_Error_TYPE == YAP_NO_ERROR) {
+ release_cut_fail();
} else {
- if (i < max)
- return Yap_unify(ARG1, MkAtomTerm(ats[0])) &&
- Yap_unify(ARG2, MkAtomTerm(ats[1]));
+ if (i < max) {
+ ReleaseAndReturn(Yap_unify(ARG1, MkAtomTerm(ats[0])) &&
+ Yap_unify(ARG2, MkAtomTerm(ats[1])));
+ }
if (Yap_unify(ARG1, MkAtomTerm(ats[0])) &&
Yap_unify(ARG2, MkAtomTerm(ats[1])))
- cut_succeed();
- cut_fail();
+ release_cut_succeed();
+ release_cut_fail();
}
/* Error handling */
if (LOCAL_Error_TYPE) {
if (Yap_HandleError("atom_concat/3")) {
goto restart_aux;
} else {
- return false;
+ ReleaseAndReturn(false);
}
}
- cut_fail();
+ release_cut_fail();
}
static Int atom_concat3(USES_REGS1) {
@@ -663,13 +717,14 @@ static Int atom_concat3(USES_REGS1) {
Term t2, t3, ot;
Atom at;
bool g1, g2, g3;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
t2 = Deref(ARG2);
t3 = Deref(ARG3);
- g1 = Yap_IsGroundTerm(t1);
- g2 = Yap_IsGroundTerm(t2);
- g3 = Yap_IsGroundTerm(t3);
+ g1 = Yap_IsGroundTerm(t1);
+ g2 = Yap_IsGroundTerm(t2);
+ g3 = Yap_IsGroundTerm(t3);
if (g1 && g2) {
at = Yap_ConcatAtoms(t1, t2 PASS_REGS);
ot = ARG3;
@@ -678,34 +733,34 @@ restart_aux:
ot = ARG2;
} else if (g2 && g3) {
at = Yap_SubtractTailAtom(t3, t2 PASS_REGS);
- ot = ARG1;
+ ot = ARG1;
} else if (g3) {
EXTRA_CBACK_ARG(3, 1) = MkIntTerm(0);
EXTRA_CBACK_ARG(3, 2) = MkIntTerm(Yap_AtomToLength(t3 PASS_REGS));
- return cont_atom_concat3(PASS_REGS1);
+ ReleaseAndReturn(cont_atom_concat3(PASS_REGS1));
} else {
- LOCAL_Error_TYPE = INSTANTIATION_ERROR;
- LOCAL_Error_Term = t1;
- at = NULL;
+ LOCAL_Error_TYPE = INSTANTIATION_ERROR;
+ at = NULL;
}
+ pop_text_stack(l);
if (at) {
- if (Yap_unify(ot, MkAtomTerm(at)))
- cut_succeed();
- else
- cut_fail();
+ if (Yap_unify(ot, MkAtomTerm(at))) {
+ release_cut_succeed();
+ } else {
+ release_cut_fail();
+ }
}
/* Error handling */
if (LOCAL_Error_TYPE) {
if (Yap_HandleError("atom_concat/3")) {
goto restart_aux;
} else {
- return false;
+ ReleaseAndReturn(false);
}
}
- cut_fail();
+ release_cut_fail();
}
-
#define CastToNumeric(x) CastToNumeric__(x PASS_REGS)
static Term CastToNumeric__(Atom at USES_REGS) {
@@ -719,31 +774,32 @@ static Int cont_atomic_concat3(USES_REGS1) {
Term t3;
Atom ats[2];
size_t i, max;
+ int l = push_text_stack();
restart_aux:
t3 = Deref(ARG3);
i = IntOfTerm(EXTRA_CBACK_ARG(3, 1));
max = IntOfTerm(EXTRA_CBACK_ARG(3, 2));
EXTRA_CBACK_ARG(3, 1) = MkIntTerm(i + 1);
if (!Yap_SpliceAtom(t3, ats, i, max PASS_REGS)) {
- cut_fail();
+ release_cut_fail();
} else {
Term t1 = CastToNumeric(ats[0]);
Term t2 = CastToNumeric(ats[1]);
if (i < max)
- return Yap_unify(ARG1, t1) && Yap_unify(ARG2, t2);
+ ReleaseAndReturn(Yap_unify(ARG1, t1) && Yap_unify(ARG2, t2));
if (Yap_unify(ARG1, t1) && Yap_unify(ARG2, t2))
- cut_succeed();
- cut_fail();
+ release_cut_succeed();
+ release_cut_fail();
}
/* Error handling */
if (LOCAL_Error_TYPE) {
if (Yap_HandleError("string_concat/3")) {
goto restart_aux;
} else {
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
}
- cut_fail();
+ release_cut_fail();
}
static Int atomic_concat3(USES_REGS1) {
@@ -751,13 +807,14 @@ static Int atomic_concat3(USES_REGS1) {
Term t2, t3, ot;
Atom at = NULL;
bool g1, g2, g3;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
t2 = Deref(ARG2);
t3 = Deref(ARG3);
- g1 = Yap_IsGroundTerm(t1);
- g2 = Yap_IsGroundTerm(t2);
- g3 = Yap_IsGroundTerm(t3);
+ g1 = Yap_IsGroundTerm(t1);
+ g2 = Yap_IsGroundTerm(t2);
+ g3 = Yap_IsGroundTerm(t3);
if (g1 && g2) {
at = Yap_ConcatAtomics(t1, t2 PASS_REGS);
ot = ARG3;
@@ -766,21 +823,21 @@ restart_aux:
ot = ARG2;
} else if (g2 && g3) {
at = Yap_SubtractTailAtom(t3, t2 PASS_REGS);
- ot = ARG1;
+ ot = ARG1;
} else if (g3) {
EXTRA_CBACK_ARG(3, 1) = MkIntTerm(0);
EXTRA_CBACK_ARG(3, 2) = MkIntTerm(Yap_AtomicToLength(t3 PASS_REGS));
return cont_atomic_concat3(PASS_REGS1);
} else {
- LOCAL_Error_TYPE = INSTANTIATION_ERROR;
- LOCAL_Error_Term = t1;
- at = NULL;
+ LOCAL_Error_TYPE = INSTANTIATION_ERROR;
+ at = NULL;
}
if (at) {
- if (Yap_unify(ot, MkAtomTerm(at)))
- cut_succeed();
- else
- cut_fail();
+ if (Yap_unify(ot, MkAtomTerm(at))) {
+ release_cut_succeed();
+ } else {
+ release_cut_fail();
+ }
}
/* Error handling */
if (LOCAL_Error_TYPE) {
@@ -790,26 +847,27 @@ restart_aux:
return false;
}
}
- cut_fail();
+ release_cut_fail();
}
static Int cont_string_concat3(USES_REGS1) {
Term t3;
Term ts[2];
size_t i, max;
+ int l = push_text_stack();
restart_aux:
t3 = Deref(ARG3);
i = IntOfTerm(EXTRA_CBACK_ARG(3, 1));
max = IntOfTerm(EXTRA_CBACK_ARG(3, 2));
EXTRA_CBACK_ARG(3, 1) = MkIntTerm(i + 1);
if (!Yap_SpliceString(t3, ts, i, max PASS_REGS)) {
- cut_fail();
+ release_cut_fail();
} else {
if (i < max)
return Yap_unify(ARG1, ts[0]) && Yap_unify(ARG2, ts[1]);
if (Yap_unify(ARG1, ts[0]) && Yap_unify(ARG2, ts[1]))
- cut_succeed();
- cut_fail();
+ release_cut_succeed();
+ release_cut_fail();
}
/* Error handling */
if (LOCAL_Error_TYPE) {
@@ -819,7 +877,7 @@ restart_aux:
return FALSE;
}
}
- cut_fail();
+ release_cut_fail();
}
static Int string_concat3(USES_REGS1) {
@@ -827,14 +885,14 @@ static Int string_concat3(USES_REGS1) {
Term t2, t3, ot;
Term tf = 0;
bool g1, g2, g3;
- Atom at;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
t2 = Deref(ARG2);
t3 = Deref(ARG3);
- g1 = Yap_IsGroundTerm(t1);
- g2 = Yap_IsGroundTerm(t2);
- g3 = Yap_IsGroundTerm(t3);
+ g1 = Yap_IsGroundTerm(t1);
+ g2 = Yap_IsGroundTerm(t2);
+ g3 = Yap_IsGroundTerm(t3);
if (g1 && g2) {
tf = Yap_ConcatStrings(t1, t2 PASS_REGS);
ot = ARG3;
@@ -843,31 +901,30 @@ restart_aux:
ot = ARG2;
} else if (g2 && g3) {
tf = Yap_SubtractTailString(t3, t2 PASS_REGS);
- ot = ARG1;
+ ot = ARG1;
} else if (g3) {
EXTRA_CBACK_ARG(3, 1) = MkIntTerm(0);
EXTRA_CBACK_ARG(3, 2) = MkIntTerm(Yap_StringToLength(t3 PASS_REGS));
return cont_string_concat3(PASS_REGS1);
} else {
- LOCAL_Error_TYPE = INSTANTIATION_ERROR;
- LOCAL_Error_Term = t1;
- at = NULL;
+ LOCAL_Error_TYPE = INSTANTIATION_ERROR;
}
if (tf) {
- if (Yap_unify(ot, tf))
- cut_succeed();
- else
- cut_fail();
+ if (Yap_unify(ot, tf)) {
+ release_cut_succeed();
+ } else {
+ release_cut_fail();
+ }
}
/* Error handling */
if (LOCAL_Error_TYPE) {
if (Yap_HandleError("atom_concat/3")) {
goto restart_aux;
} else {
- return false;
+ ReleaseAndReturn(false);
}
}
- cut_fail();
+ release_cut_fail();
}
static Int cont_string_code3(USES_REGS1) {
@@ -876,6 +933,7 @@ static Int cont_string_code3(USES_REGS1) {
utf8proc_int32_t chr;
const unsigned char *s;
const unsigned char *s0;
+ int l = push_text_stack();
restart_aux:
t2 = Deref(ARG2);
s0 = UStringOfTerm(t2);
@@ -887,37 +945,38 @@ restart_aux:
if (s[0]) {
EXTRA_CBACK_ARG(3, 1) = MkIntTerm(s - s0);
EXTRA_CBACK_ARG(3, 2) = MkIntTerm(j + 1);
- return Yap_unify(MkIntegerTerm(chr), ARG3) &&
- Yap_unify(MkIntegerTerm(j + 1), ARG1);
+ ReleaseAndReturn(Yap_unify(MkIntegerTerm(chr), ARG3) &&
+ Yap_unify(MkIntegerTerm(j + 1), ARG1));
+ }
+ if (Yap_unify(MkIntegerTerm(chr), ARG3) &&
+ Yap_unify(MkIntegerTerm(j), ARG1)) {
+ release_cut_succeed();
+ } else {
+ release_cut_fail();
}
- if (Yap_unify(MkIntegerTerm(chr), ARG3) && Yap_unify(MkIntegerTerm(j), ARG1))
- cut_succeed();
- else
- cut_fail();
/* Error handling */
if (LOCAL_Error_TYPE) {
if (Yap_HandleError("string_code/3")) {
goto restart_aux;
} else {
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
}
- cut_fail();
+ release_cut_fail();
}
static Int string_code3(USES_REGS1) {
Term t1;
Term t2;
const unsigned char *s;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
t2 = Deref(ARG2);
if (IsVarTerm(t2)) {
LOCAL_Error_TYPE = INSTANTIATION_ERROR;
- LOCAL_Error_Term = t2;
} else if (!IsStringTerm(t2)) {
LOCAL_Error_TYPE = TYPE_ERROR_STRING;
- LOCAL_Error_Term = t2;
} else {
s = UStringOfTerm(t2);
t1 = Deref(ARG1);
@@ -927,7 +986,6 @@ restart_aux:
return cont_string_code3(PASS_REGS1);
} else if (!IsIntegerTerm(t1)) {
LOCAL_Error_TYPE = TYPE_ERROR_INTEGER;
- LOCAL_Error_Term = t1;
} else {
const unsigned char *ns = s;
utf8proc_int32_t chr;
@@ -935,20 +993,19 @@ restart_aux:
if (indx <= 0) {
if (indx < 0) {
LOCAL_Error_TYPE = DOMAIN_ERROR_NOT_LESS_THAN_ZERO;
- LOCAL_Error_Term = t1;
}
- cut_fail();
+ release_cut_fail();
}
ns = skip_utf8(s, indx);
if (ns == NULL) {
- cut_fail(); // silently fail?
+ release_cut_fail(); // silently fail?
}
get_utf8(ns, -1, &chr);
if (chr == '\0')
- cut_fail();
+ release_cut_fail();
if (Yap_unify(ARG3, MkIntegerTerm(chr)))
- cut_succeed();
- cut_fail();
+ release_cut_succeed();
+ release_cut_fail();
}
}
/* Error handling */
@@ -956,34 +1013,32 @@ restart_aux:
if (Yap_HandleError("string_code/3")) {
goto restart_aux;
} else {
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
}
- cut_fail();
+ release_cut_fail();
}
static Int get_string_code3(USES_REGS1) {
Term t1;
Term t2;
const unsigned char *s;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
t2 = Deref(ARG2);
if (IsVarTerm(t2)) {
LOCAL_Error_TYPE = INSTANTIATION_ERROR;
- LOCAL_Error_Term = t2;
} else if (!IsStringTerm(t2)) {
LOCAL_Error_TYPE = TYPE_ERROR_STRING;
- LOCAL_Error_Term = t2;
} else {
s = UStringOfTerm(t2);
t1 = Deref(ARG1);
if (IsVarTerm(t1)) {
LOCAL_Error_TYPE = INSTANTIATION_ERROR;
- LOCAL_Error_Term = t1;
+
} else if (!IsIntegerTerm(t1)) {
LOCAL_Error_TYPE = TYPE_ERROR_INTEGER;
- LOCAL_Error_Term = t1;
} else {
const unsigned char *ns = s;
utf8proc_int32_t chr;
@@ -992,22 +1047,21 @@ restart_aux:
if (indx <= 0) {
if (indx < 0) {
LOCAL_Error_TYPE = DOMAIN_ERROR_NOT_LESS_THAN_ZERO;
- LOCAL_Error_Term = t1;
} else {
- return false;
+ ReleaseAndReturn(false);
}
} else {
indx -= 1;
ns = skip_utf8(ns, indx);
if (ns == NULL) {
- return false;
+ ReleaseAndReturn(false);
} else {
get_utf8(ns, -1, &chr);
if (chr != '\0')
- return Yap_unify(ARG3, MkIntegerTerm(chr));
+ ReleaseAndReturn(Yap_unify(ARG3, MkIntegerTerm(chr)));
}
}
- return FALSE; // replace by error code
+ ReleaseAndReturn(FALSE); // replace by error cod )e
}
}
/* Error handling */
@@ -1015,16 +1069,17 @@ restart_aux:
if (Yap_HandleError("string_code/3")) {
goto restart_aux;
} else {
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
}
- cut_fail();
+ release_cut_fail();
}
static Int atom_concat2(USES_REGS1) {
Term t1;
Term *tailp;
Int n;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
n = Yap_SkipList(&t1, &tailp);
@@ -1055,7 +1110,7 @@ restart_aux:
free(inpv);
at = out.val.a;
if (at)
- return Yap_unify(ARG2, MkAtomTerm(at));
+ ReleaseAndReturn(Yap_unify(ARG2, MkAtomTerm(at)));
}
error:
/* Error handling */
@@ -1063,16 +1118,17 @@ error:
if (Yap_HandleError("atom_concat/2")) {
goto restart_aux;
} else {
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
}
- cut_fail();
+ release_cut_fail();
}
static Int string_concat2(USES_REGS1) {
Term t1;
Term *tailp;
Int n;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
n = Yap_SkipList(&t1, &tailp);
@@ -1101,7 +1157,7 @@ restart_aux:
}
free(inpv);
if (out.val.t)
- return Yap_unify(ARG2, out.val.t);
+ ReleaseAndReturn(Yap_unify(ARG2, out.val.t));
}
error:
/* Error handling */
@@ -1109,16 +1165,17 @@ error:
if (Yap_HandleError("string_code/3")) {
goto restart_aux;
} else {
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
}
- cut_fail();
+ release_cut_fail();
}
static Int atomic_concat2(USES_REGS1) {
Term t1;
Term *tailp;
Int n;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
n = Yap_SkipList(&t1, &tailp);
@@ -1130,7 +1187,7 @@ restart_aux:
Atom at;
if (n == 1)
- return Yap_unify(ARG2, HeadOfTerm(t1));
+ ReleaseAndReturn(Yap_unify(ARG2, HeadOfTerm(t1)));
if (!inpv) {
LOCAL_Error_TYPE = RESOURCE_ERROR_HEAP;
free(inpv);
@@ -1153,7 +1210,7 @@ restart_aux:
free(inpv);
at = out.val.a;
if (at)
- return Yap_unify(ARG2, MkAtomTerm(at));
+ ReleaseAndReturn(Yap_unify(ARG2, MkAtomTerm(at)));
}
error:
/* Error handling */
@@ -1167,6 +1224,7 @@ static Int atomics_to_string2(USES_REGS1) {
Term t1;
Term *tailp;
Int n;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
n = Yap_SkipList(&t1, &tailp);
@@ -1198,20 +1256,21 @@ restart_aux:
free(inpv);
at = out.val.a;
if (at)
- return Yap_unify(ARG2, MkAtomTerm(at));
+ ReleaseAndReturn(Yap_unify(ARG2, MkAtomTerm(at)));
}
error:
/* Error handling */
if (LOCAL_Error_TYPE && Yap_HandleError("atomics_to_string/2")) {
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int atomics_to_string3(USES_REGS1) {
Term t1, t2;
Term *tailp;
Int n;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
t2 = Deref(ARG2);
@@ -1248,14 +1307,14 @@ restart_aux:
free(inpv);
at = out.val.a;
if (at)
- return Yap_unify(ARG3, MkAtomTerm(at));
+ ReleaseAndReturn(Yap_unify(ARG3, MkAtomTerm(at)));
}
error:
/* Error handling */
if (LOCAL_Error_TYPE && Yap_HandleError("atomics_to_string/3")) {
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int atom_length(USES_REGS1) {
@@ -1263,33 +1322,34 @@ static Int atom_length(USES_REGS1) {
Term t2 = Deref(ARG2);
size_t len;
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return (FALSE);
+ ReleaseAndReturn(FALSE);
} else if (!IsAtomTerm(t1)) {
Yap_Error(TYPE_ERROR_ATOM, t1, "at first argument");
- return (FALSE);
+ ReleaseAndReturn(FALSE);
}
if (Yap_IsGroundTerm(t2)) {
if (!IsIntegerTerm(t2)) {
Yap_Error(TYPE_ERROR_INTEGER, t2, "atom_length/2");
- return (FALSE);
+ ReleaseAndReturn(FALSE);
} else if ((Int)(len = IntegerOfTerm(t2)) < 0) {
Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t2, "atom_length/2");
- return (FALSE);
+ ReleaseAndReturn(FALSE);
}
}
restart_aux:
len = Yap_AtomicToLength(t1 PASS_REGS);
if (len != (size_t)-1)
- return Yap_unify(ARG2, MkIntegerTerm(len));
+ ReleaseAndReturn(Yap_unify(ARG2, MkIntegerTerm(len)));
/* error handling */
if (LOCAL_Error_TYPE && Yap_HandleError("atom_length/2")) {
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int atomic_length(USES_REGS1) {
@@ -1297,30 +1357,31 @@ static Int atomic_length(USES_REGS1) {
Term t2 = Deref(ARG2);
size_t len;
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return (FALSE);
+ ReleaseAndReturn(FALSE);
}
if (IsNonVarTerm(t2)) {
if (!IsIntegerTerm(t2)) {
Yap_Error(TYPE_ERROR_INTEGER, t2, "atom_length/2");
- return (FALSE);
+ ReleaseAndReturn(FALSE);
} else if ((Int)(len = IntegerOfTerm(t2)) < 0) {
Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t2, "atom_length/2");
- return (FALSE);
+ ReleaseAndReturn(FALSE);
}
}
restart_aux:
len = Yap_AtomicToLength(t1 PASS_REGS);
if (len != (size_t)-1)
- return Yap_unify(ARG2, MkIntegerTerm(len));
+ ReleaseAndReturn(Yap_unify(ARG2, MkIntegerTerm(len)));
/* error handling */
if (LOCAL_Error_TYPE && Yap_HandleError("atomic_length/2")) {
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int string_length(USES_REGS1) {
@@ -1328,27 +1389,28 @@ static Int string_length(USES_REGS1) {
Term t2 = Deref(ARG2);
size_t len;
+ int l = push_text_stack();
if (Yap_IsGroundTerm(t2)) {
if (!IsIntegerTerm(t2)) {
Yap_Error(TYPE_ERROR_INTEGER, t2, "string_length/2");
- return (FALSE);
+ ReleaseAndReturn(FALSE);
}
if (FALSE && (Int)(len = IntegerOfTerm(t2)) < 0) {
Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t2, "string_length/2");
- return (FALSE);
+ ReleaseAndReturn(FALSE);
}
}
restart_aux:
t1 = Deref(ARG1);
len = Yap_AtomicToLength(t1 PASS_REGS);
if (len != (size_t)-1)
- return Yap_unify(ARG2, MkIntegerTerm(len));
+ ReleaseAndReturn(Yap_unify(ARG2, MkIntegerTerm(len)));
/* error handling */
if (LOCAL_Error_TYPE && Yap_HandleError("string_length/2")) {
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
/** @pred downcase_text_to_atom(+Text, -Atom)
@@ -1361,15 +1423,16 @@ static Int downcase_text_to_atom(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return false;
+ ReleaseAndReturn(false);
}
if (IsNonVarTerm(t2)) {
if (!IsAtomTerm(t2)) {
Yap_Error(TYPE_ERROR_ATOM, t2, "at second argument");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
}
while (true) {
@@ -1377,11 +1440,11 @@ static Int downcase_text_to_atom(USES_REGS1) {
if (at == NULL) {
if (LOCAL_Error_TYPE && Yap_HandleError("downcase_text_to_atom/2"))
continue;
- return false;
+ ReleaseAndReturn(false);
}
- return Yap_unify(MkAtomTerm(at), t2);
+ ReleaseAndReturn(Yap_unify(MkAtomTerm(at), t2));
}
- return false;
+ ReleaseAndReturn(false);
}
/** @pred upcase_text_to_atom(+Text, -Atom)
@@ -1394,15 +1457,16 @@ static Int upcase_text_to_atom(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return false;
+ ReleaseAndReturn(false);
}
if (IsNonVarTerm(t2)) {
if (!IsAtomTerm(t2)) {
Yap_Error(TYPE_ERROR_ATOM, t2, "at second argument");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
}
while (true) {
@@ -1410,11 +1474,11 @@ static Int upcase_text_to_atom(USES_REGS1) {
if (at == NULL) {
if (LOCAL_Error_TYPE && Yap_HandleError("upcase_text_to_atom/2"))
continue;
- return false;
+ ReleaseAndReturn(false);
}
- return Yap_unify(MkAtomTerm(at), t2);
+ ReleaseAndReturn(Yap_unify(MkAtomTerm(at), t2));
}
- return false;
+ ReleaseAndReturn(false);
}
/** @pred downcase_text_to_string(+Text, -String)
@@ -1427,15 +1491,16 @@ static Int downcase_text_to_string(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return false;
+ ReleaseAndReturn(false);
}
if (IsNonVarTerm(t2)) {
if (!IsStringTerm(t2)) {
Yap_Error(TYPE_ERROR_STRING, t2, "at second argument");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
}
while (true) {
@@ -1443,11 +1508,11 @@ static Int downcase_text_to_string(USES_REGS1) {
if (t == TermZERO) {
if (LOCAL_Error_TYPE && Yap_HandleError("downcase_text_to_string/2"))
continue;
- return false;
+ ReleaseAndReturn(false);
}
- return Yap_unify(t, t2);
+ ReleaseAndReturn(Yap_unify(t, t2));
}
- return false;
+ ReleaseAndReturn(false);
}
/** @pred upcase_text_to_string(+Text, -String)
@@ -1460,15 +1525,16 @@ static Int upcase_text_to_string(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return false;
+ ReleaseAndReturn(false);
}
if (IsNonVarTerm(t2)) {
if (!IsStringTerm(t2)) {
Yap_Error(TYPE_ERROR_STRING, t2, "at second argument");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
}
while (true) {
@@ -1476,11 +1542,11 @@ static Int upcase_text_to_string(USES_REGS1) {
if (t == TermZERO) {
if (LOCAL_Error_TYPE && Yap_HandleError("upcase_text_to_string/2"))
continue;
- return false;
+ ReleaseAndReturn(false);
}
- return Yap_unify(t, t2);
+ ReleaseAndReturn(Yap_unify(t, t2));
}
- return false;
+ ReleaseAndReturn(false);
}
/** @pred downcase_text_to_codes(+Text, -Codes)
@@ -1493,15 +1559,16 @@ static Int downcase_text_to_codes(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return false;
+ ReleaseAndReturn(false);
}
if (IsNonVarTerm(t2)) {
if (!Yap_IsListTerm(t2)) {
Yap_Error(TYPE_ERROR_LIST, t2, "at second argument");
- return false;
+ ReleaseAndReturn(false);
}
}
while (true) {
@@ -1509,11 +1576,11 @@ static Int downcase_text_to_codes(USES_REGS1) {
if (t == TermZERO) {
if (LOCAL_Error_TYPE && Yap_HandleError("downcase_text_to_codes/2"))
continue;
- return false;
+ ReleaseAndReturn(false);
}
- return Yap_unify(t, t2);
+ ReleaseAndReturn(Yap_unify(t, t2));
}
- return false;
+ ReleaseAndReturn(false);
}
/** @pred upcase_text_to_codes(+Text, -Codes)
@@ -1526,15 +1593,16 @@ static Int upcase_text_to_codes(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return false;
+ ReleaseAndReturn(false);
}
if (IsNonVarTerm(t2)) {
if (!Yap_IsListTerm(t2)) {
Yap_Error(TYPE_ERROR_LIST, t2, "at second argument");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
}
while (true) {
@@ -1542,11 +1610,11 @@ static Int upcase_text_to_codes(USES_REGS1) {
if (t == TermZERO) {
if (LOCAL_Error_TYPE && Yap_HandleError("upcase_text_to_codes/2"))
continue;
- return false;
+ ReleaseAndReturn(false);
}
- return Yap_unify(t, t2);
+ ReleaseAndReturn(Yap_unify(t, t2));
}
- return false;
+ ReleaseAndReturn(false);
}
/** @pred downcase_text_to_chars(+Text, -Chars)
@@ -1559,15 +1627,16 @@ static Int downcase_text_to_chars(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return false;
+ ReleaseAndReturn(false);
}
if (IsNonVarTerm(t2)) {
if (!Yap_IsListTerm(t2)) {
Yap_Error(TYPE_ERROR_LIST, t2, "at second argument");
- return false;
+ ReleaseAndReturn(false);
}
}
while (true) {
@@ -1575,11 +1644,11 @@ static Int downcase_text_to_chars(USES_REGS1) {
if (t == TermZERO) {
if (LOCAL_Error_TYPE && Yap_HandleError("downcase_text_to_to_chars/2"))
continue;
- return false;
+ ReleaseAndReturn(false);
}
- return Yap_unify(t, t2);
+ ReleaseAndReturn(Yap_unify(t, t2));
}
- return false;
+ ReleaseAndReturn(false);
}
/** @pred upcase_text_to_chars(+Text, -Chars)
@@ -1592,15 +1661,16 @@ static Int upcase_text_to_chars(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
+ int l = push_text_stack();
if (!Yap_IsGroundTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "at first argument");
- return false;
+ ReleaseAndReturn(false);
}
if (IsNonVarTerm(t2)) {
if (!Yap_IsListTerm(t2)) {
Yap_Error(TYPE_ERROR_LIST, t2, "at second argument");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
}
while (true) {
@@ -1608,21 +1678,11 @@ static Int upcase_text_to_chars(USES_REGS1) {
if (t == TermZERO) {
if (LOCAL_Error_TYPE && Yap_HandleError("upcase_text_to_chars/2"))
continue;
- return false;
+ ReleaseAndReturn(false);
}
- return Yap_unify(t, t2);
+ ReleaseAndReturn(Yap_unify(t, t2));
}
- return false;
-}
-
-static int is_wide(wchar_t *s) {
- wchar_t ch;
-
- while ((ch = *s++)) {
- if (ch > MAX_ISO_LATIN1)
- return TRUE;
- }
- return FALSE;
+ ReleaseAndReturn(false);
}
/* split an atom into two sub-atoms */
@@ -1630,457 +1690,262 @@ static Int atom_split(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
size_t len;
- int i;
Term to1, to2;
Atom at;
+ int l = push_text_stack();
if (IsVarTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "$atom_split/4");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
if (!IsAtomTerm(t1)) {
Yap_Error(TYPE_ERROR_ATOM, t1, "$atom_split/4");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
if (IsVarTerm(t2)) {
Yap_Error(INSTANTIATION_ERROR, t2, "$atom_split/4");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
if (!IsIntTerm(t2)) {
Yap_Error(TYPE_ERROR_INTEGER, t2, "$atom_split/4");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
if ((Int)(len = IntOfTerm(t2)) < 0) {
Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t2, "$atom_split/4");
- return (FALSE);
+ ReleaseAndReturn((FALSE));
}
at = AtomOfTerm(t1);
- if (IsWideAtom(at)) {
- wchar_t *ws, *ws1 = (wchar_t *)HR;
- unsigned char *s1 = (unsigned char *)HR;
- size_t wlen;
-
- ws = (wchar_t *)RepAtom(at)->StrOfAE;
- wlen = wcslen(ws);
- if (len > wlen)
- return FALSE;
- if (s1 + len > (unsigned char *)LCL0 - 1024)
- Yap_Error(RESOURCE_ERROR_STACK, t1, "$atom_split/4");
- for (i = 0; i < len; i++) {
- if (ws[i] > MAX_ISO_LATIN1) {
- break;
- }
- s1[i] = ws[i];
- }
- if (ws1[i] > MAX_ISO_LATIN1) {
- /* first sequence is wide */
- if (ws1 + len > (wchar_t *)ASP - 1024)
- Yap_Error(RESOURCE_ERROR_STACK, t1, "$atom_split/4");
- ws = (wchar_t *)RepAtom(at)->StrOfAE;
- for (i = 0; i < len; i++) {
- ws1[i] = ws[i];
- }
- ws1[len] = '\0';
- to1 = MkAtomTerm(Yap_LookupWideAtom(ws1));
- /* we don't know if the rest of the string is wide or not */
- if (is_wide(ws + len)) {
- to2 = MkAtomTerm(Yap_LookupWideAtom(ws + len));
- } else {
- char *s2 = (char *)HR;
- if (s2 + (wlen - len) > (char *)ASP - 1024)
- Yap_Error(RESOURCE_ERROR_STACK, t1, "$atom_split/4");
- ws += len;
- while ((*s2++ = *ws++))
- ;
- to2 = MkAtomTerm(Yap_LookupAtom((char *)HR));
- }
- } else {
- s1[len] = '\0';
- to1 = MkAtomTerm(Yap_ULookupAtom(s1));
- /* second atom must be wide, if first wasn't */
- to2 = MkAtomTerm(Yap_LookupWideAtom(ws + len));
- }
- } else {
- unsigned char *s, *s1 = (unsigned char *)HR;
-
- s = RepAtom(at)->UStrOfAE;
- if (len > (Int)strlen((char *)s))
- return (FALSE);
- if (s1 + len > (unsigned char *)ASP - 1024)
- Yap_Error(RESOURCE_ERROR_STACK, t1, "$atom_split/4");
- for (i = 0; i < len; i++) {
- s1[i] = s[i];
- }
- s1[len] = '\0';
- to1 = MkAtomTerm(Yap_ULookupAtom(s1));
- to2 = MkAtomTerm(Yap_ULookupAtom(s + len));
+ unsigned char *s, *s1, *s10;
+ s = RepAtom(at)->UStrOfAE;
+ if (len > (Int)strlen_utf8(s))
+ ReleaseAndReturn((FALSE));
+ s1 = s10 = Malloc(len);
+ if (s1 + len > (unsigned char *)ASP - 1024)
+ Yap_Error(RESOURCE_ERROR_STACK, t1, "$atom_split/4");
+ size_t j;
+ for (j = 0; j < len; j++) {
+ int32_t val;
+ s += get_utf8(s, 1, &val);
+ s1 += put_utf8(s, val);
}
- return (Yap_unify_constant(ARG3, to1) && Yap_unify_constant(ARG4, to2));
+ s1[0] = '\0';
+ to1 = MkAtomTerm(Yap_ULookupAtom(s10));
+ to2 = MkAtomTerm(Yap_ULookupAtom(s));
+ ReleaseAndReturn(
+ (Yap_unify_constant(ARG3, to1) && Yap_unify_constant(ARG4, to2)));
}
static Int atom_number(USES_REGS1) {
Term t1;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
if (Yap_IsGroundTerm(t1)) {
Term tf = Yap_AtomToNumber(t1 PASS_REGS);
if (tf)
- return Yap_unify(ARG2, tf);
+ ReleaseAndReturn(Yap_unify(ARG2, tf));
} else {
/* ARG1 unbound */
Term t = Deref(ARG2);
Atom af = Yap_NumberToAtom(t PASS_REGS);
if (af)
- return Yap_unify(ARG1, MkAtomTerm(af));
+ ReleaseAndReturn(Yap_unify(ARG1, MkAtomTerm(af)));
}
/* error handling */
if (LOCAL_Error_TYPE && Yap_HandleError("atom_number/2")) {
t1 = Deref(ARG1);
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
static Int string_number(USES_REGS1) {
Term t1;
+ int l = push_text_stack();
restart_aux:
t1 = Deref(ARG1);
if (Yap_IsGroundTerm(t1)) {
Term tf = Yap_StringToNumber(t1 PASS_REGS);
if (tf)
- return Yap_unify(ARG2, tf);
+ ReleaseAndReturn(Yap_unify(ARG2, tf));
} else {
/* ARG1 unbound */
Term t = Deref(ARG2);
Term tf = Yap_NumberToString(t PASS_REGS);
if (tf)
- return Yap_unify(ARG1, tf);
+ ReleaseAndReturn(Yap_unify(ARG1, tf));
}
/* error handling */
if (LOCAL_Error_TYPE && Yap_HandleError("string_number/2")) {
t1 = Deref(ARG1);
goto restart_aux;
}
- return FALSE;
+ ReleaseAndReturn(FALSE);
}
#define SUB_ATOM_HAS_MIN 1
#define SUB_ATOM_HAS_SIZE 2
#define SUB_ATOM_HAS_AFTER 4
#define SUB_ATOM_HAS_VAL 8
-#define SUB_ATOM_HAS_WIDE 16
+#define SUB_ATOM_HAS_ATOM 16
#define SUB_ATOM_HAS_UTF8 32
-static void *alloc_tmp_stack(size_t sz USES_REGS) {
- void *pt = (void *)HR;
- while (HR > ASP - (1044 + sz / sizeof(CELL))) {
- if (!Yap_gc(5, ENV, gc_P(P, CP))) {
- Yap_Error(RESOURCE_ERROR_STACK, TermNil, "sub_atom/5");
- return (NULL);
- }
- }
- return pt;
-}
-
static Term build_new_atomic(int mask, wchar_t *wp, const unsigned char *p,
- size_t min, size_t len USES_REGS) {
- Atom nat;
- if (mask & SUB_ATOM_HAS_WIDE) {
- wchar_t *src = wp + min;
- wchar_t *d = alloc_tmp_stack((len + 1) * sizeof(wchar_t) PASS_REGS);
- if (!d)
- return NIL;
-
- wcsncpy(d, src, len);
- d[len] = '\0';
- nat = Yap_LookupMaybeWideAtom(d);
- if (nat)
- return MkAtomTerm(nat);
- } else if (!(mask & SUB_ATOM_HAS_UTF8)) {
- const unsigned char *src = p + min;
- unsigned char *d = alloc_tmp_stack((len + 1) * sizeof(char) PASS_REGS);
- if (!d)
- return NIL;
-
- strncpy((char *)d, (char *)src, len);
- d[len] = '\0';
- nat = Yap_ULookupAtom(d);
- if (nat)
- return MkAtomTerm(nat);
+ size_t minv, size_t len USES_REGS) {
+ int n;
+ seq_tv_t outv[5], inp;
+ size_t cuts[3];
+ if (minv) {
+ cuts[0] = minv;
+ cuts[1] = minv + len;
+ cuts[2] = 0;
+ outv[0].type = 0;
+ n = 1;
} else {
- const unsigned char *src = p;
- unsigned char *buf;
- Term t = init_tstring(PASS_REGS1);
- src = skip_utf8((unsigned char *)src, min);
- const unsigned char *cp = src;
-
- LOCAL_TERM_ERROR(t, 4 * (len + 1));
- buf = buf_from_tstring(HR);
- while (len) {
- utf8proc_int32_t chr;
- cp += get_utf8((unsigned char *)cp, -1, &chr);
- buf += put_utf8((unsigned char *)buf, chr);
- len--;
- }
- *buf++ = '\0';
-
- close_tstring(buf PASS_REGS);
- return t;
+ cuts[0] = minv + len;
+ cuts[1] = 0;
+ n = 0;
}
- return 0L;
-}
-
-static Int wcsstrcmp(wchar_t *p, char *p2, size_t len) {
- while (len--) {
- Int d = *p++ - *p2++;
- if (d)
- return d;
- }
- return 0;
-}
-
-static int check_sub_atom_at(int min, Atom at, Atom nat) {
- if (IsWideAtom(nat)) {
- wchar_t *p1, *p2;
- wchar_t c1;
- if (!IsWideAtom(at))
- return FALSE;
- p1 = RepAtom(at)->WStrOfAE + min;
- p2 = RepAtom(nat)->WStrOfAE;
- while ((c1 = *p1++) == *p2++ && c1)
- ;
- return c1 == 0;
+ inp.type = YAP_STRING_CHARS;
+ inp.enc = ENC_ISO_UTF8;
+ inp.val.uc0 = p;
+ outv[n + 1].type = 0;
+ if (mask & SUB_ATOM_HAS_ATOM) {
+ outv[n].type = YAP_STRING_ATOM;
} else {
- if (IsWideAtom(at)) {
- wchar_t *p1;
- unsigned char *p2;
- wchar_t c1;
- p1 = RepAtom(at)->WStrOfAE + min;
- p2 = RepAtom(nat)->UStrOfAE;
- while ((c1 = *p1++) == *p2++ && c1)
- ;
- return c1 == 0;
- } else {
- unsigned char *p1, *p2;
- char c1;
- p1 = RepAtom(at)->UStrOfAE + min;
- p2 = RepAtom(nat)->UStrOfAE;
- while ((c1 = *p1++) == *p2++ && c1)
- ;
- return c1 == 0;
- }
+ outv[n].type = YAP_STRING_STRING;
+ outv[n].val.c = Malloc(512);
}
+ int lvl = push_text_stack(PASS_REGS1);
+ bool rc = Yap_Splice_Text(2 + n, cuts, &inp, outv PASS_REGS);
+ pop_text_stack(lvl);
+ if (!rc)
+ return (false);
+ if (mask & SUB_ATOM_HAS_ATOM)
+ return (MkAtomTerm(outv[n].val.a));
+ return (outv[n].val.t);
}
-static int check_sub_string_at(int min, const unsigned char *p1,
- const unsigned char *p2, size_t len) {
- p1 = skip_utf8((unsigned char *)p1, min);
+static int check_sub_atom_at(int minv, Atom at, Atom nat, size_t len) {
+ const unsigned char *p1;
+ const unsigned char *p2 = RepAtom(nat)->UStrOfAE;
+ p1 = skip_utf8(RepAtom(at)->UStrOfAE, minv);
return cmpn_utf8(p1, p2, len) == 0;
}
-static int check_sub_atom_bef(int max, Atom at, Atom nat) {
- if (IsWideAtom(nat)) {
- wchar_t *p1, *p2;
- wchar_t c1;
-
- size_t len = wcslen(RepAtom(nat)->WStrOfAE);
- int min = max - len;
- if (min < 0)
- return FALSE;
- if (!IsWideAtom(at))
- return FALSE;
- p1 = RepAtom(at)->WStrOfAE + min;
- p2 = RepAtom(nat)->WStrOfAE;
- while ((c1 = *p1++) == *p2++ && c1)
- ;
- return c1 == 0;
- } else {
- size_t len = strlen((char *)RepAtom(nat)->StrOfAE);
- int min = max - len;
- if ((Int)(min - len) < 0)
- return FALSE;
- if (IsWideAtom(at)) {
- wchar_t *p1;
- unsigned char *p2;
- wchar_t c1;
- p1 = RepAtom(at)->WStrOfAE + min;
- p2 = RepAtom(nat)->UStrOfAE;
- while ((c1 = *p1++) == *p2++ && c1)
- ;
- return c1 == 0;
- } else {
- unsigned char *p1, *p2;
- char c1;
- p1 = RepAtom(at)->UStrOfAE + min;
- p2 = RepAtom(nat)->UStrOfAE;
- while ((c1 = *p1++) == *p2++ && c1)
- ;
- return c1 == 0;
- }
- }
+static int check_sub_string_at(int minv, const unsigned char *p1,
+ const unsigned char *p2, size_t len) {
+ p1 = skip_utf8((unsigned char *)p1, minv);
+ if (p1 == NULL || p2 == NULL)
+ return p1 == p2;
+ return cmpn_utf8(p1, p2, len) == 0;
}
static int check_sub_string_bef(int max, Term at, Term nat) {
size_t len = strlen_utf8(UStringOfTerm(nat));
- int min = max - len;
+ int minv = max - len;
const unsigned char *p1, *p2;
int c1;
- if ((Int)(min - len) < 0)
+ if ((Int)(minv - len) < 0)
return FALSE;
- p1 = skip_utf8((unsigned char *)UStringOfTerm(at), min);
+ p1 = skip_utf8((unsigned char *)UStringOfTerm(at), minv);
p2 = UStringOfTerm(nat);
while ((c1 = *p1++) == *p2++ && c1)
;
return c1 == 0;
}
+static int check_sub_atom_bef(int max, Atom at, Atom nat) {
+ const unsigned char *p1, *p2 = RepAtom(nat)->UStrOfAE;
+ size_t len = strlen_utf8(p2);
+ int minv = max - len;
+ int c1;
+
+ if ((Int)(minv - len) < 0)
+ return false;
+ p1 = skip_utf8(RepAtom(at)->UStrOfAE, minv);
+ while ((c1 = *p1++) == *p2++ && c1)
+ ;
+ return c1 == 0;
+}
+
static Int cont_sub_atomic(USES_REGS1) {
Term tat1 = Deref(ARG1);
- Atom at = NULL;
+ Term tat5 = Deref(ARG5);
int mask;
- size_t min, len, after, sz;
+ size_t minv, len, after, sz;
wchar_t *wp = NULL;
- const unsigned char *p = NULL;
- Term nat;
- int sub_atom = TRUE;
+ const unsigned char *p = NULL, *p5 = NULL;
mask = IntegerOfTerm(EXTRA_CBACK_ARG(5, 1));
- min = IntegerOfTerm(EXTRA_CBACK_ARG(5, 2));
+ minv = IntegerOfTerm(EXTRA_CBACK_ARG(5, 2));
len = IntegerOfTerm(EXTRA_CBACK_ARG(5, 3));
after = IntegerOfTerm(EXTRA_CBACK_ARG(5, 4));
sz = IntegerOfTerm(EXTRA_CBACK_ARG(5, 5));
- if (mask & SUB_ATOM_HAS_UTF8) {
- sub_atom = FALSE;
- p = UStringOfTerm(tat1);
- } else if (mask & SUB_ATOM_HAS_WIDE) {
- at = AtomOfTerm(tat1);
- wp = RepAtom(at)->WStrOfAE;
- } else {
- at = AtomOfTerm(tat1);
- p = RepAtom(at)->UStrOfAE;
+ if (!IsVarTerm(tat1)) {
+ if (IsAtomTerm(tat1)) {
+ p = AtomOfTerm(tat1)->UStrOfAE;
+ } else {
+ p = UStringOfTerm(tat1);
+ }
+ }
+ if (!IsVarTerm(tat5)) {
+ if (IsAtomTerm(tat5)) {
+ p5 = AtomOfTerm(tat5)->UStrOfAE;
+ } else {
+ p5 = UStringOfTerm(tat5);
+ }
}
/* we can have one of two cases: A5 bound or unbound */
if (mask & SUB_ATOM_HAS_VAL) {
- int found = FALSE;
- nat = Deref(ARG5);
- if (mask & SUB_ATOM_HAS_WIDE) {
- wp = RepAtom(at)->WStrOfAE;
- if (IsWideAtom(AtomOfTerm(nat))) {
- while (!found) {
- if (wcsncmp(wp + min, AtomOfTerm(nat)->WStrOfAE, len) == 0) {
- Yap_unify(ARG2, MkIntegerTerm(min));
- Yap_unify(ARG3, MkIntegerTerm(len));
- Yap_unify(ARG4, MkIntegerTerm(after));
- found = TRUE;
- /* found one, check if there is any left */
- while (min <= sz - len) {
- after--;
- min++;
- if (wcsncmp(wp + min, AtomOfTerm(nat)->WStrOfAE, len) == 0)
- break;
- }
- } else {
- if (min == sz - len)
- break;
- after--;
- min++;
- }
- }
- } else {
- while (!found) {
- if (wcsstrcmp(wp + min, (char *)AtomOfTerm(nat)->StrOfAE, len) == 0) {
- Yap_unify(ARG2, MkIntegerTerm(min));
- Yap_unify(ARG3, MkIntegerTerm(len));
- Yap_unify(ARG4, MkIntegerTerm(after));
- found = TRUE;
- /* found one, check if there is any left */
- while (min <= sz - len) {
- after--;
- min++;
- if (wcsstrcmp(wp + min, (char *)AtomOfTerm(nat)->StrOfAE, len) ==
- 0)
- break;
- }
- } else {
- if (min == sz - len)
- break;
- after--;
- min++;
- }
- }
- }
- } else if (sub_atom) {
- p = RepAtom(at)->UStrOfAE;
- while (!found) {
- if (strncmp((char *)p + min, (char *)AtomOfTerm(nat)->StrOfAE, len) ==
- 0) {
- Yap_unify(ARG2, MkIntegerTerm(min));
- Yap_unify(ARG3, MkIntegerTerm(len));
- Yap_unify(ARG4, MkIntegerTerm(after));
- found = TRUE;
- /* found one, check if there is any left */
- while (min <= sz - len) {
- after--;
- min++;
- if (strncmp((char *)p + min, (char *)AtomOfTerm(nat)->StrOfAE,
- len) == 0)
- break;
- }
- } else {
- if (min == sz - len)
- break;
- after--;
- min++;
- }
- }
- } else {
- const unsigned char *p = UStringOfTerm(Deref(ARG1)), *p1 = p;
- const unsigned char *p5 = UStringOfTerm(Deref(ARG5));
+ bool found = false;
+ {
+ const unsigned char *p1 = p;
while (!found) {
- p = skip_utf8((unsigned char *)p1, min);
+ p = skip_utf8(p1, minv);
if (cmpn_utf8(p, p5, len) == 0) {
- Yap_unify(ARG2, MkIntegerTerm(min));
+ Yap_unify(ARG2, MkIntegerTerm(minv));
Yap_unify(ARG3, MkIntegerTerm(len));
Yap_unify(ARG4, MkIntegerTerm(after));
- found = TRUE;
+ found = true;
/* found one, check if there is any left */
- while (min <= sz - len) {
+ while (minv <= sz - len) {
int chr;
p += get_utf8((unsigned char *)p, -1, &chr);
after--;
- min++;
- if (cmpn_utf8(p, UStringOfTerm(nat), len) == 0)
+ minv++;
+ if (cmpn_utf8(p, p5, len) == 0)
break;
}
} else {
- if (min == sz - len)
+ if (minv == sz - len)
break;
after--;
- min++;
+ minv++;
}
}
}
if (found) {
- if (min > sz - len)
+ if (minv > sz - len)
cut_succeed();
} else {
cut_fail();
}
} else if (mask & SUB_ATOM_HAS_SIZE) {
- nat = build_new_atomic(mask, wp, p, min, len PASS_REGS);
- Yap_unify(ARG2, MkIntegerTerm(min));
+ Term nat = build_new_atomic(mask, wp, p, minv, len PASS_REGS);
+ Yap_unify(ARG2, MkIntegerTerm(minv));
Yap_unify(ARG4, MkIntegerTerm(after));
Yap_unify(ARG5, nat);
- min++;
+ minv++;
if (after-- == 0)
cut_succeed();
} else if (mask & SUB_ATOM_HAS_MIN) {
- after = sz - (min + len);
- nat = build_new_atomic(mask, wp, p, min, len PASS_REGS);
+ after = sz - (minv + len);
+ Term nat = build_new_atomic(mask, wp, p, minv, len PASS_REGS);
Yap_unify(ARG3, MkIntegerTerm(len));
Yap_unify(ARG4, MkIntegerTerm(after));
Yap_unify(ARG5, nat);
@@ -2088,70 +1953,87 @@ static Int cont_sub_atomic(USES_REGS1) {
if (after-- == 0)
cut_succeed();
} else if (mask & SUB_ATOM_HAS_AFTER) {
- len = sz - (min + after);
- nat = build_new_atomic(mask, wp, p, min, len PASS_REGS);
- Yap_unify(ARG2, MkIntegerTerm(min));
+ len = sz - (minv + after);
+ Term nat = build_new_atomic(mask, wp, p, minv, len PASS_REGS);
+ Yap_unify(ARG2, MkIntegerTerm(minv));
Yap_unify(ARG3, MkIntegerTerm(len));
Yap_unify(ARG5, nat);
- min++;
+ minv++;
if (len-- == 0)
cut_succeed();
} else {
- nat = build_new_atomic(mask, wp, p, min, len PASS_REGS);
- Yap_unify(ARG2, MkIntegerTerm(min));
+ Term nat = build_new_atomic(mask, wp, p, minv, len PASS_REGS);
+ Yap_unify(ARG2, MkIntegerTerm(minv));
Yap_unify(ARG3, MkIntegerTerm(len));
Yap_unify(ARG4, MkIntegerTerm(after));
Yap_unify(ARG5, nat);
len++;
if (after-- == 0) {
- if (min == sz)
+ if (minv == sz)
cut_succeed();
- min++;
+ minv++;
len = 0;
- after = sz - min;
+ after = sz - minv;
}
}
EXTRA_CBACK_ARG(5, 1) = MkIntegerTerm(mask);
- EXTRA_CBACK_ARG(5, 2) = MkIntegerTerm(min);
+ EXTRA_CBACK_ARG(5, 2) = MkIntegerTerm(minv);
EXTRA_CBACK_ARG(5, 3) = MkIntegerTerm(len);
EXTRA_CBACK_ARG(5, 4) = MkIntegerTerm(after);
EXTRA_CBACK_ARG(5, 5) = MkIntegerTerm(sz);
return TRUE;
}
-static Int sub_atomic(int sub_atom USES_REGS) {
+static Int sub_atomic(bool sub_atom, bool sub_string USES_REGS) {
Term tat1, tbef, tsize, tafter, tout;
- int mask = 0;
- size_t min, len, after, sz;
+ int mask = SUB_ATOM_HAS_UTF8;
+ size_t minv, len, after, sz;
wchar_t *wp = NULL;
- unsigned char *p = NULL;
+ const unsigned char *p = NULL;
int bnds = 0;
Term nat = 0L;
Atom at = NULL;
+ int l = push_text_stack();
+ if (sub_atom)
+ mask |= SUB_ATOM_HAS_ATOM;
+
tat1 = Deref(ARG1);
- EXTRA_CBACK_ARG(5, 3) = MkIntegerTerm(0);
- if (IsVarTerm(tat1)) {
- Yap_Error(INSTANTIATION_ERROR, tat1, "sub_atom/5: first argument");
- return FALSE;
- } else if (sub_atom && !IsAtomTerm(tat1)) {
- Yap_Error(TYPE_ERROR_ATOM, tat1, "sub_atom/5");
- return FALSE;
- } else if (!sub_atom && !IsStringTerm(tat1)) {
- Yap_Error(TYPE_ERROR_STRING, tat1, "sub_string/5");
- return FALSE;
+
+ if (!IsVarTerm(tat1)) {
+ if (sub_atom) {
+ if (IsAtomTerm(tat1)) {
+ p = AtomOfTerm(tat1)->UStrOfAE;
+ sz = strlen_utf8(p);
+ } else {
+ Yap_Error(TYPE_ERROR_ATOM, tat1, "sub_atom/5");
+ ReleaseAndReturn(false);
+ }
+ } else if (sub_string) {
+ if (IsStringTerm(tat1)) {
+ p = UStringOfTerm(tat1);
+ sz = strlen_utf8(p);
+ } else {
+ Yap_Error(TYPE_ERROR_STRING, tat1, "sub_atom/5");
+ ReleaseAndReturn(false);
+ }
+ }
+ } else {
+ Yap_Error(INSTANTIATION_ERROR, tat1, "sub_atom/5: first variable\n");
+ ReleaseAndReturn(false);
}
+ EXTRA_CBACK_ARG(5, 3) = MkIntegerTerm(0);
tbef = Deref(ARG2);
if (IsVarTerm(tbef)) {
- min = 0;
+ minv = 0;
} else if (!IsIntegerTerm(tbef)) {
Yap_Error(TYPE_ERROR_INTEGER, tbef, "sub_string/5");
- return FALSE;
+ ReleaseAndReturn(FALSE);
} else {
- min = IntegerOfTerm(tbef);
- if ((Int)min < 0) {
+ minv = IntegerOfTerm(tbef);
+ if ((Int)minv < 0) {
Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, tbef, "sub_string/5");
- return FALSE;
+ ReleaseAndReturn(FALSE);
};
mask |= SUB_ATOM_HAS_MIN;
bnds++;
@@ -2160,12 +2042,12 @@ static Int sub_atomic(int sub_atom USES_REGS) {
len = 0;
} else if (!IsIntegerTerm(tsize)) {
Yap_Error(TYPE_ERROR_INTEGER, tsize, "sub_string/5");
- return FALSE;
+ ReleaseAndReturn(FALSE);
} else {
len = IntegerOfTerm(tsize);
if ((Int)len < 0) {
Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, tsize, "sub_string/5");
- return FALSE;
+ ReleaseAndReturn(FALSE);
};
mask |= SUB_ATOM_HAS_SIZE;
bnds++;
@@ -2174,12 +2056,12 @@ static Int sub_atomic(int sub_atom USES_REGS) {
after = 0;
} else if (!IsIntegerTerm(tafter)) {
Yap_Error(TYPE_ERROR_INTEGER, tafter, "sub_string/5");
- return FALSE;
+ ReleaseAndReturn(FALSE);
} else {
after = IntegerOfTerm(tafter);
if ((Int)after < 0) {
Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, tafter, "sub_string/5");
- return FALSE;
+ ReleaseAndReturn(FALSE);
};
mask |= SUB_ATOM_HAS_AFTER;
bnds++;
@@ -2188,82 +2070,64 @@ static Int sub_atomic(int sub_atom USES_REGS) {
if (sub_atom) {
if (!IsAtomTerm(tout)) {
Yap_Error(TYPE_ERROR_ATOM, tout, "sub_atom/5");
- return FALSE;
+ ReleaseAndReturn(FALSE);
} else {
Atom oat;
mask |= SUB_ATOM_HAS_VAL | SUB_ATOM_HAS_SIZE;
oat = AtomOfTerm(tout);
- if (IsWideAtom(oat))
- len = wcslen(RepAtom(oat)->WStrOfAE);
- else
- len = strlen((const char *)RepAtom(oat)->StrOfAE);
+ len = strlen_utf8(RepAtom(oat)->UStrOfAE);
}
} else {
if (!IsStringTerm(tout)) {
Yap_Error(TYPE_ERROR_STRING, tout, "sub_string/5");
- return FALSE;
+ ReleaseAndReturn(FALSE);
} else {
mask |= SUB_ATOM_HAS_VAL | SUB_ATOM_HAS_SIZE;
len = strlen_utf8(UStringOfTerm(tout));
}
}
if (!Yap_unify(ARG3, MkIntegerTerm(len)))
- cut_fail();
+ release_cut_fail();
bnds += 2;
}
- if (sub_atom) {
- at = AtomOfTerm(tat1);
- if (IsWideAtom(at)) {
- mask |= SUB_ATOM_HAS_WIDE;
- wp = RepAtom(at)->WStrOfAE;
- sz = wcslen(wp);
- } else {
- p = RepAtom(at)->UStrOfAE;
- sz = strlen((const char *)p);
- }
- } else {
- mask |= SUB_ATOM_HAS_UTF8;
- p = (unsigned char *)StringOfTerm(tat1);
- sz = strlen_utf8(p);
- }
/* the problem is deterministic if we have two cases */
if (bnds > 1) {
int out = FALSE;
if ((mask & (SUB_ATOM_HAS_MIN | SUB_ATOM_HAS_SIZE)) ==
(SUB_ATOM_HAS_MIN | SUB_ATOM_HAS_SIZE)) {
- if (min + len > sz)
- cut_fail();
- if ((Int)(after = (sz - (min + len))) < 0)
- cut_fail();
- nat = build_new_atomic(mask, wp, p, min, len PASS_REGS);
+ if (minv + len > sz)
+ release_cut_fail();
+ if ((Int)(after = (sz - (minv + len))) < 0)
+ release_cut_fail();
+ nat = build_new_atomic(mask, wp, p, minv, len PASS_REGS);
if (!nat)
- cut_fail();
+ release_cut_fail();
out = Yap_unify(ARG4, MkIntegerTerm(after)) && Yap_unify(ARG5, nat);
} else if ((mask & (SUB_ATOM_HAS_MIN | SUB_ATOM_HAS_AFTER)) ==
(SUB_ATOM_HAS_MIN | SUB_ATOM_HAS_AFTER)) {
- if (sz < min + after)
- cut_fail();
- len = sz - (min + after);
- nat = build_new_atomic(mask, wp, p, min, len PASS_REGS);
+ if (sz < minv + after)
+ release_cut_fail();
+ len = sz - (minv + after);
+ nat = build_new_atomic(mask, wp, p, minv, len PASS_REGS);
if (!nat)
- cut_fail();
+ release_cut_fail();
out = Yap_unify(ARG3, MkIntegerTerm(len)) && Yap_unify(ARG5, nat);
} else if ((mask & (SUB_ATOM_HAS_SIZE | SUB_ATOM_HAS_AFTER)) ==
(SUB_ATOM_HAS_SIZE | SUB_ATOM_HAS_AFTER)) {
if (len + after > sz)
- cut_fail();
- min = sz - (len + after);
- nat = build_new_atomic(mask, wp, p, min, len PASS_REGS);
+ release_cut_fail();
+ minv = sz - (len + after);
+ nat = build_new_atomic(mask, wp, p, minv, len PASS_REGS);
if (!nat)
- cut_fail();
- out = Yap_unify(ARG2, MkIntegerTerm(min)) && Yap_unify(ARG5, nat);
+ release_cut_fail();
+ out = Yap_unify(ARG2, MkIntegerTerm(minv)) && Yap_unify(ARG5, nat);
} else if ((mask & (SUB_ATOM_HAS_MIN | SUB_ATOM_HAS_VAL)) ==
(SUB_ATOM_HAS_MIN | SUB_ATOM_HAS_VAL)) {
if (sub_atom)
- out = check_sub_atom_at(min, at, AtomOfTerm(nat));
+ out = check_sub_atom_at(minv, at, AtomOfTerm(nat), len);
else
- out = check_sub_string_at(min, p, UStringOfTerm(nat), len);
+ out = check_sub_string_at(minv, p, UStringOfTerm(nat), len);
} else if ((mask & (SUB_ATOM_HAS_AFTER | SUB_ATOM_HAS_VAL)) ==
(SUB_ATOM_HAS_AFTER | SUB_ATOM_HAS_VAL)) {
if (sub_atom)
@@ -2275,49 +2139,43 @@ static Int sub_atomic(int sub_atom USES_REGS) {
if (!sub_atom) {
out = (strlen_utf8(UStringOfTerm(tout)) == len);
if (!out)
- cut_fail();
- } else if (IsWideAtom(AtomOfTerm(tout))) {
- if (!(mask & SUB_ATOM_HAS_VAL)) {
- cut_fail();
- }
- /* just check length, they may still be several occurrences :( */
- out = (wcslen(RepAtom(AtomOfTerm(tout))->WStrOfAE) == len);
+ release_cut_fail();
} else {
- out = (strlen((const char *)RepAtom(AtomOfTerm(tout))->StrOfAE) == len);
+ out = (strlen_utf8(RepAtom(AtomOfTerm(tout))->UStrOfAE) == len);
if (!out)
- cut_fail();
+ release_cut_fail();
}
if (len == sz) {
out = out && Yap_unify(ARG1, ARG5) &&
Yap_unify(ARG2, MkIntegerTerm(0)) &&
Yap_unify(ARG4, MkIntegerTerm(0));
} else if (len > sz) {
- cut_fail();
+ release_cut_fail();
} else {
mask |= SUB_ATOM_HAS_SIZE;
- min = 0;
+ minv = 0;
after = sz - len;
goto backtrackable;
}
}
if (out)
- cut_succeed();
- cut_fail();
+ release_cut_succeed();
+ release_cut_fail();
} else {
if (!(mask & SUB_ATOM_HAS_MIN))
- min = 0;
+ minv = 0;
if (!(mask & SUB_ATOM_HAS_SIZE))
len = 0;
if (!(mask & SUB_ATOM_HAS_AFTER))
- after = sz - (len + min);
+ after = sz - (len + minv);
}
backtrackable:
EXTRA_CBACK_ARG(5, 1) = MkIntegerTerm(mask);
- EXTRA_CBACK_ARG(5, 2) = MkIntegerTerm(min);
+ EXTRA_CBACK_ARG(5, 2) = MkIntegerTerm(minv);
EXTRA_CBACK_ARG(5, 3) = MkIntegerTerm(len);
EXTRA_CBACK_ARG(5, 4) = MkIntegerTerm(after);
EXTRA_CBACK_ARG(5, 5) = MkIntegerTerm(sz);
- return cont_sub_atomic(PASS_REGS1);
+ ReleaseAndReturn(cont_sub_atomic(PASS_REGS1));
}
/** @pred sub_atom(+ _A_,? _Bef_, ? _Size_, ? _After_, ? _At_out_) is iso
@@ -2334,9 +2192,10 @@ are unbound, the built-in will backtrack through all possible
sub-strings of _A_.
*/
-static Int sub_atom(USES_REGS1) { return sub_atomic(TRUE PASS_REGS); }
+static Int sub_atom(USES_REGS1) { return (sub_atomic(true, false PASS_REGS)); }
-/** @pred sub_string(+ _S_,? _Bef_, ? _Size_, ? _After_, ? _S_out_) is iso
+/** @pred sub_string(+ _S_,? _Bef_, ? _Size_, ? _After_, ? _S_out_) is
+iso
True when _S_ and _S_out_ are strings such that the
@@ -2350,7 +2209,7 @@ are unbound, the built-in will generate all possible
sub-strings of _S_.
*/
-static Int sub_string(USES_REGS1) { return sub_atomic(FALSE PASS_REGS); }
+static Int sub_string(USES_REGS1) { return sub_atomic(false, true PASS_REGS); }
static Int cont_current_atom(USES_REGS1) {
Atom catom;
@@ -2403,13 +2262,14 @@ static Int cont_current_atom(USES_REGS1) {
READ_UNLOCK(ap->ARWLock);
}
EXTRA_CBACK_ARG(1, 2) = MkIntTerm(i);
- return TRUE;
+ return (TRUE);
} else {
- return FALSE;
+ return (FALSE);
}
}
-static Int current_atom(USES_REGS1) { /* current_atom(?Atom) */
+static Int current_atom(USES_REGS1) { /* current_atom(?Atom)
+ */
Term t1 = Deref(ARG1);
if (!IsVarTerm(t1)) {
if (IsAtomTerm(t1))
@@ -2428,88 +2288,9 @@ static Int current_atom(USES_REGS1) { /* current_atom(?Atom) */
return (cont_current_atom(PASS_REGS1));
}
-static Int cont_current_wide_atom(USES_REGS1) {
- Atom catom;
- Int i = IntOfTerm(EXTRA_CBACK_ARG(1, 2));
- AtomEntry *ap; /* nasty hack for gcc on hpux */
-
- /* protect current hash table line */
- if (IsAtomTerm(EXTRA_CBACK_ARG(1, 1)))
- catom = AtomOfTerm(EXTRA_CBACK_ARG(1, 1));
- else
- catom = NIL;
- if (catom == NIL) {
- i++;
- /* move away from current hash table line */
- while (i < WideAtomHashTableSize) {
- READ_LOCK(WideHashChain[i].AERWLock);
- catom = WideHashChain[i].Entry;
- READ_UNLOCK(WideHashChain[i].AERWLock);
- if (catom != NIL) {
- break;
- }
- i++;
- }
- if (i == WideAtomHashTableSize) {
- cut_fail();
- }
- }
- ap = RepAtom(catom);
- if (Yap_unify_constant(ARG1, MkAtomTerm(catom))) {
- READ_LOCK(ap->ARWLock);
- if (ap->NextOfAE == NIL) {
- READ_UNLOCK(ap->ARWLock);
- i++;
- while (i < WideAtomHashTableSize) {
- READ_LOCK(WideHashChain[i].AERWLock);
- catom = WideHashChain[i].Entry;
- READ_UNLOCK(WideHashChain[i].AERWLock);
- if (catom != NIL) {
- break;
- }
- i++;
- }
- if (i == WideAtomHashTableSize) {
- cut_fail();
- } else {
- EXTRA_CBACK_ARG(1, 1) = MkAtomTerm(catom);
- }
- } else {
- EXTRA_CBACK_ARG(1, 1) = MkAtomTerm(ap->NextOfAE);
- READ_UNLOCK(ap->ARWLock);
- }
- EXTRA_CBACK_ARG(1, 2) = MkIntTerm(i);
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-static Int current_wide_atom(USES_REGS1) { /* current_atom(?Atom)
- */
- Term t1 = Deref(ARG1);
- if (!IsVarTerm(t1)) {
- if (IsAtomTerm(t1))
- cut_succeed();
- else
- cut_fail();
- }
- READ_LOCK(WideHashChain[0].AERWLock);
- if (WideHashChain[0].Entry != NIL) {
- EXTRA_CBACK_ARG(1, 1) = MkAtomTerm(WideHashChain[0].Entry);
- } else {
- EXTRA_CBACK_ARG(1, 1) = MkIntTerm(0);
- }
- READ_UNLOCK(WideHashChain[0].AERWLock);
- EXTRA_CBACK_ARG(1, 2) = MkIntTerm(0);
- return (cont_current_wide_atom(PASS_REGS1));
-}
-
void Yap_InitBackAtoms(void) {
Yap_InitCPredBack("$current_atom", 1, 2, current_atom, cont_current_atom,
SafePredFlag | SyncPredFlag);
- Yap_InitCPredBack("$current_wide_atom", 1, 2, current_wide_atom,
- cont_current_wide_atom, SafePredFlag | SyncPredFlag);
Yap_InitCPredBack("atom_concat", 3, 2, atom_concat3, cont_atom_concat3, 0);
Yap_InitCPredBack("atomic_concat", 3, 2, atomic_concat3, cont_atomic_concat3,
0);
@@ -2626,7 +2407,8 @@ void Yap_InitAtomPreds(void) {
/** @pred atomic_concat(+ _As_,? _A_)
- The predicate holds when the first argument is a list of atomic terms, and
+ The predicate holds when the first argument is a list of atomic terms,
+ and
the second unifies with the atom obtained by concatenating all the
atomic terms in the first list. The first argument thus may contain
atoms or numbers.
diff --git a/C/attvar.c b/C/attvar.c
index a2627a09e..e6045e8d8 100644
--- a/C/attvar.c
+++ b/C/attvar.c
@@ -28,10 +28,11 @@ static char SccsId[] = "%W% %G%";
#define NULL (void *)0
#endif
-/** @{ */
+/** @file attvars.c
+ @{ */
-/** @defgroup AttributeVariables_Builtins Implementation of Attribute
- Declarations
+/**
+ * @defgroup AttributeVariables_Builtins Implementation of Attribute Declarations
@ingroup AttributeVariables
*/
diff --git a/C/blobs.c b/C/blobs.c
index 6b2099d8a..7a5b3b5dc 100644
--- a/C/blobs.c
+++ b/C/blobs.c
@@ -212,16 +212,9 @@ bool YAP_get_blob(Term t, void **blob, size_t *len, blob_type_t **type) {
void *YAP_blob_data(Atom x, size_t *len, blob_type_t **type) {
if (!IsBlob(x)) {
- if (IsWideAtom(x)) {
- if (len)
- *len = wcslen(x->WStrOfAE);
- if (type)
- *type = &unregistered_blob_atom;
- return x->WStrOfAE;
- }
if (len)
- *len = strlen((char *)x->StrOfAE);
+ *len = strlen_utf8(x->UStrOfAE);
if (type)
*type = &unregistered_blob_atom;
return x->StrOfAE;
diff --git a/C/c_interface.c b/C/c_interface.c
index 53ccf3a74..1fedec402 100755
--- a/C/c_interface.c
+++ b/C/c_interface.c
@@ -398,7 +398,16 @@ X_API Term YAP_MkAtomTerm(Atom n) {
X_API Atom YAP_AtomOfTerm(Term t) { return (AtomOfTerm(t)); }
-X_API bool YAP_IsWideAtom(Atom a) { return IsWideAtom(a); }
+X_API bool YAP_IsWideAtom(Atom a) {
+ const unsigned char *s = RepAtom(a)->UStrOfAE;
+ int32_t v;
+ while (*s) {
+ size_t n = get_utf8(s, 1, &v);
+ if (n > 1)
+ return true;
+ }
+ return false;
+}
X_API const char *YAP_AtomName(Atom a) {
const char *o;
@@ -407,7 +416,20 @@ X_API const char *YAP_AtomName(Atom a) {
return (o);
}
-X_API const wchar_t *YAP_WideAtomName(Atom a) { return RepAtom(a)->WStrOfAE; }
+X_API const wchar_t *YAP_WideAtomName(Atom a) {
+ int32_t v;
+ const unsigned char *s = RepAtom(a)->UStrOfAE;
+ size_t n = strlen_utf8(s);
+ wchar_t *dest = Malloc((n + 1) * sizeof(wchar_t)), *o = dest;
+ while (*s) {
+ size_t n = get_utf8(s, 1, &v);
+ if (n == 0)
+ return NULL;
+ *o++ = v;
+ }
+ o[0] = '\0';
+ return dest;
+}
X_API Atom YAP_LookupAtom(const char *c) {
CACHE_REGS
@@ -432,7 +454,7 @@ X_API Atom YAP_LookupWideAtom(const wchar_t *c) {
Atom a;
while (TRUE) {
- a = Yap_LookupWideAtom((wchar_t *)c);
+ a = Yap_NWCharsToAtom(c, -1 USES_REGS);
if (a == NIL || Yap_get_signal(YAP_CDOVF_SIGNAL)) {
if (!Yap_locked_growheap(FALSE, 0, NULL)) {
Yap_Error(RESOURCE_ERROR_HEAP, TermNil, "YAP failed to grow heap: %s",
@@ -467,15 +489,9 @@ X_API size_t YAP_AtomNameLength(Atom at) {
if (IsBlob(at)) {
return RepAtom(at)->rep.blob->length;
}
- if (IsWideAtom(at)) {
- wchar_t *c = RepAtom(at)->WStrOfAE;
+ unsigned char *c = RepAtom(at)->UStrOfAE;
- return wcslen(c);
- } else {
- unsigned char *c = RepAtom(at)->UStrOfAE;
-
- return strlen((char *)c);
- }
+ return strlen_utf8(c);
}
X_API Term YAP_MkVarTerm(void) {
@@ -1169,10 +1185,10 @@ Int YAP_ExecuteOnCut(PredEntry *pe, CPredicate exec_code,
Yap_CloseSlots(CurSlot);
PP = NULL;
// B = LCL0-(CELL*)oB;
- if (false && Yap_RaiseException()) {
+ if (!val && Yap_RaiseException()) {
return false;
} else { /* TRUE */
- return true;
+ return val;
}
}
@@ -1355,12 +1371,17 @@ X_API Term YAP_NWideBufferToString(const wchar_t *s, size_t len) {
/* copy a string to a buffer */
X_API Term YAP_ReadBuffer(const char *s, Term *tp) {
CACHE_REGS
- Term t;
+ Term tv, t;
BACKUP_H();
+ if (*tp)
+ tv = *tp;
+ else
+ tv = 0;
LOCAL_ErrorMessage = NULL;
- while (!(t = Yap_StringToTerm(s, strlen(s) + 1, &LOCAL_encoding,
- GLOBAL_MaxPriority, tp))) {
+ const unsigned char *us = (const unsigned char *)s;
+ while (!(t = Yap_BufferToTermWithPrioBindings(
+ us, strlen(s) + 1, TermNil, GLOBAL_MaxPriority, tv))) {
if (LOCAL_ErrorMessage) {
if (!strcmp(LOCAL_ErrorMessage, "Stack Overflow")) {
if (!Yap_dogc(0, NULL PASS_REGS)) {
@@ -2088,7 +2109,7 @@ X_API void YAP_Write(Term t, FILE *f, int flags) {
RECOVER_MACHINE_REGS();
}
-X_API Term YAP_CopyTerm(Term t) {
+X_API YAP_Term YAP_CopyTerm(Term t) {
Term tn;
BACKUP_MACHINE_REGS();
@@ -2096,7 +2117,7 @@ X_API Term YAP_CopyTerm(Term t) {
RECOVER_MACHINE_REGS();
- return tn;
+ return (tn);
}
X_API char *YAP_WriteBuffer(Term t, char *buf, size_t sze, int flags) {
@@ -2289,7 +2310,7 @@ YAP_file_type_t YAP_Init(YAP_init_args *yap_init) {
!yap_init->Embedded;
Yap_InitSysbits(0); /* init signal handling and time, required by later
functions */
- GLOBAL_argv = yap_init->Argv;
+ GLOBAL_argv = yap_init->Argv;
GLOBAL_argc = yap_init->Argc;
if (0 && ((YAP_QLY && yap_init->SavedState) ||
(YAP_BOOT_PL && (yap_init->YapPrologBootFile)))) {
@@ -2350,10 +2371,10 @@ YAP_file_type_t YAP_Init(YAP_init_args *yap_init) {
//
CACHE_REGS
- if (Yap_embedded)
- if (yap_init->QuietMode) {
- setVerbosity(TermSilent);
- }
+ if (Yap_embedded)
+ if (yap_init->QuietMode) {
+ setVerbosity(TermSilent);
+ }
{
if (yap_init->YapPrologRCFile != NULL) {
/*
@@ -3191,10 +3212,10 @@ size_t YAP_UTF8_TextLength(Term t) {
Term hd = HeadOfTerm(t);
if (IsAtomTerm(hd)) {
Atom at = AtomOfTerm(hd);
- if (IsWideAtom(at))
- c = RepAtom(at)->WStrOfAE[0];
- else
- c = RepAtom(at)->StrOfAE[0];
+ unsigned char *s = RepAtom(at)->UStrOfAE;
+ int32_t ch;
+ get_utf8(s, 1, &ch);
+ c = ch;
} else if (IsIntegerTerm(hd)) {
c = IntegerOfTerm(hd);
} else {
@@ -3205,20 +3226,7 @@ size_t YAP_UTF8_TextLength(Term t) {
}
} else if (IsAtomTerm(t)) {
Atom at = AtomOfTerm(t);
- if (IsWideAtom(at)) {
- const wchar_t *s = RepAtom(at)->WStrOfAE;
- int c;
- while ((c = *s++)) {
- sz += utf8proc_encode_char(c, dst);
- }
- } else {
- const unsigned char *s = (const unsigned char *)RepAtom(at)->StrOfAE;
- int c;
-
- while ((c = *s++)) {
- sz += utf8proc_encode_char(c, dst);
- }
- }
+ sz = strlen(RepAtom(at)->StrOfAE);
} else if (IsStringTerm(t)) {
sz = strlen(StringOfTerm(t));
}
diff --git a/C/cdmgr.c b/C/cdmgr.c
index bb62f0954..65acb4b91 100644
--- a/C/cdmgr.c
+++ b/C/cdmgr.c
@@ -1447,14 +1447,10 @@ static int not_was_reconsulted(PredEntry *p, Term t, int mode) {
static void addcl_permission_error(AtomEntry *ap, Int Arity, int in_use) {
CACHE_REGS
- Term t, ti[2];
- ti[0] = MkAtomTerm(AbsAtom(ap));
- ti[1] = MkIntegerTerm(Arity);
- t = Yap_MkApplTerm(FunctorSlash, 2, ti);
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- LOCAL_Error_Term = t;
LOCAL_Error_TYPE = PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE;
+ LOCAL_ErrorMessage = Malloc( 256 );
+
if (in_use) {
if (Arity == 0)
sprintf(LOCAL_ErrorMessage, "static predicate %s is in use", ap->StrOfAE);
@@ -2028,9 +2024,7 @@ static Int p_compile(USES_REGS1) { /* '$compile'(+C,+Flags,+C0,-Ref) */
YAPLeaveCriticalSection();
}
if (LOCAL_ErrorMessage) {
- if (!LOCAL_Error_Term)
- LOCAL_Error_Term = TermNil;
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ Yap_Error(LOCAL_Error_TYPE, ARG1, LOCAL_ErrorMessage);
YAPLeaveCriticalSection();
return false;
}
@@ -3590,7 +3584,8 @@ static Int p_predicate_erased_statistics(USES_REGS1) {
Term tpred = ArgOfTerm(2, Deref(ARG1));
Term tmod = ArgOfTerm(1, Deref(ARG1));
- if (EndOfPAEntr(pe = Yap_get_pred(tpred, tmod, "predicate_erased_statistics")))
+ if (EndOfPAEntr(pe =
+ Yap_get_pred(tpred, tmod, "predicate_erased_statistics")))
return FALSE;
while (cl) {
if (cl->ClPred == pe) {
diff --git a/C/cmppreds.c b/C/cmppreds.c
index da947221f..9da40cd5b 100644
--- a/C/cmppreds.c
+++ b/C/cmppreds.c
@@ -18,30 +18,28 @@
/// @file cmppreds.c
-
-
-/**
+/**
@defgroup Comparing_Terms Comparing Terms
@ingroup builtins
The following predicates are used to compare and order terms, using the
standard ordering:
-+
++
variables come before numbers, numbers come before atoms which in turn
come before compound terms, i.e.: variables @< numbers @< atoms @<
compound terms.
+ Variables are roughly ordered by "age" (the "oldest" variable is put
first);
-+
++
Floating point numbers are sorted in increasing order;
-+
++
Rational numbers are sorted in increasing order;
-+
++
Integers are sorted in increasing order;
-+
++
Atoms are sorted in lexicographic order;
-+
++
Compound terms are ordered first by arity of the main functor, then by
the name of the main functor, and finally by their arguments in
left-to-right order.
@@ -49,282 +47,254 @@ left-to-right order.
@{
-
+
*/
-
#ifdef SCCS
-static char SccsId[] = "%W% %G%";
+static char SccsId[] = "%W% %G%";
#endif
#include "Yap.h"
-#include "Yatom.h"
#include "YapHeap.h"
+#include "Yatom.h"
#include "eval.h"
#if HAVE_STRING_H
#include
#endif
#include
+#include "YapError.h"
+
static Int compare(Term, Term);
-static Int p_compare( USES_REGS1 );
-static Int p_acomp( USES_REGS1 );
-static Int a_eq(Term,Term);
-static Int a_dif(Term,Term);
+static Int p_compare(USES_REGS1);
+static Int p_acomp(USES_REGS1);
+static Int a_eq(Term, Term);
+static Int a_dif(Term, Term);
static Int a_gt(Term, Term);
-static Int a_ge(Term,Term);
-static Int a_lt(Term,Term);
-static Int a_le(Term,Term);
-static Int a_noteq(Term,Term);
-static Int a_gen_lt(Term,Term);
-static Int a_gen_le(Term,Term);
-static Int a_gen_gt(Term,Term);
-static Int a_gen_ge(Term,Term);
+static Int a_ge(Term, Term);
+static Int a_lt(Term, Term);
+static Int a_le(Term, Term);
+static Int a_noteq(Term, Term);
+static Int a_gen_lt(Term, Term);
+static Int a_gen_le(Term, Term);
+static Int a_gen_gt(Term, Term);
+static Int a_gen_ge(Term, Term);
-#define rfloat(X) ( X > 0.0 ? 1 : ( X == 0.0 ? 0 : -1))
+#define rfloat(X) (X > 0.0 ? 1 : (X == 0.0 ? 0 : -1))
-static int
-cmp_atoms(Atom a1, Atom a2)
-{
- if (IsWideAtom(a1)) {
- if (IsWideAtom(a2)) {
- return wcscmp((wchar_t *)RepAtom(a1)->StrOfAE,(wchar_t *)RepAtom(a2)->StrOfAE);
- } else {
- /* The standard does not seem to have nothing on this */
- unsigned char *s1 = (unsigned char *)RepAtom(a1)->StrOfAE;
- wchar_t *s2 = (wchar_t *)RepAtom(a2)->StrOfAE;
-
- while (*s1 == *s2) {
- if (!*s1) return 0;
- s1++;
- s2++;
- }
- return *s1-*s2;
- }
- } else if (IsWideAtom(a2)) {
- /* The standard does not seem to have nothing on this */
- wchar_t *s1 = (wchar_t *)RepAtom(a1)->StrOfAE;
- unsigned char *s2 = (unsigned char *)RepAtom(a2)->StrOfAE;
-
- while (*s1 == *s2) {
- if (!*s1) return 0;
- s1++;
- s2++;
- }
- return *s1-*s2;
- } else {
- return strcmp((char *)RepAtom(a1)->StrOfAE,(char *)RepAtom(a2)->StrOfAE);
- }
+static int cmp_atoms(Atom a1, Atom a2) {
+ return strcmp(RepAtom(a1)->StrOfAE, RepAtom(a2)->StrOfAE);
}
-static Int compare_complex(register CELL *pt0, register CELL *pt0_end, register
- CELL *pt1)
-{
+static Int compare_complex(register CELL *pt0, register CELL *pt0_end,
+ register CELL *pt1) {
CACHE_REGS
register CELL **to_visit = (CELL **)HR;
register Int out = 0;
- loop:
+loop:
while (pt0 < pt0_end) {
register CELL d0, d1;
- ++ pt0;
- ++ pt1;
+ ++pt0;
+ ++pt1;
d0 = Derefa(pt0);
d1 = Derefa(pt1);
if (IsVarTerm(d0)) {
if (IsVarTerm(d1)) {
- out = Signed(d0) - Signed(d1);
- if (out) goto done;
- }
- else {
- out = -1;
- goto done;
+ out = Signed(d0) - Signed(d1);
+ if (out)
+ goto done;
+ } else {
+ out = -1;
+ goto done;
}
} else if (IsVarTerm(d1)) {
out = 1;
goto done;
} else {
- if (d0 == d1) continue;
+ if (d0 == d1)
+ continue;
else if (IsAtomTerm(d0)) {
- if (IsAtomTerm(d1))
- out = cmp_atoms(AtomOfTerm(d0), AtomOfTerm(d1));
- else if (IsPrimitiveTerm(d1))
- out = 1;
- else out = -1;
- /* I know out must be != 0 */
- goto done;
- }
- else if (IsIntTerm(d0)) {
- if (IsIntTerm(d1))
- out = IntOfTerm(d0) - IntOfTerm(d1);
- else if (IsFloatTerm(d1)) {
- out = 1;
- } else if (IsLongIntTerm(d1)) {
- out = IntOfTerm(d0) - LongIntOfTerm(d1);
+ if (IsAtomTerm(d1))
+ out = cmp_atoms(AtomOfTerm(d0), AtomOfTerm(d1));
+ else if (IsPrimitiveTerm(d1))
+ out = 1;
+ else
+ out = -1;
+ /* I know out must be != 0 */
+ goto done;
+ } else if (IsIntTerm(d0)) {
+ if (IsIntTerm(d1))
+ out = IntOfTerm(d0) - IntOfTerm(d1);
+ else if (IsFloatTerm(d1)) {
+ out = 1;
+ } else if (IsLongIntTerm(d1)) {
+ out = IntOfTerm(d0) - LongIntOfTerm(d1);
#ifdef USE_GMP
- } else if (IsBigIntTerm(d1)) {
- out = Yap_gmp_tcmp_int_big(IntOfTerm(d0), d1);
+ } else if (IsBigIntTerm(d1)) {
+ out = Yap_gmp_tcmp_int_big(IntOfTerm(d0), d1);
#endif
- } else if (IsRefTerm(d1))
- out = 1 ;
- else out = -1;
- if (out != 0)
- goto done;
+ } else if (IsRefTerm(d1))
+ out = 1;
+ else
+ out = -1;
+ if (out != 0)
+ goto done;
} else if (IsFloatTerm(d0)) {
- if (IsFloatTerm(d1)){
- out = rfloat(FloatOfTerm(d0) - FloatOfTerm(d1));
- } else if (IsRefTerm(d1)) {
- out = 1;
- } else {
- out = -1;
- }
- if (out != 0)
- goto done;
+ if (IsFloatTerm(d1)) {
+ out = rfloat(FloatOfTerm(d0) - FloatOfTerm(d1));
+ } else if (IsRefTerm(d1)) {
+ out = 1;
+ } else {
+ out = -1;
+ }
+ if (out != 0)
+ goto done;
} else if (IsStringTerm(d0)) {
- if (IsStringTerm(d1)){
- out = strcmp((char *)StringOfTerm(d0) , (char *)StringOfTerm(d1));
- } else if (IsIntTerm(d1))
- out = 1;
- else if (IsFloatTerm(d1)) {
- out = 1;
- } else if (IsLongIntTerm(d1)) {
- out = 1;
+ if (IsStringTerm(d1)) {
+ out = strcmp((char *)StringOfTerm(d0), (char *)StringOfTerm(d1));
+ } else if (IsIntTerm(d1))
+ out = 1;
+ else if (IsFloatTerm(d1)) {
+ out = 1;
+ } else if (IsLongIntTerm(d1)) {
+ out = 1;
#ifdef USE_GMP
- } else if (IsBigIntTerm(d1)) {
- out = 1;
+ } else if (IsBigIntTerm(d1)) {
+ out = 1;
#endif
- } else if (IsRefTerm(d1)) {
- out = 1 ;
- } else {
- out = -1;
- }
- if (out != 0)
- goto done;
+ } else if (IsRefTerm(d1)) {
+ out = 1;
+ } else {
+ out = -1;
+ }
+ if (out != 0)
+ goto done;
} else if (IsLongIntTerm(d0)) {
- if (IsIntTerm(d1))
- out = LongIntOfTerm(d0) - IntOfTerm(d1);
- else if (IsFloatTerm(d1)) {
- out = 1;
- } else if (IsLongIntTerm(d1)) {
- out = LongIntOfTerm(d0) - LongIntOfTerm(d1);
+ if (IsIntTerm(d1))
+ out = LongIntOfTerm(d0) - IntOfTerm(d1);
+ else if (IsFloatTerm(d1)) {
+ out = 1;
+ } else if (IsLongIntTerm(d1)) {
+ out = LongIntOfTerm(d0) - LongIntOfTerm(d1);
#ifdef USE_GMP
- } else if (IsBigIntTerm(d1)) {
- out = Yap_gmp_tcmp_int_big(LongIntOfTerm(d0), d1);
+ } else if (IsBigIntTerm(d1)) {
+ out = Yap_gmp_tcmp_int_big(LongIntOfTerm(d0), d1);
#endif
- } else if (IsRefTerm(d1)) {
- out = 1 ;
- } else {
- out = -1;
- }
- if (out != 0)
- goto done;
+ } else if (IsRefTerm(d1)) {
+ out = 1;
+ } else {
+ out = -1;
+ }
+ if (out != 0)
+ goto done;
}
#ifdef USE_GMP
else if (IsBigIntTerm(d0)) {
- if (IsIntTerm(d1)) {
- out = Yap_gmp_tcmp_big_int(d0, IntOfTerm(d1));
- } else if (IsFloatTerm(d1)) {
- out = 1;
- } else if (IsLongIntTerm(d1)) {
- out = Yap_gmp_tcmp_big_int(d0, LongIntOfTerm(d1));
- } else if (IsBigIntTerm(d1)) {
- out = Yap_gmp_tcmp_big_big(d0, d1);
- } else if (IsRefTerm(d1))
- out = 1 ;
- else out = -1;
- if (out != 0)
- goto done;
+ if (IsIntTerm(d1)) {
+ out = Yap_gmp_tcmp_big_int(d0, IntOfTerm(d1));
+ } else if (IsFloatTerm(d1)) {
+ out = 1;
+ } else if (IsLongIntTerm(d1)) {
+ out = Yap_gmp_tcmp_big_int(d0, LongIntOfTerm(d1));
+ } else if (IsBigIntTerm(d1)) {
+ out = Yap_gmp_tcmp_big_big(d0, d1);
+ } else if (IsRefTerm(d1))
+ out = 1;
+ else
+ out = -1;
+ if (out != 0)
+ goto done;
}
#endif
else if (IsPairTerm(d0)) {
- if (!IsPairTerm(d1)) {
- if (IsApplTerm(d1)) {
- Functor f = FunctorOfTerm(d1);
- if (IsExtensionFunctor(f))
- out = 1;
- else if (!(out = 2-ArityOfFunctor(f)))
- out = strcmp(".",(char *)RepAtom(NameOfFunctor(f))->StrOfAE);
- } else out = 1;
- goto done;
- }
+ if (!IsPairTerm(d1)) {
+ if (IsApplTerm(d1)) {
+ Functor f = FunctorOfTerm(d1);
+ if (IsExtensionFunctor(f))
+ out = 1;
+ else if (!(out = 2 - ArityOfFunctor(f)))
+ out = strcmp(".", (char *)RepAtom(NameOfFunctor(f))->StrOfAE);
+ } else
+ out = 1;
+ goto done;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = (CELL *)*pt0;
- to_visit += 4;
- *pt0 = d1;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = (CELL *)*pt0;
+ to_visit += 4;
+ *pt0 = d1;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit += 3;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit += 3;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- pt1 = RepPair(d1) - 1;
- continue;
- }
- else if (IsRefTerm(d0)) {
- if (IsRefTerm(d1))
- out = Unsigned(RefOfTerm(d1)) -
- Unsigned(RefOfTerm(d0));
- else out = -1;
- goto done;
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ pt1 = RepPair(d1) - 1;
+ continue;
+ } else if (IsRefTerm(d0)) {
+ if (IsRefTerm(d1))
+ out = Unsigned(RefOfTerm(d1)) - Unsigned(RefOfTerm(d0));
+ else
+ out = -1;
+ goto done;
} else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2, *ap3;
- if (!IsApplTerm(d1)) {
- out = 1 ;
- goto done;
- } else {
- /* store the terms to visit */
- Functor f2;
- ap2 = RepAppl(d0);
- ap3 = RepAppl(d1);
- f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- out = 1;
- goto done;
- }
- f2 = (Functor)(*ap3);
- if (IsExtensionFunctor(f2)) {
- out = -1;
- goto done;
- }
- /* compare functors */
- if (f != (Functor)*ap3) {
- if (!(out = ArityOfFunctor(f)-ArityOfFunctor(f2)))
- out = cmp_atoms(NameOfFunctor(f), NameOfFunctor(f2));
- goto done;
- }
+ register Functor f;
+ register CELL *ap2, *ap3;
+ if (!IsApplTerm(d1)) {
+ out = 1;
+ goto done;
+ } else {
+ /* store the terms to visit */
+ Functor f2;
+ ap2 = RepAppl(d0);
+ ap3 = RepAppl(d1);
+ f = (Functor)(*ap2);
+ if (IsExtensionFunctor(f)) {
+ out = 1;
+ goto done;
+ }
+ f2 = (Functor)(*ap3);
+ if (IsExtensionFunctor(f2)) {
+ out = -1;
+ goto done;
+ }
+ /* compare functors */
+ if (f != (Functor)*ap3) {
+ if (!(out = ArityOfFunctor(f) - ArityOfFunctor(f2)))
+ out = cmp_atoms(NameOfFunctor(f), NameOfFunctor(f2));
+ goto done;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = (CELL *)*pt0;
- to_visit += 4;
- *pt0 = d1;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = (CELL *)*pt0;
+ to_visit += 4;
+ *pt0 = d1;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit += 3;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit += 3;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- pt1 = ap3;
- continue;
- }
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ pt1 = ap3;
+ continue;
+ }
}
-
}
}
/* Do we still have compound terms to visit */
@@ -344,8 +314,8 @@ static Int compare_complex(register CELL *pt0, register CELL *pt0_end, register
goto loop;
}
- done:
- /* failure */
+done:
+/* failure */
#ifdef RATIONAL_TREES
while (to_visit > (CELL **)HR) {
to_visit -= 4;
@@ -355,11 +325,10 @@ static Int compare_complex(register CELL *pt0, register CELL *pt0_end, register
*pt0 = (CELL)to_visit[3];
}
#endif
- return(out);
+ return (out);
}
-inline static Int
-compare(Term t1, Term t2) /* compare terms t1 and t2 */
+inline static Int compare(Term t1, Term t2) /* compare terms t1 and t2 */
{
if (t1 == t2)
@@ -375,32 +344,32 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */
if (IsAtomOrIntTerm(t1)) {
if (IsAtomTerm(t1)) {
if (IsAtomTerm(t2))
- return cmp_atoms(AtomOfTerm(t1),AtomOfTerm(t2));
+ return cmp_atoms(AtomOfTerm(t1), AtomOfTerm(t2));
if (IsPrimitiveTerm(t2))
- return 1;
+ return 1;
if (IsStringTerm(t2))
- return 1;
+ return 1;
return -1;
} else {
if (IsIntTerm(t2)) {
- return IntOfTerm(t1) - IntOfTerm(t2);
+ return IntOfTerm(t1) - IntOfTerm(t2);
}
if (IsApplTerm(t2)) {
- Functor fun2 = FunctorOfTerm(t2);
- switch ((CELL)fun2) {
- case double_e:
- return 1;
- case long_int_e:
- return IntOfTerm(t1) - LongIntOfTerm(t2);
+ Functor fun2 = FunctorOfTerm(t2);
+ switch ((CELL)fun2) {
+ case double_e:
+ return 1;
+ case long_int_e:
+ return IntOfTerm(t1) - LongIntOfTerm(t2);
#ifdef USE_GMP
- case big_int_e:
- return Yap_gmp_tcmp_int_big(IntOfTerm(t1), t2);
+ case big_int_e:
+ return Yap_gmp_tcmp_int_big(IntOfTerm(t1), t2);
#endif
- case db_ref_e:
- return 1;
- case string_e:
- return -1;
- }
+ case db_ref_e:
+ return 1;
+ case string_e:
+ return -1;
+ }
}
return -1;
}
@@ -408,20 +377,20 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */
if (IsApplTerm(t2)) {
Functor f = FunctorOfTerm(t2);
if (IsExtensionFunctor(f))
- return 1;
+ return 1;
else {
- int out;
- if (!(out = 2-ArityOfFunctor(f)))
- out = strcmp(".",(char *)RepAtom(NameOfFunctor(f))->StrOfAE);
- return(out);
+ if (f != FunctorDot)
+ return strcmp(".", RepAtom(NameOfFunctor(f))->StrOfAE);
+ else {
+ return compare_complex(RepPair(t1) - 1, RepPair(t1) + 1, RepAppl(t2));
+ }
}
}
if (IsPairTerm(t2)) {
- return(compare_complex(RepPair(t1)-1,
- RepPair(t1)+1,
- RepPair(t2)-1));
- }
- else return 1;
+ return (
+ compare_complex(RepPair(t1) - 1, RepPair(t1) + 1, RepPair(t2) - 1));
+ } else
+ return 1;
} else {
/* compound term */
Functor fun1 = FunctorOfTerm(t1);
@@ -429,87 +398,82 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */
if (IsExtensionFunctor(fun1)) {
/* float, long, big, dbref */
switch ((CELL)fun1) {
- case double_e:
- {
- if (IsFloatTerm(t2))
- return(rfloat(FloatOfTerm(t1) - FloatOfTerm(t2)));
- if (IsRefTerm(t2))
- return 1;
- return -1;
- }
- case long_int_e:
- {
- if (IsIntTerm(t2))
- return LongIntOfTerm(t1) - IntOfTerm(t2);
- if (IsFloatTerm(t2)) {
- return 1;
- }
- if (IsLongIntTerm(t2))
- return LongIntOfTerm(t1) - LongIntOfTerm(t2);
+ case double_e: {
+ if (IsFloatTerm(t2))
+ return (rfloat(FloatOfTerm(t1) - FloatOfTerm(t2)));
+ if (IsRefTerm(t2))
+ return 1;
+ return -1;
+ }
+ case long_int_e: {
+ if (IsIntTerm(t2))
+ return LongIntOfTerm(t1) - IntOfTerm(t2);
+ if (IsFloatTerm(t2)) {
+ return 1;
+ }
+ if (IsLongIntTerm(t2))
+ return LongIntOfTerm(t1) - LongIntOfTerm(t2);
#ifdef USE_GMP
- if (IsBigIntTerm(t2)) {
- return Yap_gmp_tcmp_int_big(LongIntOfTerm(t1), t2);
- }
+ if (IsBigIntTerm(t2)) {
+ return Yap_gmp_tcmp_int_big(LongIntOfTerm(t1), t2);
+ }
#endif
- if (IsRefTerm(t2))
- return 1;
- return -1;
- }
+ if (IsRefTerm(t2))
+ return 1;
+ return -1;
+ }
#ifdef USE_GMP
- case big_int_e:
- {
- if (IsIntTerm(t2))
- return Yap_gmp_tcmp_big_int(t1, IntOfTerm(t2));
- if (IsFloatTerm(t2)) {
- return 1;
- }
- if (IsLongIntTerm(t2))
- return Yap_gmp_tcmp_big_int(t1, LongIntOfTerm(t2));
- if (IsBigIntTerm(t2)) {
- return Yap_gmp_tcmp_big_big(t1, t2);
- }
- if (IsRefTerm(t2))
- return 1;
- return -1;
- }
+ case big_int_e: {
+ if (IsIntTerm(t2))
+ return Yap_gmp_tcmp_big_int(t1, IntOfTerm(t2));
+ if (IsFloatTerm(t2)) {
+ return 1;
+ }
+ if (IsLongIntTerm(t2))
+ return Yap_gmp_tcmp_big_int(t1, LongIntOfTerm(t2));
+ if (IsBigIntTerm(t2)) {
+ return Yap_gmp_tcmp_big_big(t1, t2);
+ }
+ if (IsRefTerm(t2))
+ return 1;
+ return -1;
+ }
#endif
- case string_e:
- {
- if (IsApplTerm(t2)) {
- Functor fun2 = FunctorOfTerm(t2);
- switch ((CELL)fun2) {
- case double_e:
- return 1;
- case long_int_e:
- return 1;
+ case string_e: {
+ if (IsApplTerm(t2)) {
+ Functor fun2 = FunctorOfTerm(t2);
+ switch ((CELL)fun2) {
+ case double_e:
+ return 1;
+ case long_int_e:
+ return 1;
#ifdef USE_GMP
- case big_int_e:
- return 1;
+ case big_int_e:
+ return 1;
#endif
- case db_ref_e:
- return 1;
- case string_e:
- return strcmp((char *)StringOfTerm(t1), (char *)StringOfTerm(t2));
- }
- return -1;
- }
- return -1;
- }
+ case db_ref_e:
+ return 1;
+ case string_e:
+ return strcmp((char *)StringOfTerm(t1), (char *)StringOfTerm(t2));
+ }
+ return -1;
+ }
+ return -1;
+ }
case db_ref_e:
- if (IsRefTerm(t2))
- return Unsigned(RefOfTerm(t2)) -
- Unsigned(RefOfTerm(t1));
- return -1;
+ if (IsRefTerm(t2))
+ return Unsigned(RefOfTerm(t2)) - Unsigned(RefOfTerm(t1));
+ return -1;
}
}
if (!IsApplTerm(t2)) {
if (IsPairTerm(t2)) {
- Int out;
- Functor f = FunctorOfTerm(t1);
+ Int out;
+ Functor f = FunctorOfTerm(t1);
- if (!(out = ArityOfFunctor(f))-2)
- out = strcmp((char *)RepAtom(NameOfFunctor(f))->StrOfAE,".");
- return out;
+ if (!(out = ArityOfFunctor(f)) - 2)
+ out = strcmp((char *)RepAtom(NameOfFunctor(f))->StrOfAE, ".");
+ return out;
}
return 1;
} else {
@@ -517,46 +481,42 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */
Int r;
if (IsExtensionFunctor(fun2)) {
- return 1;
+ return 1;
}
r = ArityOfFunctor(fun1) - ArityOfFunctor(fun2);
if (r)
- return r;
+ return r;
r = cmp_atoms(NameOfFunctor(fun1), NameOfFunctor(fun2));
if (r)
- return r;
+ return r;
else
- return(compare_complex(RepAppl(t1),
- RepAppl(t1)+ArityOfFunctor(fun1),
- RepAppl(t2)));
+ return (compare_complex(RepAppl(t1), RepAppl(t1) + ArityOfFunctor(fun1),
+ RepAppl(t2)));
}
}
}
-Int Yap_compare_terms(Term d0, Term d1)
-{
- return compare(Deref(d0),Deref(d1));
+Int Yap_compare_terms(Term d0, Term d1) {
+ return compare(Deref(d0), Deref(d1));
}
-/** @pred compare( _C_, _X_, _Y_) is iso
+/** @pred compare( _C_, _X_, _Y_) is iso
As a result of comparing _X_ and _Y_, _C_ may take one of
the following values:
-+
++
`=` if _X_ and _Y_ are identical;
-+
++
`<` if _X_ precedes _Y_ in the defined order;
-+
++
`>` if _Y_ precedes _X_ in the defined order;
*/
-Int
-p_compare( USES_REGS1 )
-{ /* compare(?Op,?T1,?T2) */
- Int r = compare(Deref(ARG2), Deref(ARG3));
- Atom p;
+Int p_compare(USES_REGS1) { /* compare(?Op,?T1,?T2) */
+ Int r = compare(Deref(ARG2), Deref(ARG3));
+ Atom p;
Term t = Deref(ARG1);
if (r < 0)
p = AtomLT;
@@ -568,70 +528,46 @@ p_compare( USES_REGS1 )
if (IsAtomTerm(t)) {
Atom a = AtomOfTerm(t);
if (a == p)
- return true;
- if (a != AtomLT &&
- a != AtomGT &&
- a != AtomEq)
- Yap_Error(DOMAIN_ERROR_ORDER, ARG1, NULL);
+ return true;
+ if (a != AtomLT && a != AtomGT && a != AtomEq)
+ Yap_Error(DOMAIN_ERROR_ORDER, ARG1, NULL);
} else {
- Yap_Error(TYPE_ERROR_ATOM, ARG1, NULL);
+ Yap_Error(TYPE_ERROR_ATOM, ARG1, NULL);
}
return false;
}
-
+
return Yap_unify_constant(ARG1, MkAtomTerm(p));
}
-
-/** @pred _X_ \== _Y_ is iso
+/** @pred _X_ \== _Y_ is iso
Terms _X_ and _Y_ are not strictly identical.
*/
-static Int
-a_noteq(Term t1, Term t2)
-{
- return (compare(t1, t2) != 0);
-}
+static Int a_noteq(Term t1, Term t2) { return (compare(t1, t2) != 0); }
-static Int
-a_gen_lt(Term t1, Term t2)
-{
- return (compare(t1, t2) < 0);
-}
+static Int a_gen_lt(Term t1, Term t2) { return (compare(t1, t2) < 0); }
-/** @pred _X_ @=< _Y_ is iso
+/** @pred _X_ @=< _Y_ is iso
Term _X_ does not follow term _Y_ in the standard order.
*/
-static Int
-a_gen_le(Term t1, Term t2)
-{
- return (compare(t1, t2) <= 0);
-}
+static Int a_gen_le(Term t1, Term t2) { return (compare(t1, t2) <= 0); }
-/** @pred _X_ @> _Y_ is iso
+/** @pred _X_ @> _Y_ is iso
Term _X_ does not follow term _Y_ in the standard order
*/
-static Int
-a_gen_gt(Term t1, Term t2)
-{
- return compare(t1, t2) > 0;
-}
+static Int a_gen_gt(Term t1, Term t2) { return compare(t1, t2) > 0; }
-/** @pred _X_ @>= _Y_ is iso
+/** @pred _X_ @>= _Y_ is iso
-Term _X_ does not precede term _Y_ in the standard order.
+Term _X_ does not precede term _Y_ in the standard order.
*/
-static Int
-a_gen_ge(Term t1, Term t2)
-{
- return compare(t1, t2) >= 0;
-}
-
+static Int a_gen_ge(Term t1, Term t2) { return compare(t1, t2) >= 0; }
/**
@}
@@ -642,19 +578,14 @@ a_gen_ge(Term t1, Term t2)
@defgroup arithmetic_cmps Arithmetic Comparison Predicates
@ingroup arithmetic
- Comparison of Numeric Expressions. Both arguments must be valid ground expressions at time of call.
+ Comparison of Numeric Expressions. Both arguments must be valid ground
+ expressions at time of call.
@{
*/
-inline static Int
-int_cmp(Int dif)
-{
- return dif;
-}
+inline static Int int_cmp(Int dif) { return dif; }
-inline static Int
-flt_cmp(Float dif)
-{
+inline static Int flt_cmp(Float dif) {
if (dif < 0.0)
return -1;
if (dif > 0.0)
@@ -662,26 +593,20 @@ flt_cmp(Float dif)
return dif = 0.0;
}
-
-static inline Int
-a_cmp(Term t1, Term t2 USES_REGS)
-{
- LOCAL_ArithError = FALSE;
+static Int a_cmp(Term t1, Term t2 USES_REGS) {
if (IsVarTerm(t1)) {
- LOCAL_ArithError = TRUE;
- Yap_Error(INSTANTIATION_ERROR, t1, "=:=/2");
- return FALSE;
+ Yap_ArithError(INSTANTIATION_ERROR, t1,
+ "while doing arithmetic comparison");
}
if (IsVarTerm(t2)) {
- LOCAL_ArithError = TRUE;
- Yap_Error(INSTANTIATION_ERROR, t2, "=:=/2");
- return FALSE;
+ Yap_ArithError(INSTANTIATION_ERROR, t2,
+ "while doing arithmetic comparison");
}
if (IsFloatTerm(t1) && IsFloatTerm(t2)) {
- return flt_cmp(FloatOfTerm(t1)-FloatOfTerm(t2));
+ return flt_cmp(FloatOfTerm(t1) - FloatOfTerm(t2));
}
if (IsIntegerTerm(t1) && IsIntegerTerm(t2)) {
- return int_cmp(IntegerOfTerm(t1)-IntegerOfTerm(t2));
+ return int_cmp(IntegerOfTerm(t1) - IntegerOfTerm(t2));
}
t1 = Yap_Eval(t1);
if (!t1) {
@@ -693,21 +618,19 @@ a_cmp(Term t1, Term t2 USES_REGS)
if (IsIntegerTerm(t2)) {
Int i2 = IntegerOfTerm(t2);
- return int_cmp(i1-i2);
+ return int_cmp(i1 - i2);
} else if (IsFloatTerm(t2)) {
Float f2 = FloatOfTerm(t2);
#if HAVE_ISNAN
if (isnan(f2)) {
- LOCAL_Error_TYPE = EVALUATION_ERROR_UNDEFINED;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = "trying to evaluate nan";
- LOCAL_ArithError = TRUE;
+ Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t2,
+ "trying to evaluate nan");
}
-#endif
- return flt_cmp(i1-f2);
+#endif
+ return flt_cmp(i1 - f2);
#ifdef USE_GMP
} else if (IsBigIntTerm(t2)) {
- return Yap_gmp_cmp_int_big(i1,t2);
+ return Yap_gmp_cmp_int_big(i1, t2);
#endif
} else {
return FALSE;
@@ -716,35 +639,31 @@ a_cmp(Term t1, Term t2 USES_REGS)
Float f1 = FloatOfTerm(t1);
#if HAVE_ISNAN
if (isnan(f1)) {
- LOCAL_Error_TYPE = EVALUATION_ERROR_UNDEFINED;
- LOCAL_Error_Term = t1;
- LOCAL_ErrorMessage = "trying to evaluate nan";
- LOCAL_ArithError = TRUE;
+ Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t1,
+ "trying to evaluate nan");
}
-#endif
+#endif
t2 = Yap_Eval(t2);
#if HAVE_ISNAN
- if (isnan(f1))
- return -1;
-#endif
+ if (isnan(f1))
+ return -1;
+#endif
if (IsIntegerTerm(t2)) {
Int i2 = IntegerOfTerm(t2);
- return flt_cmp(f1-i2);
+ return flt_cmp(f1 - i2);
} else if (IsFloatTerm(t2)) {
Float f2 = FloatOfTerm(t2);
#if HAVE_ISNAN
if (isnan(f2)) {
- LOCAL_Error_TYPE = EVALUATION_ERROR_UNDEFINED;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = "trying to evaluate nan";
- LOCAL_ArithError = TRUE;
+ Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t2,
+ "trying to evaluate nan");
}
-#endif
- return flt_cmp(f1-f2);
+#endif
+ return flt_cmp(f1 - f2);
#ifdef USE_GMP
} else if (IsBigIntTerm(t2)) {
- return Yap_gmp_cmp_float_big(f1,t2);
+ return Yap_gmp_cmp_float_big(f1, t2);
#endif
} else {
return FALSE;
@@ -755,22 +674,20 @@ a_cmp(Term t1, Term t2 USES_REGS)
t2 = Yap_Eval(t2);
if (IsIntegerTerm(t2)) {
- return Yap_gmp_cmp_big_int(t1, IntegerOfTerm(t2));
+ return Yap_gmp_cmp_big_int(t1, IntegerOfTerm(t2));
} else if (IsFloatTerm(t2)) {
- Float f2 = FloatOfTerm(t2);
+ Float f2 = FloatOfTerm(t2);
#if HAVE_ISNAN
- if (isnan(f2)) {
- LOCAL_Error_TYPE = EVALUATION_ERROR_UNDEFINED;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = "trying to evaluate nan";
- LOCAL_ArithError = TRUE;
- }
-#endif
- return Yap_gmp_cmp_big_float(t1, f2);
+ if (isnan(f2)) {
+ Yap_ArithError(EVALUATION_ERROR_UNDEFINED, t2,
+ "trying to evaluate nan");
+ }
+#endif
+ return Yap_gmp_cmp_big_float(t1, f2);
} else if (IsBigIntTerm(t2)) {
- return Yap_gmp_cmp_big_big(t1, t2);
+ return Yap_gmp_cmp_big_big(t1, t2);
} else {
- return FALSE;
+ return FALSE;
}
}
#endif
@@ -779,23 +696,17 @@ a_cmp(Term t1, Term t2 USES_REGS)
}
}
-Int
-Yap_acmp(Term t1, Term t2 USES_REGS)
-{
+Int Yap_acmp(Term t1, Term t2 USES_REGS) {
Int out = a_cmp(t1, t2 PASS_REGS);
- if (LOCAL_ArithError) { Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage); return FALSE; }
return out;
}
-static Int
-p_acomp( USES_REGS1 )
-{ /* $a_compare(?R,+X,+Y) */
+static Int p_acomp(USES_REGS1) { /* $a_compare(?R,+X,+Y) */
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
Int out;
out = a_cmp(t1, t2 PASS_REGS);
- if (LOCAL_ArithError) { Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage); return FALSE; }
return out;
}
@@ -806,9 +717,7 @@ p_acomp( USES_REGS1 )
The value of the expression _X_ is equal to the value of expression _Y_.
*/
/// @memberof =:=/2
-static Int
-a_eq(Term t1, Term t2)
-{
+static Int a_eq(Term t1, Term t2) {
CACHE_REGS
/* A =:= B */
Int out;
@@ -817,11 +726,11 @@ a_eq(Term t1, Term t2)
if (IsVarTerm(t1)) {
Yap_Error(INSTANTIATION_ERROR, t1, "=:=/2");
- return(FALSE);
+ return (FALSE);
}
if (IsVarTerm(t2)) {
Yap_Error(INSTANTIATION_ERROR, t2, "=:=/2");
- return(FALSE);
+ return (FALSE);
}
if (IsFloatTerm(t1)) {
if (IsFloatTerm(t2))
@@ -837,25 +746,21 @@ a_eq(Term t1, Term t2)
return (FloatOfTerm(t2) == IntegerOfTerm(t1));
}
}
- out = a_cmp(t1,t2 PASS_REGS);
- if (LOCAL_ArithError) { Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage); return FALSE; }
+ out = a_cmp(t1, t2 PASS_REGS);
return out == 0;
}
-
/*
@pred +_X_ =\\= _Y_ is iso
Difference of arithmetic expressions
- The value of the expression _X_ is different from the value of expression _Y_.
+ The value of the expression _X_ is different from the value of expression
+ _Y_.
*/
/// @memberof =\\=/2
-static Int
-a_dif(Term t1, Term t2)
-{
+static Int a_dif(Term t1, Term t2) {
CACHE_REGS
- Int out = a_cmp(Deref(t1),Deref(t2) PASS_REGS);
- if (LOCAL_ArithError) { Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage); return FALSE; }
+ Int out = a_cmp(Deref(t1), Deref(t2) PASS_REGS);
return out != 0;
}
@@ -866,12 +771,9 @@ a_dif(Term t1, Term t2)
The value of the expression _X_ is less than or equal to the value
of expression _Y_.
*/
-static Int
-a_gt(Term t1, Term t2)
-{ /* A > B */
+static Int a_gt(Term t1, Term t2) { /* A > B */
CACHE_REGS
- Int out = a_cmp(Deref(t1),Deref(t2) PASS_REGS);
- if (LOCAL_ArithError) { Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage); return FALSE; }
+ Int out = a_cmp(Deref(t1), Deref(t2) PASS_REGS);
return out > 0;
}
@@ -882,12 +784,9 @@ a_gt(Term t1, Term t2)
The value of the expression _X_ is greater than or equal to the
value of expression _Y_.
*/
-static Int
-a_ge(Term t1, Term t2)
-{ /* A >= B */
+static Int a_ge(Term t1, Term t2) { /* A >= B */
CACHE_REGS
- Int out = a_cmp(Deref(t1),Deref(t2) PASS_REGS);
- if (LOCAL_ArithError) { Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage); return FALSE; }
+ Int out = a_cmp(Deref(t1), Deref(t2) PASS_REGS);
return out >= 0;
}
@@ -899,12 +798,9 @@ a_ge(Term t1, Term t2)
_Y_.
*/
/// @memberof 2
-static Int
-a_lt(Term t1, Term t2)
-{ /* A < B */
+static Int a_lt(Term t1, Term t2) { /* A < B */
CACHE_REGS
- Int out = a_cmp(Deref(t1),Deref(t2) PASS_REGS);
- if (LOCAL_ArithError) { Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage); return FALSE; }
+ Int out = a_cmp(Deref(t1), Deref(t2) PASS_REGS);
return out < 0;
}
@@ -913,17 +809,14 @@ a_lt(Term t1, Term t2)
@pred _X_ =< + _Y_
Lesser than or equal to arithmetic expressions
-
+
The value of the expression _X_ is less than or equal to the value
of expression _Y_.
*/
/// @memberof =2
-static Int
-a_le(Term t1, Term t2)
-{ /* A <= B */
+static Int a_le(Term t1, Term t2) { /* A <= B */
CACHE_REGS
- Int out = a_cmp(Deref(t1),Deref(t2) PASS_REGS);
- if (LOCAL_ArithError) { Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage); return FALSE; }
+ Int out = a_cmp(Deref(t1), Deref(t2) PASS_REGS);
return out <= 0;
}
@@ -931,12 +824,10 @@ a_le(Term t1, Term t2)
@}
*/
-void
-Yap_InitCmpPreds(void)
-{
+void Yap_InitCmpPreds(void) {
Yap_InitCmpPred("=:=", 2, a_eq, SafePredFlag | BinaryPredFlag);
Yap_InitCmpPred("=\\=", 2, a_dif, SafePredFlag | BinaryPredFlag);
- Yap_InitCmpPred(">", 2, a_gt, SafePredFlag | BinaryPredFlag);
+ Yap_InitCmpPred(">", 2, a_gt, SafePredFlag | BinaryPredFlag);
Yap_InitCmpPred("=<", 2, a_le, SafePredFlag | BinaryPredFlag);
Yap_InitCmpPred("<", 2, a_lt, SafePredFlag | BinaryPredFlag);
Yap_InitCmpPred(">=", 2, a_ge, SafePredFlag | BinaryPredFlag);
diff --git a/C/compiler.c b/C/compiler.c
index 19a404be2..bffd9ab19 100644
--- a/C/compiler.c
+++ b/C/compiler.c
@@ -11,7 +11,8 @@
* File: compiler.c *
* comments: Clause compiler *
* *
-* Last rev: $Date: 2008-08-06 17:32:18 $,$Author: vsc $ *
+* Last rev: $Date: 2008-08-06 17:32:18 $,$Author: vsc $
+**
* $Log: not supported by cvs2svn $
* Revision 1.88 2008/03/13 14:37:58 vsc
* update chr
@@ -67,7 +68,8 @@
* fix debugging typo
*
* Revision 1.73 2006/04/12 20:08:51 vsc
-* make it sure that making vars safe does not propagate across branches of disjunctions.
+* make it sure that making vars safe does not propagate across branches of
+*disjunctions.
*
* Revision 1.72 2006/04/05 00:16:54 vsc
* Lots of fixes (check logfile for details
@@ -137,7 +139,8 @@
* Handle overflows when allocating big clauses properly.
*
* Revision 1.54 2004/11/19 22:08:41 vsc
-* replace SYSTEM_ERROR_INTERNAL by out OUT_OF_WHATEVER_ERROR whenever appropriate.
+* replace SYSTEM_ERROR_INTERNAL by out OUT_OF_WHATEVER_ERROR whenever
+*appropriate.
*
* Revision 1.53 2004/09/03 03:11:08 vsc
* memory management fixes
@@ -167,11 +170,11 @@
#ifdef SCCS
static char SccsId[] = "%W% %G%";
-#endif /* SCCS */
+#endif /* SCCS */
#include "Yap.h"
-#include "compile.h"
-#include "clause.h"
#include "alloc.h"
+#include "clause.h"
+#include "compile.h"
#include "yapio.h"
#if HAVE_STRING_H
#include
@@ -179,12 +182,12 @@ static char SccsId[] = "%W% %G%";
#ifdef BEAM
extern int EAM;
-//extern PInstr *CodeStart, *ppc, *ppc1, *BodyStart, *ppc_body;
+// extern PInstr *CodeStart, *ppc, *ppc1, *BodyStart, *ppc_body;
#endif
typedef struct branch_descriptor {
- int id; /* the branch id */
- Term cm; /* if a banch is associated with a commit */
+ int id; /* the branch id */
+ Term cm; /* if a banch is associated with a commit */
} branch;
typedef struct compiler_struct_struct {
@@ -232,7 +235,8 @@ static void c_arg(Int, Term, unsigned int, unsigned int, compiler_struct *);
static void c_args(Term, unsigned int, compiler_struct *);
static void c_eq(Term, Term, compiler_struct *);
static void c_test(Int, Term, compiler_struct *);
-static void c_bifun(basic_preds, Term, Term, Term, Term, Term, compiler_struct *);
+static void c_bifun(basic_preds, Term, Term, Term, Term, Term,
+ compiler_struct *);
static void c_goal(Term, Term, compiler_struct *);
static void c_body(Term, Term, compiler_struct *);
static void c_head(Term, compiler_struct *);
@@ -243,38 +247,34 @@ static void clear_bvarray(int, CELL *, compiler_struct *);
#else
static void clear_bvarray(int, CELL *);
#endif
-static void add_bvarray_op(PInstr *,CELL *, int, compiler_struct *);
+static void add_bvarray_op(PInstr *, CELL *, int, compiler_struct *);
static void AssignPerm(PInstr *, compiler_struct *);
static void CheckUnsafe(PInstr *, compiler_struct *);
static void CheckVoids(compiler_struct *);
-static int checktemp(Int, Int, compiler_vm_op, compiler_struct *);
-static Int checkreg(Int, Int, compiler_vm_op, int, compiler_struct *);
+static int checktemp(Int, Int, compiler_vm_op, compiler_struct *);
+static Int checkreg(Int, Int, compiler_vm_op, int, compiler_struct *);
static void c_layout(compiler_struct *);
static void c_optimize(PInstr *);
#ifdef SFUNC
static void compile_sf_term(Term, int);
#endif
-static void
-push_branch(int id, Term cmvar, compiler_struct *cglobs) {
+static void push_branch(int id, Term cmvar, compiler_struct *cglobs) {
cglobs->branch_pointer->id = id;
cglobs->branch_pointer->cm = cmvar;
cglobs->branch_pointer++;
}
-static int
-pop_branch(compiler_struct *cglobs) {
+static int pop_branch(compiler_struct *cglobs) {
cglobs->branch_pointer--;
- return(cglobs->branch_pointer->id);
+ return (cglobs->branch_pointer->id);
}
#ifdef TABLING
-#define is_tabled(pe) (pe->PredFlags & TabledPredFlag)
+#define is_tabled(pe) (pe->PredFlags & TabledPredFlag)
#endif /* TABLING */
-static inline int
-active_branch(int i, int onbranch)
-{
+static inline int active_branch(int i, int onbranch) {
/* register int *bp;*/
return (i == onbranch);
@@ -286,19 +286,22 @@ active_branch(int i, int onbranch)
return(i==onbranch);*/
}
-#define FAIL(M,T,E) { LOCAL_ErrorMessage=M; LOCAL_Error_TYPE = T; LOCAL_Error_Term = E; return; }
+#define FAIL(M, T, E) \
+ { \
+ LOCAL_Error_TYPE = T; \
+ return; \
+ }
#if USE_SYSTEM_MALLOC
-#define IsNewVar(v) ((CELL *)(v) >= H0 && (CELL *)(v) < LCL0)
+#define IsNewVar(v) ((CELL *)(v) >= H0 && (CELL *)(v) < LCL0)
#else
-#define IsNewVar(v) (Addr(v)cint.freep0 || Addr(v)>cglobs->cint.freep)
+#define IsNewVar(v) \
+ (Addr(v) < cglobs->cint.freep0 || Addr(v) > cglobs->cint.freep)
#endif
inline static void pop_code(unsigned int, compiler_struct *);
-inline static void
-pop_code(unsigned int level, compiler_struct *cglobs)
-{
+inline static void pop_code(unsigned int level, compiler_struct *cglobs) {
if (level == 0)
return;
if (cglobs->cint.cpc->op == pop_op)
@@ -308,8 +311,7 @@ pop_code(unsigned int level, compiler_struct *cglobs)
}
}
-static void
-adjust_current_commits(compiler_struct *cglobs) {
+static void adjust_current_commits(compiler_struct *cglobs) {
branch *bp = cglobs->branch_pointer;
while (bp > cglobs->parent_branches) {
bp--;
@@ -319,22 +321,21 @@ adjust_current_commits(compiler_struct *cglobs) {
}
}
-
-static int
-check_var(Term t, unsigned int level, Int argno, compiler_struct *cglobs) {
+static int check_var(Term t, unsigned int level, Int argno,
+ compiler_struct *cglobs) {
CACHE_REGS
int flags, new = FALSE;
Ventry *v = (Ventry *)t;
- if (IsNewVar(v)) { /* new var */
- v = (Ventry *) Yap_AllocCMem(sizeof(*v), &cglobs->cint);
+ if (IsNewVar(v)) { /* new var */
+ v = (Ventry *)Yap_AllocCMem(sizeof(*v), &cglobs->cint);
#if YAPOR_SBA
v->SelfOfVE = 0;
#else
- v->SelfOfVE = (CELL) v;
+ v->SelfOfVE = (CELL)v;
#endif
v->AdrsOfVE = t;
- *CellPtr(t) = (CELL) v;
+ *CellPtr(t) = (CELL)v;
v->KindOfVE = v->NoOfVE = Unassigned;
flags = 0;
/* Be careful with eithers. I may make a variable global in a branch,
@@ -349,12 +350,11 @@ check_var(Term t, unsigned int level, Int argno, compiler_struct *cglobs) {
And, yes, there is code like this...
*/
- if (((level > 0 || cglobs->onhead) && cglobs->curbranch == 0)
- || argno == save_pair_flag ||
- argno == save_appl_flag)
+ if (((level > 0 || cglobs->onhead) && cglobs->curbranch == 0) ||
+ argno == save_pair_flag || argno == save_appl_flag)
flags |= SafeVar;
- if ((level > 0 && cglobs->curbranch == 0) || argno == save_pair_flag ||
- argno == save_appl_flag)
+ if ((level > 0 && cglobs->curbranch == 0) || argno == save_pair_flag ||
+ argno == save_appl_flag)
flags |= GlobalVal;
v->FlagsOfVE = flags;
v->BranchOfVE = cglobs->onbranch;
@@ -367,29 +367,29 @@ check_var(Term t, unsigned int level, Int argno, compiler_struct *cglobs) {
v->FlagsOfVE |= NonVoid;
if (v->BranchOfVE > 0) {
if (!active_branch(v->BranchOfVE, cglobs->onbranch)) {
- v->AgeOfVE = v->FirstOfVE = 1;
- new = FALSE;
- v->FlagsOfVE |= BranchVar;
- /* set the original instruction correctly */
- switch (v->FirstOpForV->op) {
- case get_var_op:
- v->FirstOpForV->op = get_val_op;
- break;
- case unify_var_op:
- v->FirstOpForV->op = unify_val_op;
- break;
- case unify_last_var_op:
- v->FirstOpForV->op = unify_last_val_op;
- break;
- case put_var_op:
- v->FirstOpForV->op = put_val_op;
- break;
- case write_var_op:
- v->FirstOpForV->op = write_val_op;
- break;
- default:
- break;
- }
+ v->AgeOfVE = v->FirstOfVE = 1;
+ new = FALSE;
+ v->FlagsOfVE |= BranchVar;
+ /* set the original instruction correctly */
+ switch (v->FirstOpForV->op) {
+ case get_var_op:
+ v->FirstOpForV->op = get_val_op;
+ break;
+ case unify_var_op:
+ v->FirstOpForV->op = unify_val_op;
+ break;
+ case unify_last_var_op:
+ v->FirstOpForV->op = unify_last_val_op;
+ break;
+ case put_var_op:
+ v->FirstOpForV->op = put_val_op;
+ break;
+ case write_var_op:
+ v->FirstOpForV->op = write_val_op;
+ break;
+ default:
+ break;
+ }
}
}
}
@@ -398,10 +398,8 @@ check_var(Term t, unsigned int level, Int argno, compiler_struct *cglobs) {
return new;
}
-static void
-tag_var(Term t, int new, compiler_struct *cglobs)
-{
- Ventry *v = (Ventry *) t;
+static void tag_var(Term t, int new, compiler_struct *cglobs) {
+ Ventry *v = (Ventry *)t;
if (new) {
v->FirstOpForV = cglobs->cint.cpc;
@@ -414,9 +412,8 @@ tag_var(Term t, int new, compiler_struct *cglobs)
v->AgeOfVE = cglobs->goalno;
}
-static void
-c_var(Term t, Int argno, unsigned int arity, unsigned int level, compiler_struct *cglobs)
-{
+static void c_var(Term t, Int argno, unsigned int arity, unsigned int level,
+ compiler_struct *cglobs) {
int new = check_var(Deref(t), level, argno, cglobs);
t = Deref(t);
@@ -450,37 +447,40 @@ c_var(Term t, Int argno, unsigned int arity, unsigned int level, compiler_struct
#ifdef SFUNC
if (argno < 0) {
if (new)
- Yap_emit((cglobs->onhead ? unify_s_var_op : write_s_var_op), v, -argno, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? unify_s_var_op : write_s_var_op), v, -argno,
+ &cglobs->cint);
else
- Yap_emit((cglobs->onhead ? unify_s_val_op : write_s_val_op), v, -argno, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? unify_s_val_op : write_s_val_op), v, -argno,
+ &cglobs->cint);
} else
#endif
- if (cglobs->onhead) {
- cglobs->space_used ++;
+ if (cglobs->onhead) {
+ cglobs->space_used++;
if (level == 0)
- Yap_emit((new ? (++cglobs->nvars, get_var_op) : get_val_op), t, argno, &cglobs->cint);
+ Yap_emit((new ? (++cglobs->nvars, get_var_op) : get_val_op), t, argno,
+ &cglobs->cint);
else
- Yap_emit((new ? (++cglobs->nvars, (argno == (Int)arity ?
- unify_last_var_op :
- unify_var_op)) :
- (argno == (Int)arity ? unify_last_val_op :
- unify_val_op)),
- t, Zero, &cglobs->cint);
- }
- else {
+ Yap_emit(
+ (new ? (++cglobs->nvars,
+ (argno == (Int)arity ? unify_last_var_op : unify_var_op))
+ : (argno == (Int)arity ? unify_last_val_op : unify_val_op)),
+ t, Zero, &cglobs->cint);
+ } else {
if (level == 0)
- Yap_emit((new ? (++cglobs->nvars, put_var_op) : put_val_op), t, argno, &cglobs->cint);
+ Yap_emit((new ? (++cglobs->nvars, put_var_op) : put_val_op), t, argno,
+ &cglobs->cint);
else
- Yap_emit((new ? (++cglobs->nvars, write_var_op) : write_val_op), t, Zero, &cglobs->cint);
+ Yap_emit((new ? (++cglobs->nvars, write_var_op) : write_val_op), t,
+ Zero, &cglobs->cint);
}
}
tag_var(t, new, cglobs);
}
// built-in like X >= Y.
-static void
-c_2vars(int op, Term t1, Int argno1, Term t2, Int argno2, CELL extra, unsigned int arity, unsigned int level, compiler_struct *cglobs)
-{
+static void c_2vars(int op, Term t1, Int argno1, Term t2, Int argno2,
+ CELL extra, unsigned int arity, unsigned int level,
+ compiler_struct *cglobs) {
int new1 = check_var((t1 = Deref(t1)), level, argno1, cglobs);
int new2 = check_var((t2 = Deref(t2)), level, argno2, cglobs);
@@ -495,28 +495,26 @@ c_2vars(int op, Term t1, Int argno1, Term t2, Int argno2, CELL extra, unsigned i
tag_var(t2, new2, cglobs);
}
-static void
-reset_vars(Ventry *vtable)
-{
+static void reset_vars(Ventry *vtable) {
Ventry *v = vtable;
CELL *t;
while (v != NIL) {
- t = (CELL *) v->AdrsOfVE;
+ t = (CELL *)v->AdrsOfVE;
RESET_VARIABLE(t);
v = v->NextOfVE;
}
}
-static Term
-optimize_ce(Term t, unsigned int arity, unsigned int level, compiler_struct *cglobs)
-{
+static Term optimize_ce(Term t, unsigned int arity, unsigned int level,
+ compiler_struct *cglobs) {
CACHE_REGS
CExpEntry *p = cglobs->common_exps;
int cmp = 0;
#ifdef BEAM
- if (EAM) return t;
+ if (EAM)
+ return t;
#endif
if (IsApplTerm(t) && IsExtensionFunctor(FunctorOfTerm(t)))
@@ -533,7 +531,7 @@ optimize_ce(Term t, unsigned int arity, unsigned int level, compiler_struct *cgl
break;
}
}
- if (p != NULL) { /* already there */
+ if (p != NULL) { /* already there */
return (p->VarOfCE);
}
/* first occurrence */
@@ -541,14 +539,14 @@ optimize_ce(Term t, unsigned int arity, unsigned int level, compiler_struct *cgl
return t;
}
++(cglobs->n_common_exps);
- p = (CExpEntry *) Yap_AllocCMem(sizeof(CExpEntry), &cglobs->cint);
+ p = (CExpEntry *)Yap_AllocCMem(sizeof(CExpEntry), &cglobs->cint);
p->TermOfCE = t;
p->VarOfCE = MkVarTerm();
if (HR >= (CELL *)cglobs->cint.freep0) {
/* oops, too many new variables */
save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
}
p->NextCE = cglobs->common_exps;
cglobs->common_exps = p;
@@ -560,46 +558,46 @@ optimize_ce(Term t, unsigned int arity, unsigned int level, compiler_struct *cgl
}
#ifdef SFUNC
-static void
-compile_sf_term(Term t, int argno, int level)
-{
+static void compile_sf_term(Term t, int argno, int level) {
Functor f = FunctorOfTerm(t);
CELL *p = ArgsOfSFTerm(t) - 1;
SFEntry *pe = RepSFProp(Yap_GetAProp(NameOfFunctor(f), SFProperty));
Term nullvalue = pe->NilValue;
if (level == 0)
- Yap_emit((cglobs->onhead ? get_s_f_op : put_s_f_op), f, argno, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? get_s_f_op : put_s_f_op), f, argno,
+ &cglobs->cint);
else
- Yap_emit((cglobs->onhead ? unify_s_f_op : write_s_f_op), f, Zero, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? unify_s_f_op : write_s_f_op), f, Zero,
+ &cglobs->cint);
++level;
while ((argno = *++p)) {
t = Derefa(++p);
if (t != nullvalue) {
if (IsAtomicTerm(t))
- Yap_emit((cglobs->onhead ? unify_s_a_op : write_s_a_op), t, (CELL) argno, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? unify_s_a_op : write_s_a_op), t, (CELL)argno,
+ &cglobs->cint);
else if (!IsVarTerm(t)) {
- LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
- LOCAL_Error_Term = TermNil;
- LOCAL_ErrorMessage = "illegal argument of soft functor";
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
- }
- else
- c_var(t, -argno, arity, level, cglobs);
+ LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
+ LOCAL_ErrorMessage = "illegal argument of soft functor";
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
+ } else
+ c_var(t, -argno, arity, level, cglobs);
}
}
--level;
if (level == 0)
- Yap_emit((cglobs->onhead ? get_s_end_op : put_s_end_op), Zero, Zero, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? get_s_end_op : put_s_end_op), Zero, Zero,
+ &cglobs->cint);
else
- Yap_emit((cglobs->onhead ? unify_s_end_op : write_s_end_op), Zero, Zero, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? unify_s_end_op : write_s_end_op), Zero, Zero,
+ &cglobs->cint);
}
#endif
-inline static void
-c_args(Term app, unsigned int level, compiler_struct *cglobs)
-{
+inline static void c_args(Term app, unsigned int level,
+ compiler_struct *cglobs) {
CACHE_REGS
Functor f = FunctorOfTerm(app);
unsigned int Arity = ArityOfFunctor(f);
@@ -608,7 +606,6 @@ c_args(Term app, unsigned int level, compiler_struct *cglobs)
if (level == 0) {
if (Arity >= MaxTemps) {
LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
- LOCAL_Error_Term = TermNil;
LOCAL_ErrorMessage = "exceed maximum arity of compiled goal";
save_machine_regs();
siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
@@ -620,191 +617,208 @@ c_args(Term app, unsigned int level, compiler_struct *cglobs)
c_arg(i, ArgOfTerm(i, app), Arity, level, cglobs);
}
-static int
-try_store_as_dbterm(Term t, Int argno, unsigned int arity, int level, compiler_struct *cglobs)
-{
+static int try_store_as_dbterm(Term t, Int argno, unsigned int arity, int level,
+ compiler_struct *cglobs) {
CACHE_REGS
DBTerm *dbt;
int g;
CELL *h0 = HR;
- while ((g=Yap_SizeGroundTerm(t,TRUE)) < 0) {
+ while ((g = Yap_SizeGroundTerm(t, TRUE)) < 0) {
/* oops, too deep a term */
save_machine_regs();
LOCAL_Error_Size = 0;
siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_AUX_BOTCH);
}
// if (g < 16)
- return FALSE;
+ return FALSE;
/* store ground term away */
HR = CellPtr(cglobs->cint.freep);
if ((dbt = Yap_StoreTermInDB(t, -1)) == NULL) {
HR = h0;
- switch(LOCAL_Error_TYPE) {
+ switch (LOCAL_Error_TYPE) {
case RESOURCE_ERROR_STACK:
LOCAL_Error_TYPE = YAP_NO_ERROR;
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_STACK_BOTCH);
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_STACK_BOTCH);
case RESOURCE_ERROR_TRAIL:
LOCAL_Error_TYPE = YAP_NO_ERROR;
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TRAIL_BOTCH);
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TRAIL_BOTCH);
case RESOURCE_ERROR_HEAP:
LOCAL_Error_TYPE = YAP_NO_ERROR;
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_HEAP_BOTCH);
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_HEAP_BOTCH);
case RESOURCE_ERROR_AUXILIARY_STACK:
LOCAL_Error_TYPE = YAP_NO_ERROR;
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_AUX_BOTCH);
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_AUX_BOTCH);
default:
- siglongjmp(cglobs->cint.CompilerBotch,COMPILER_ERR_BOTCH);
+ siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
}
}
HR = h0;
if (level == 0)
- Yap_emit((cglobs->onhead ? get_dbterm_op : put_dbterm_op), dbt->Entry, argno, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? get_dbterm_op : put_dbterm_op), dbt->Entry,
+ argno, &cglobs->cint);
else
Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_dbterm_op
- : unify_dbterm_op) :
- write_dbterm_op), dbt->Entry, Zero, &cglobs->cint);
+ : unify_dbterm_op)
+ : write_dbterm_op),
+ dbt->Entry, Zero, &cglobs->cint);
return TRUE;
}
-static void
-c_arg(Int argno, Term t, unsigned int arity, unsigned int level, compiler_struct *cglobs)
-{
- restart:
+static void c_arg(Int argno, Term t, unsigned int arity, unsigned int level,
+ compiler_struct *cglobs) {
+restart:
if (IsVarTerm(t))
c_var(t, argno, arity, level, cglobs);
else if (IsAtomTerm(t)) {
- if (level == 0) {
- Yap_emit((cglobs->onhead ? get_atom_op : put_atom_op), (CELL) t, argno, &cglobs->cint);
+ if (level == 0) {
+ Yap_emit((cglobs->onhead ? get_atom_op : put_atom_op), (CELL)t, argno,
+ &cglobs->cint);
} else
- Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_atom_op
- : unify_atom_op) :
- write_atom_op), (CELL) t, Zero, &cglobs->cint);
- } else if (IsIntegerTerm(t) || IsFloatTerm(t) || IsBigIntTerm(t) || IsStringTerm(t)) {
+ Yap_emit((cglobs->onhead
+ ? (argno == (Int)arity ? unify_last_atom_op : unify_atom_op)
+ : write_atom_op),
+ (CELL)t, Zero, &cglobs->cint);
+ } else if (IsIntegerTerm(t) || IsFloatTerm(t) || IsBigIntTerm(t) ||
+ IsStringTerm(t)) {
if (!IsIntTerm(t)) {
if (IsFloatTerm(t)) {
- if (level == 0)
- Yap_emit((cglobs->onhead ? get_float_op : put_float_op), t, argno, &cglobs->cint);
- else
- Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_float_op
- : unify_float_op) :
- write_float_op), t, Zero, &cglobs->cint);
+ if (level == 0)
+ Yap_emit((cglobs->onhead ? get_float_op : put_float_op), t, argno,
+ &cglobs->cint);
+ else
+ Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_float_op
+ : unify_float_op)
+ : write_float_op),
+ t, Zero, &cglobs->cint);
} else if (IsLongIntTerm(t)) {
- if (level == 0)
- Yap_emit((cglobs->onhead ? get_longint_op : put_longint_op), t, argno, &cglobs->cint);
- else
- Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_longint_op
- : unify_longint_op) :
- write_longint_op), t, Zero, &cglobs->cint);
+ if (level == 0)
+ Yap_emit((cglobs->onhead ? get_longint_op : put_longint_op), t, argno,
+ &cglobs->cint);
+ else
+ Yap_emit((cglobs->onhead
+ ? (argno == (Int)arity ? unify_last_longint_op
+ : unify_longint_op)
+ : write_longint_op),
+ t, Zero, &cglobs->cint);
} else if (IsStringTerm(t)) {
- /* we are taking a string, that is supposed to be
- guarded in the clause itself. . */
- CELL l1 = ++cglobs->labelno;
- CELL *src = RepAppl(t);
- PInstr *ocpc = cglobs->cint.cpc, *OCodeStart = cglobs->cint.CodeStart;
- Int sz = (3+src[1])*sizeof(CELL);
- CELL *dest;
+ /* we are taking a string, that is supposed to be
+ guarded in the clause itself. . */
+ CELL l1 = ++cglobs->labelno;
+ CELL *src = RepAppl(t);
+ PInstr *ocpc = cglobs->cint.cpc, *OCodeStart = cglobs->cint.CodeStart;
+ Int sz = (3 + src[1]) * sizeof(CELL);
+ CELL *dest;
- /* use a special list to store the blobs */
- cglobs->cint.cpc = cglobs->cint.icpc;
- /* if (IsFloatTerm(t)) {
- Yap_emit(align_float_op, Zero, Zero, &cglobs->cint);
- }*/
- Yap_emit(label_op, l1, Zero, &cglobs->cint);
- dest =
- Yap_emit_extra_size(blob_op, sz/CellSize, sz, &cglobs->cint);
+ /* use a special list to store the blobs */
+ cglobs->cint.cpc = cglobs->cint.icpc;
+ /* if (IsFloatTerm(t)) {
+ Yap_emit(align_float_op, Zero, Zero, &cglobs->cint);
+ }*/
+ Yap_emit(label_op, l1, Zero, &cglobs->cint);
+ dest = Yap_emit_extra_size(blob_op, sz / CellSize, sz, &cglobs->cint);
- /* copy the bignum */
- memcpy(dest, src, sz);
- /* note that we don't need to copy size info, unless we wanted
- to garbage collect clauses ;-) */
- cglobs->cint.icpc = cglobs->cint.cpc;
- if (cglobs->cint.BlobsStart == NULL)
- cglobs->cint.BlobsStart = cglobs->cint.CodeStart;
- cglobs->cint.cpc = ocpc;
- cglobs->cint.CodeStart = OCodeStart;
- /* The argument to pass to the structure is now the label for
- where we are storing the blob */
- if (level == 0)
- Yap_emit((cglobs->onhead ? get_string_op : put_string_op), l1, argno, &cglobs->cint);
- else
- Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_string_op
- : unify_string_op) :
- write_string_op), l1, Zero, &cglobs->cint);
+ /* copy the bignum */
+ memcpy(dest, src, sz);
+ /* note that we don't need to copy size info, unless we wanted
+ to garbage collect clauses ;-) */
+ cglobs->cint.icpc = cglobs->cint.cpc;
+ if (cglobs->cint.BlobsStart == NULL)
+ cglobs->cint.BlobsStart = cglobs->cint.CodeStart;
+ cglobs->cint.cpc = ocpc;
+ cglobs->cint.CodeStart = OCodeStart;
+ /* The argument to pass to the structure is now the label for
+ where we are storing the blob */
+ if (level == 0)
+ Yap_emit((cglobs->onhead ? get_string_op : put_string_op), l1, argno,
+ &cglobs->cint);
+ else
+ Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_string_op
+ : unify_string_op)
+ : write_string_op),
+ l1, Zero, &cglobs->cint);
} else {
- /* we are taking a blob, that is a binary that is supposed to be
- guarded in the clause itself. Possible examples include
- floats, long ints, bignums, bitmaps.... */
- CELL l1 = ++cglobs->labelno;
- CELL *src = RepAppl(t);
- PInstr *ocpc = cglobs->cint.cpc, *OCodeStart = cglobs->cint.CodeStart;
- Int sz = 2*sizeof(CELL)+sizeof(Functor)+
- sizeof(MP_INT)+
- ((((MP_INT *)(RepAppl(t)+2))->_mp_alloc)*sizeof(mp_limb_t));
- CELL *dest;
+ /* we are taking a blob, that is a binary that is supposed to be
+ guarded in the clause itself. Possible examples include
+ floats, long ints, bignums, bitmaps.... */
+ CELL l1 = ++cglobs->labelno;
+ CELL *src = RepAppl(t);
+ PInstr *ocpc = cglobs->cint.cpc, *OCodeStart = cglobs->cint.CodeStart;
+ Int sz =
+ 2 * sizeof(CELL) + sizeof(Functor) + sizeof(MP_INT) +
+ ((((MP_INT *)(RepAppl(t) + 2))->_mp_alloc) * sizeof(mp_limb_t));
+ CELL *dest;
- /* use a special list to store the blobs */
- cglobs->cint.cpc = cglobs->cint.icpc;
- /* if (IsFloatTerm(t)) {
- Yap_emit(align_float_op, Zero, Zero, &cglobs->cint);
- }*/
- Yap_emit(label_op, l1, Zero, &cglobs->cint);
- dest =
- Yap_emit_extra_size(blob_op, sz/CellSize, sz, &cglobs->cint);
+ /* use a special list to store the blobs */
+ cglobs->cint.cpc = cglobs->cint.icpc;
+ /* if (IsFloatTerm(t)) {
+ Yap_emit(align_float_op, Zero, Zero, &cglobs->cint);
+ }*/
+ Yap_emit(label_op, l1, Zero, &cglobs->cint);
+ dest = Yap_emit_extra_size(blob_op, sz / CellSize, sz, &cglobs->cint);
- /* copy the bignum */
- memcpy(dest, src, sz);
- /* note that we don't need to copy size info, unless we wanted
- to garbage collect clauses ;-) */
- cglobs->cint.icpc = cglobs->cint.cpc;
- if (cglobs->cint.BlobsStart == NULL)
- cglobs->cint.BlobsStart = cglobs->cint.CodeStart;
- cglobs->cint.cpc = ocpc;
- cglobs->cint.CodeStart = OCodeStart;
- /* The argument to pass to the structure is now the label for
- where we are storing the blob */
- if (level == 0)
- Yap_emit((cglobs->onhead ? get_bigint_op : put_bigint_op), l1, argno, &cglobs->cint);
- else
- Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_bigint_op
- : unify_bigint_op) :
- write_bigint_op), l1, Zero, &cglobs->cint);
+ /* copy the bignum */
+ memcpy(dest, src, sz);
+ /* note that we don't need to copy size info, unless we wanted
+ to garbage collect clauses ;-) */
+ cglobs->cint.icpc = cglobs->cint.cpc;
+ if (cglobs->cint.BlobsStart == NULL)
+ cglobs->cint.BlobsStart = cglobs->cint.CodeStart;
+ cglobs->cint.cpc = ocpc;
+ cglobs->cint.CodeStart = OCodeStart;
+ /* The argument to pass to the structure is now the label for
+ where we are storing the blob */
+ if (level == 0)
+ Yap_emit((cglobs->onhead ? get_bigint_op : put_bigint_op), l1, argno,
+ &cglobs->cint);
+ else
+ Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_bigint_op
+ : unify_bigint_op)
+ : write_bigint_op),
+ l1, Zero, &cglobs->cint);
}
/* That's it folks! */
return;
}
if (level == 0)
- Yap_emit((cglobs->onhead ? get_num_op : put_num_op), (CELL) t, argno, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? get_num_op : put_num_op), (CELL)t, argno,
+ &cglobs->cint);
else
- Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_num_op
- : unify_num_op) :
- write_num_op), (CELL) t, Zero, &cglobs->cint);
+ Yap_emit((cglobs->onhead
+ ? (argno == (Int)arity ? unify_last_num_op : unify_num_op)
+ : write_num_op),
+ (CELL)t, Zero, &cglobs->cint);
} else if (IsPairTerm(t)) {
cglobs->space_used += 2;
if (optimizer_on && level < 6) {
#if !defined(THREADS) && !defined(YAPOR)
/* discard code sharing because we cannot write on shared stuff */
- if (FALSE && !(cglobs->cint.CurrentPred->PredFlags & (DynamicPredFlag|LogUpdatePredFlag))) {
- if (try_store_as_dbterm(t, argno, arity, level, cglobs))
- return;
- }
-#endif
+ if (FALSE &&
+ !(cglobs->cint.CurrentPred->PredFlags &
+ (DynamicPredFlag | LogUpdatePredFlag))) {
+ if (try_store_as_dbterm(t, argno, arity, level, cglobs))
+ return;
+ }
+#endif
t = optimize_ce(t, arity, level, cglobs);
if (IsVarTerm(t)) {
- c_var(t, argno, arity, level, cglobs);
- return;
+ c_var(t, argno, arity, level, cglobs);
+ return;
}
}
if (level == 0)
- Yap_emit((cglobs->onhead ? get_list_op : put_list_op), Zero, argno, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? get_list_op : put_list_op), Zero, argno,
+ &cglobs->cint);
else if (argno == (Int)arity)
- Yap_emit((cglobs->onhead ? unify_last_list_op : write_last_list_op), Zero, Zero, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? unify_last_list_op : write_last_list_op), Zero,
+ Zero, &cglobs->cint);
else
- Yap_emit((cglobs->onhead ? unify_list_op : write_list_op), Zero, Zero, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? unify_list_op : write_list_op), Zero, Zero,
+ &cglobs->cint);
++level;
c_arg(1, HeadOfTerm(t), 2, level, cglobs);
if (argno == (Int)arity) {
- /* optimise for tail recursion */
+ /* optimise for tail recursion */
t = TailOfTerm(t);
goto restart;
}
@@ -814,20 +828,23 @@ c_arg(Int argno, Term t, unsigned int arity, unsigned int level, compiler_struct
pop_code(level, cglobs);
}
} else if (IsRefTerm(t)) {
- PELOCK(40,cglobs->cint.CurrentPred);
- if (!(cglobs->cint.CurrentPred->PredFlags & (DynamicPredFlag|LogUpdatePredFlag))) {
+ PELOCK(40, cglobs->cint.CurrentPred);
+ if (!(cglobs->cint.CurrentPred->PredFlags &
+ (DynamicPredFlag | LogUpdatePredFlag))) {
CACHE_REGS
UNLOCK(cglobs->cint.CurrentPred->PELock);
- FAIL("can not compile data base reference",TYPE_ERROR_CALLABLE,t);
+ FAIL("can not compile data base reference", TYPE_ERROR_CALLABLE, t);
} else {
UNLOCK(cglobs->cint.CurrentPred->PELock);
cglobs->hasdbrefs = TRUE;
if (level == 0)
- Yap_emit((cglobs->onhead ? get_atom_op : put_atom_op), (CELL) t, argno, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? get_atom_op : put_atom_op), (CELL)t, argno,
+ &cglobs->cint);
else
- Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_atom_op
- : unify_atom_op) :
- write_atom_op), (CELL) t, Zero, &cglobs->cint);
+ Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_atom_op
+ : unify_atom_op)
+ : write_atom_op),
+ (CELL)t, Zero, &cglobs->cint);
}
} else {
@@ -839,26 +856,27 @@ c_arg(Int argno, Term t, unsigned int arity, unsigned int level, compiler_struct
#endif
if (optimizer_on) {
- if (!(cglobs->cint.CurrentPred->PredFlags & (DynamicPredFlag|LogUpdatePredFlag))) {
- if (try_store_as_dbterm(t, argno, arity, level, cglobs))
- return;
- }
+ if (!(cglobs->cint.CurrentPred->PredFlags &
+ (DynamicPredFlag | LogUpdatePredFlag))) {
+ if (try_store_as_dbterm(t, argno, arity, level, cglobs))
+ return;
+ }
t = optimize_ce(t, arity, level, cglobs);
if (IsVarTerm(t)) {
- c_var(t, argno, arity, level, cglobs);
- return;
+ c_var(t, argno, arity, level, cglobs);
+ return;
}
}
- cglobs->space_used += 1+arity;
+ cglobs->space_used += 1 + arity;
if (level == 0)
Yap_emit((cglobs->onhead ? get_struct_op : put_struct_op),
- (CELL) FunctorOfTerm(t), argno, &cglobs->cint);
+ (CELL)FunctorOfTerm(t), argno, &cglobs->cint);
else if (argno == (Int)arity)
Yap_emit((cglobs->onhead ? unify_last_struct_op : write_last_struct_op),
- (CELL) FunctorOfTerm(t), Zero, &cglobs->cint);
+ (CELL)FunctorOfTerm(t), Zero, &cglobs->cint);
else
Yap_emit((cglobs->onhead ? unify_struct_op : write_struct_op),
- (CELL) FunctorOfTerm(t), Zero, &cglobs->cint);
+ (CELL)FunctorOfTerm(t), Zero, &cglobs->cint);
++level;
c_args(t, level, cglobs);
--level;
@@ -868,9 +886,7 @@ c_arg(Int argno, Term t, unsigned int arity, unsigned int level, compiler_struct
}
}
-static void
-c_eq(Term t1, Term t2, compiler_struct *cglobs)
-{
+static void c_eq(Term t1, Term t2, compiler_struct *cglobs) {
CACHE_REGS
if (t1 == t2) {
Yap_emit(nop_op, Zero, Zero, &cglobs->cint);
@@ -884,65 +900,65 @@ c_eq(Term t1, Term t2, compiler_struct *cglobs)
} else {
/* compile unification */
if (IsAtomicTerm(t1)) {
- /* just check if they unify */
- if (!IsAtomicTerm(t2) || !Yap_unify(t1,t2)) {
- /* they don't */
- Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
- return;
- }
- /* they do */
- Yap_emit(nop_op, Zero, Zero, &cglobs->cint);
- return;
+ /* just check if they unify */
+ if (!IsAtomicTerm(t2) || !Yap_unify(t1, t2)) {
+ /* they don't */
+ Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
+ return;
+ }
+ /* they do */
+ Yap_emit(nop_op, Zero, Zero, &cglobs->cint);
+ return;
} else if (IsPairTerm(t1)) {
- /* just check if they unify */
- if (!IsPairTerm(t2)) {
- /* they don't */
- Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
- return;
- }
- /* they might */
- c_eq(HeadOfTerm(t1), HeadOfTerm(t2), cglobs);
- c_eq(TailOfTerm(t1), TailOfTerm(t2), cglobs);
- return;
+ /* just check if they unify */
+ if (!IsPairTerm(t2)) {
+ /* they don't */
+ Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
+ return;
+ }
+ /* they might */
+ c_eq(HeadOfTerm(t1), HeadOfTerm(t2), cglobs);
+ c_eq(TailOfTerm(t1), TailOfTerm(t2), cglobs);
+ return;
} else if (IsRefTerm(t1)) {
- /* just check if they unify */
- if (t1 != t2) {
- /* they don't */
- Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
- return;
- }
- /* they do */
- Yap_emit(nop_op, Zero, Zero, &cglobs->cint);
- return;
+ /* just check if they unify */
+ if (t1 != t2) {
+ /* they don't */
+ Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
+ return;
+ }
+ /* they do */
+ Yap_emit(nop_op, Zero, Zero, &cglobs->cint);
+ return;
} else {
- /* compound terms */
- Functor f = FunctorOfTerm(t1);
- UInt i, max;
- /* just check if they unify */
- if (!IsApplTerm(t2) ||
- FunctorOfTerm(t2) != f) {
- /* they don't */
- Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
- return;
- }
- /* they might */
- max = ArityOfFunctor(f);
- for (i=0; i < max; i++) {
- c_eq(ArgOfTerm(i+1,t1), ArgOfTerm(i+1,t2), cglobs);
- }
- return;
+ /* compound terms */
+ Functor f = FunctorOfTerm(t1);
+ UInt i, max;
+ /* just check if they unify */
+ if (!IsApplTerm(t2) || FunctorOfTerm(t2) != f) {
+ /* they don't */
+ Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
+ return;
+ }
+ /* they might */
+ max = ArityOfFunctor(f);
+ for (i = 0; i < max; i++) {
+ c_eq(ArgOfTerm(i + 1, t1), ArgOfTerm(i + 1, t2), cglobs);
+ }
+ return;
}
}
}
/* first argument is an unbound var */
- if (IsNewVar(t1) && !IsVarTerm(t2) && !(cglobs->cint.CurrentPred->PredFlags & TabledPredFlag)) {
+ if (IsNewVar(t1) && !IsVarTerm(t2) &&
+ !(cglobs->cint.CurrentPred->PredFlags & TabledPredFlag)) {
Int v;
-
+
v = --cglobs->tmpreg;
c_arg(v, t2, 0, 0, cglobs);
cglobs->onhead = TRUE;
c_var(t1, v, 0, 0, cglobs);
- cglobs->onhead = FALSE;
+ cglobs->onhead = FALSE;
} else {
if (IsVarTerm(t2)) {
c_var(t1, 0, 0, 0, cglobs);
@@ -958,23 +974,20 @@ c_eq(Term t1, Term t2, compiler_struct *cglobs)
}
}
-static void
-c_test(Int Op, Term t1, compiler_struct *cglobs) {
+static void c_test(Int Op, Term t1, compiler_struct *cglobs) {
CACHE_REGS
Term t = Deref(t1);
/* be caareful, has to be first occurrence */
if (Op == _save_by) {
if (!IsNewVar(t)) {
- char s[32];
+ char s[32];
- LOCAL_Error_TYPE = UNINSTANTIATION_ERROR;
- LOCAL_Error_Term = t;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2 on bound variable", s);
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
+ LOCAL_Error_TYPE = UNINSTANTIATION_ERROR;
+ Yap_bip_name(Op, s);
+ sprintf(LOCAL_ErrorMessage, "compiling %s/2 on bound variable", s);
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
}
c_var(t, save_b_flag, 1, 0, cglobs);
return;
@@ -987,7 +1000,7 @@ c_test(Int Op, Term t1, compiler_struct *cglobs) {
if (Op == _cut_by)
c_var(t, commit_b_flag, 1, 0, cglobs);
else
- c_var(t, f_flag,(unsigned int)Op, 0, cglobs);
+ c_var(t, f_flag, (unsigned int)Op, 0, cglobs);
}
/* Arithmetic builtins will be compiled in the form:
@@ -998,8 +1011,10 @@ c_test(Int Op, Term t1, compiler_struct *cglobs) {
put_var Xk,Ak
bip_body Op,Xk
-The put_var should always be disposable, and the put_vals can be disposed of if R is an X.
-This, in the best case, Ri and Rj are WAM temp registers and this will reduce to:
+The put_var should always be disposable, and the put_vals can be disposed of if
+R is an X.
+This, in the best case, Ri and Rj are WAM temp registers and this will reduce
+to:
bip Op,Ak,Ri,Rj
@@ -1018,292 +1033,262 @@ and this should reduce to :
bip_cons Op,Xk,Ri,C
*/
-static void
-c_bifun(basic_preds Op, Term t1, Term t2, Term t3, Term Goal, Term mod, compiler_struct *cglobs)
-{
+static void c_bifun(basic_preds Op, Term t1, Term t2, Term t3, Term Goal,
+ Term mod, compiler_struct *cglobs) {
CACHE_REGS
- /* compile Z = X Op Y arithmetic function */
+ /* compile Z = X Op Y arithmetic function */
/* first we fetch the arguments */
if (IsVarTerm(t1)) {
if (IsVarTerm(t2)) {
- /* first temp */
- Int v1 = --cglobs->tmpreg;
- /* second temp */
- Int v2 = --cglobs->tmpreg;
+ /* first temp */
+ Int v1 = --cglobs->tmpreg;
+ /* second temp */
+ Int v2 = --cglobs->tmpreg;
- Yap_emit(fetch_args_vv_op, Zero, Zero, &cglobs->cint);
- /* these should be the arguments */
- c_var(t1, v1, 0, 0, cglobs);
- c_var(t2, v2, 0, 0, cglobs);
- /* now we know where the arguments are */
+ Yap_emit(fetch_args_vv_op, Zero, Zero, &cglobs->cint);
+ /* these should be the arguments */
+ c_var(t1, v1, 0, 0, cglobs);
+ c_var(t2, v2, 0, 0, cglobs);
+ /* now we know where the arguments are */
} else {
if (Op == _arg) {
- /* we know the second argument is bound */
- if (IsPrimitiveTerm(t2) || IsNumTerm(t2)) {
- Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
- return;
- } else {
- Term tn = MkVarTerm();
- Int v1 = --cglobs->tmpreg;
- Int v2 = --cglobs->tmpreg;
+ /* we know the second argument is bound */
+ if (IsPrimitiveTerm(t2) || IsNumTerm(t2)) {
+ Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
+ return;
+ } else {
+ Term tn = MkVarTerm();
+ Int v1 = --cglobs->tmpreg;
+ Int v2 = --cglobs->tmpreg;
- c_eq(t2, tn, cglobs);
- Yap_emit(fetch_args_vv_op, Zero, Zero, &cglobs->cint);
- /* these should be the arguments */
- c_var(t1, v1, 0, 0, cglobs);
- c_var(tn, v2, 0, 0, cglobs);
- }
- /* it has to be either an integer or a floating point */
+ c_eq(t2, tn, cglobs);
+ Yap_emit(fetch_args_vv_op, Zero, Zero, &cglobs->cint);
+ /* these should be the arguments */
+ c_var(t1, v1, 0, 0, cglobs);
+ c_var(tn, v2, 0, 0, cglobs);
+ }
+ /* it has to be either an integer or a floating point */
} else if (IsIntegerTerm(t2)) {
- /* first temp */
- Int v1 = 0;
+ /* first temp */
+ Int v1 = 0;
- Yap_emit(fetch_args_vi_op, IntegerOfTerm(t2), 0L, &cglobs->cint);
- /* these should be the arguments */
- c_var(t1, v1, 0, 0, cglobs);
- /* now we know where the arguments are */
+ Yap_emit(fetch_args_vi_op, IntegerOfTerm(t2), 0L, &cglobs->cint);
+ /* these should be the arguments */
+ c_var(t1, v1, 0, 0, cglobs);
+ /* now we know where the arguments are */
} else {
- char s[32];
+ char s[32];
- LOCAL_Error_TYPE = TYPE_ERROR_NUMBER;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2 with output bound", s);
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
+ Yap_bip_name(Op, s);
+ Yap_ThrowError(TYPE_ERROR_NUMBER, t2, 1,
+ "compiling %s/2 with output bound", s);
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
}
}
} else { /* t1 is bound */
/* it has to be either an integer or a floating point */
if (IsVarTerm(t2)) {
if (IsNewVar(t2)) {
- char s[32];
+ char s[32];
- LOCAL_Error_TYPE = INSTANTIATION_ERROR;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/3",s);
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
+ Yap_bip_name(Op, s);
+ Yap_ThrowError(INSTANTIATION_ERROR, t2, 1, "compiling %s/3", s);
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
}
} else {
if (Op == _functor) {
- /* both arguments are bound, we must perform unification */
- Int i2;
-
- if (!IsIntegerTerm(t2)) {
- char s[32];
+ /* both arguments are bound, we must perform unification */
+ Int i2;
- LOCAL_Error_TYPE = TYPE_ERROR_INTEGER;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling functor/3");
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
- }
- i2 = IntegerOfTerm(t2);
- if (i2 < 0) {
- char s[32];
+ if (!IsIntegerTerm(t2)) {
+ Yap_ThrowError(TYPE_ERROR_INTEGER, t2, 1, "compiling functor/3");
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
+ }
+ i2 = IntegerOfTerm(t2);
+ if (i2 < 0) {
- LOCAL_Error_TYPE = DOMAIN_ERROR_NOT_LESS_THAN_ZERO;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling functor/3");
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
- }
- if (IsNumTerm(t1)) {
- /* we will always fail */
- if (i2)
- c_goal(MkAtomTerm(AtomFalse), mod, cglobs);
- } else if (!IsAtomTerm(t1)) {
- char s[32];
+ Yap_ThrowError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, t2,
+ "compiling functor/3");
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
+ }
+ if (IsNumTerm(t1)) {
+ /* we will always fail */
+ if (i2)
+ c_goal(MkAtomTerm(AtomFalse), mod, cglobs);
+ } else if (!IsAtomTerm(t1)) {
+ char s[32];
- LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling functor/3");
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
- }
- if (i2 == 0)
- c_eq(t1, t3, cglobs);
- else {
- CELL *hi = HR;
- Int i;
+ Yap_bip_name(Op, s);
+ Yap_ThrowError(TYPE_ERROR_ATOM, t2, 4, "compiling functor/3");
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
+ }
+ if (i2 == 0)
+ c_eq(t1, t3, cglobs);
+ else {
+ CELL *hi = HR;
+ Int i;
- if (t1 == TermDot && i2 == 2) {
- if (HR+2 >= (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
- }
- RESET_VARIABLE(HR);
- RESET_VARIABLE(HR+1);
- HR += 2;
- c_eq(AbsPair(HR-2),t3, cglobs);
- } else if (i2 < 256 && IsAtomTerm(t1)) {
- *HR++ = (CELL)Yap_MkFunctor(AtomOfTerm(t1),i2);
- for (i=0; i < i2; i++) {
- if (HR >= (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
- }
- RESET_VARIABLE(HR);
- HR++;
- }
- c_eq(AbsAppl(hi),t3, cglobs);
- } else {
- /* compile as default */
- Functor f = FunctorOfTerm(Goal);
- Prop p0 = PredPropByFunc(f, mod);
- if (EndOfPAEntr(p0)) {
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_HEAP_BOTCH);
- }
- c_args(Goal, 0, cglobs);
- Yap_emit(safe_call_op, (CELL)p0 , Zero, &cglobs->cint);
- Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
- Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
- return;
- }
- }
+ if (t1 == TermDot && i2 == 2) {
+ if (HR + 2 >= (CELL *)cglobs->cint.freep0) {
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
+ }
+ RESET_VARIABLE(HR);
+ RESET_VARIABLE(HR + 1);
+ HR += 2;
+ c_eq(AbsPair(HR - 2), t3, cglobs);
+ } else if (i2 < 256 && IsAtomTerm(t1)) {
+ *HR++ = (CELL)Yap_MkFunctor(AtomOfTerm(t1), i2);
+ for (i = 0; i < i2; i++) {
+ if (HR >= (CELL *)cglobs->cint.freep0) {
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
+ }
+ RESET_VARIABLE(HR);
+ HR++;
+ }
+ c_eq(AbsAppl(hi), t3, cglobs);
+ } else {
+ /* compile as default */
+ Functor f = FunctorOfTerm(Goal);
+ Prop p0 = PredPropByFunc(f, mod);
+ if (EndOfPAEntr(p0)) {
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_HEAP_BOTCH);
+ }
+ c_args(Goal, 0, cglobs);
+ Yap_emit(safe_call_op, (CELL)p0, Zero, &cglobs->cint);
+ Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
+ return;
+ }
+ }
} else if (Op == _arg) {
- Int i1;
- if (IsIntegerTerm(t1))
- i1 = IntegerOfTerm(t1);
- else {
- char s[32];
+ Int i1;
+ if (IsIntegerTerm(t1))
+ i1 = IntegerOfTerm(t1);
+ else {
+ char s[32];
- LOCAL_Error_TYPE = TYPE_ERROR_INTEGER;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
- }
- if (IsAtomicTerm(t2) ||
- (IsApplTerm(t2) && IsExtensionFunctor(FunctorOfTerm(t2)))) {
- char s[32];
+ Yap_bip_name(Op, s);
+ Yap_ThrowError(TYPE_ERROR_INTEGER, t1, 1, "compiling %s/2", s);
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
+ }
+ if (IsAtomicTerm(t2) ||
+ (IsApplTerm(t2) && IsExtensionFunctor(FunctorOfTerm(t2)))) {
+ char s[32];
- LOCAL_Error_TYPE = TYPE_ERROR_COMPOUND;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
- } else if (IsApplTerm(t2)) {
- Functor f = FunctorOfTerm(t2);
- if (i1 < 1 || i1 > ArityOfFunctor(f)) {
- c_goal(MkAtomTerm(AtomFalse), mod, cglobs);
- } else {
- c_eq(ArgOfTerm(i1, t2), t3, cglobs);
- }
- return;
- } else if (IsPairTerm(t2)) {
- switch (i1) {
- case 1:
- c_eq(HeadOfTerm(t2), t3, cglobs);
- return;
- case 2:
- c_eq(TailOfTerm(t2), t3, cglobs);
- return;
- default:
- c_goal(MkAtomTerm(AtomFalse), mod, cglobs);
- return;
- }
- }
+ LOCAL_Error_TYPE = TYPE_ERROR_COMPOUND;
+ Yap_bip_name(Op, s);
+ Yap_ThrowError(TYPE_ERROR_COMPOUND, t2, 1, "compiling %s/2", 1, s);
+
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
+ } else if (IsApplTerm(t2)) {
+ Functor f = FunctorOfTerm(t2);
+ if (i1 < 1 || i1 > ArityOfFunctor(f)) {
+ c_goal(MkAtomTerm(AtomFalse), mod, cglobs);
+ } else {
+ c_eq(ArgOfTerm(i1, t2), t3, cglobs);
+ }
+ return;
+ } else if (IsPairTerm(t2)) {
+ switch (i1) {
+ case 1:
+ c_eq(HeadOfTerm(t2), t3, cglobs);
+ return;
+ case 2:
+ c_eq(TailOfTerm(t2), t3, cglobs);
+ return;
+ default:
+ c_goal(MkAtomTerm(AtomFalse), mod, cglobs);
+ return;
+ }
+ }
} else {
- char s[32];
+ char s[32];
- LOCAL_Error_TYPE = TYPE_ERROR_INTEGER;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
+ LOCAL_Error_TYPE = TYPE_ERROR_INTEGER;
+ Yap_bip_name(Op, s);
+ sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
}
}
if (Op == _functor) {
if (!IsAtomicTerm(t1)) {
- char s[32];
+ char s[32];
- LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
- LOCAL_Error_Term = t1;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
+ LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
+ Yap_bip_name(Op, s);
+ sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
} else {
- if (!IsVarTerm(t2)) {
- Int arity;
+ if (!IsVarTerm(t2)) {
+ Int arity;
- /* We actually have the term ready, so let's just do the unification now */
- if (!IsIntegerTerm(t2)) {
- char s[32];
+ /* We actually have the term ready, so let's just do the unification
+ * now */
+ if (!IsIntegerTerm(t2)) {
+ char s[32];
- LOCAL_Error_TYPE = TYPE_ERROR_INTEGER;
- LOCAL_Error_Term = t2;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
- }
- arity = IntOfTerm(t2);
- if (arity < 0) {
- /* fail straight away */
- Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
- }
- if (arity) {
- Term tnew;
- if (!IsAtomTerm(t1)) {
- char s[32];
+ LOCAL_Error_TYPE = TYPE_ERROR_INTEGER;
+ Yap_bip_name(Op, s);
+ sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
+ }
+ arity = IntOfTerm(t2);
+ if (arity < 0) {
+ /* fail straight away */
+ Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
+ }
+ if (arity) {
+ Term tnew;
+ if (!IsAtomTerm(t1)) {
+ char s[32];
- LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
- LOCAL_Error_Term = t1;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
- }
- if (HR+1+arity >= (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
- }
- tnew = AbsAppl(HR);
- *HR++ = (CELL)Yap_MkFunctor(AtomOfTerm(t1),arity);
- while (arity--) {
- RESET_VARIABLE(HR);
- HR++;
- }
- c_eq(tnew, t3, cglobs);
- } else {
- /* just unify the two arguments */
- c_eq(t1,t3, cglobs);
- }
- return;
- } else {
- /* first temp */
- Int v1 = 0;
- Yap_emit(fetch_args_cv_op, t1, Zero, &cglobs->cint);
- /* these should be the arguments */
- c_var(t2, v1, 0, 0, cglobs);
- /* now we know where the arguments are */
- }
+ LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
+ Yap_bip_name(Op, s);
+ sprintf(LOCAL_ErrorMessage, "compiling %s/2", s);
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
+ }
+ if (HR + 1 + arity >= (CELL *)cglobs->cint.freep0) {
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
+ }
+ tnew = AbsAppl(HR);
+ *HR++ = (CELL)Yap_MkFunctor(AtomOfTerm(t1), arity);
+ while (arity--) {
+ RESET_VARIABLE(HR);
+ HR++;
+ }
+ c_eq(tnew, t3, cglobs);
+ } else {
+ /* just unify the two arguments */
+ c_eq(t1, t3, cglobs);
+ }
+ return;
+ } else {
+ /* first temp */
+ Int v1 = 0;
+ Yap_emit(fetch_args_cv_op, t1, Zero, &cglobs->cint);
+ /* these should be the arguments */
+ c_var(t2, v1, 0, 0, cglobs);
+ /* now we know where the arguments are */
+ }
}
} else if (IsIntegerTerm(t1)) {
/* first temp */
@@ -1316,53 +1301,54 @@ c_bifun(basic_preds Op, Term t1, Term t2, Term t3, Term Goal, Term mod, compiler
char s[32];
LOCAL_Error_TYPE = UNINSTANTIATION_ERROR;
- LOCAL_Error_Term = t1;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2 with output bound", s);
+ sprintf(LOCAL_ErrorMessage, "compiling %s/2 with output bound", s);
save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
}
- }
+ }
/* then we compile the opcode/result */
if (!IsVarTerm(t3)) {
if (Op == _arg) {
Term tmpvar = MkVarTerm();
if (HR == (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
}
- c_var(tmpvar,f_flag,(unsigned int)Op, 0, cglobs);
- c_eq(tmpvar,t3, cglobs);
+ c_var(tmpvar, f_flag, (unsigned int)Op, 0, cglobs);
+ c_eq(tmpvar, t3, cglobs);
} else {
char s[32];
LOCAL_Error_TYPE = UNINSTANTIATION_ERROR;
- LOCAL_Error_Term = t3;
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
Yap_bip_name(Op, s);
- sprintf(LOCAL_ErrorMessage, "compiling %s/2 with input unbound", s);
+ sprintf(LOCAL_ErrorMessage, "compiling %s/2 with input unbound", s);
save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,1);
+ siglongjmp(cglobs->cint.CompilerBotch, 1);
}
- } else if (IsNewVar(t3) && cglobs->curbranch == 0 && cglobs->cint.CurrentPred->PredFlags & TabledPredFlag) {
+ } else if (IsNewVar(t3) && cglobs->curbranch == 0 &&
+ cglobs->cint.CurrentPred->PredFlags & TabledPredFlag) {
Term nv = MkVarTerm();
- c_var(nv,f_flag,(unsigned int)Op, 0, cglobs);
+ c_var(nv, f_flag, (unsigned int)Op, 0, cglobs);
if (Op == _functor) {
Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
}
- /* make sure that we first get the true t3, and then bind it to nv. That way it will be confitional */
+ /* make sure that we first get the true t3, and then bind it to nv. That way
+ * it will be confitional */
c_eq(t3, nv, cglobs);
- } else if (IsNewVar(t3) && cglobs->curbranch == 0 /* otherwise you may have trouble with z(X) :- ( Z is X*2 ; write(Z)) */) {
- c_var(t3,f_flag,(unsigned int)Op, 0, cglobs);
+ } else if (
+ IsNewVar(t3) &&
+ cglobs->curbranch ==
+ 0 /* otherwise you may have trouble with z(X) :- ( Z is X*2 ; write(Z)) */) {
+ c_var(t3, f_flag, (unsigned int)Op, 0, cglobs);
if (Op == _functor) {
Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
}
} else {
- /* generate code for a temp and then unify temp with previous variable */
+ /* generate code for a temp and then unify temp with previous variable */
Yap_emit(f_0_op, 0, (unsigned int)Op, &cglobs->cint);
/* I have to do it here, before I do the unification */
if (Op == _functor) {
@@ -1375,9 +1361,7 @@ c_bifun(basic_preds Op, Term t1, Term t2, Term t3, Term Goal, Term mod, compiler
}
}
-static void
-c_functor(Term Goal, Term mod, compiler_struct *cglobs)
-{
+static void c_functor(Term Goal, Term mod, compiler_struct *cglobs) {
CACHE_REGS
Term t1 = ArgOfTerm(1, Goal);
Term t2 = ArgOfTerm(2, Goal);
@@ -1388,23 +1372,22 @@ c_functor(Term Goal, Term mod, compiler_struct *cglobs)
} else if (IsNonVarTerm(t1)) {
/* just split the structure */
if (IsAtomicTerm(t1)) {
- c_eq(t1,t2, cglobs);
- c_eq(t3,MkIntTerm(0), cglobs);
+ c_eq(t1, t2, cglobs);
+ c_eq(t3, MkIntTerm(0), cglobs);
} else if (IsApplTerm(t1)) {
Functor f = FunctorOfTerm(t1);
- c_eq(t2,MkAtomTerm(NameOfFunctor(f)), cglobs);
- c_eq(t3,MkIntegerTerm(ArityOfFunctor(f)), cglobs);
+ c_eq(t2, MkAtomTerm(NameOfFunctor(f)), cglobs);
+ c_eq(t3, MkIntegerTerm(ArityOfFunctor(f)), cglobs);
} else /* list */ {
- c_eq(t2,TermDot, cglobs);
- c_eq(t3,MkIntTerm(2), cglobs);
+ c_eq(t2, TermDot, cglobs);
+ c_eq(t3, MkIntTerm(2), cglobs);
}
- } else if (IsVarTerm(t2) && IsNewVar(t2) &&
- IsVarTerm(t3) && IsNewVar(t3)) {
+ } else if (IsVarTerm(t2) && IsNewVar(t2) && IsVarTerm(t3) && IsNewVar(t3)) {
Int v1 = --cglobs->tmpreg;
Yap_emit(fetch_args_vi_op, Zero, Zero, &cglobs->cint);
c_var(t1, v1, 0, 0, cglobs);
- c_var(t2,f_flag,(unsigned int)_functor, 0, cglobs);
- c_var(t3,f_flag,(unsigned int)_functor, 0, cglobs);
+ c_var(t2, f_flag, (unsigned int)_functor, 0, cglobs);
+ c_var(t3, f_flag, (unsigned int)_functor, 0, cglobs);
} else {
Functor f = FunctorOfTerm(Goal);
Prop p0 = PredPropByFunc(f, mod);
@@ -1418,33 +1401,32 @@ c_functor(Term Goal, Term mod, compiler_struct *cglobs)
} else if (call_counting)
Yap_emit(count_call_op, (CELL)RepPredProp(p0), Zero, &cglobs->cint);
c_args(Goal, 0, cglobs);
- Yap_emit(safe_call_op, (CELL)p0 , Zero, &cglobs->cint);
+ Yap_emit(safe_call_op, (CELL)p0, Zero, &cglobs->cint);
Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
}
}
-static int
-IsTrueGoal(Term t) {
- if (IsVarTerm(t)) return(FALSE);
+static int IsTrueGoal(Term t) {
+ if (IsVarTerm(t))
+ return (FALSE);
if (IsApplTerm(t)) {
Functor f = FunctorOfTerm(t);
if (f == FunctorModule) {
- return(IsTrueGoal(ArgOfTerm(2,t)));
+ return (IsTrueGoal(ArgOfTerm(2, t)));
}
- if (f == FunctorComma || f == FunctorOr || f == FunctorVBar || f == FunctorArrow) {
- return(IsTrueGoal(ArgOfTerm(1,t)) && IsTrueGoal(ArgOfTerm(2,t)));
+ if (f == FunctorComma || f == FunctorOr || f == FunctorVBar ||
+ f == FunctorArrow) {
+ return (IsTrueGoal(ArgOfTerm(1, t)) && IsTrueGoal(ArgOfTerm(2, t)));
}
- return(FALSE);
+ return (FALSE);
}
- return(t == MkAtomTerm(AtomTrue));
+ return (t == MkAtomTerm(AtomTrue));
}
-static void
-emit_special_label(Term Goal, compiler_struct *cglobs)
-{
- special_label_op lab_op = IntOfTerm(ArgOfTerm(1,Goal));
- special_label_id lab_id = IntOfTerm(ArgOfTerm(2,Goal));
+static void emit_special_label(Term Goal, compiler_struct *cglobs) {
+ special_label_op lab_op = IntOfTerm(ArgOfTerm(1, Goal));
+ special_label_id lab_id = IntOfTerm(ArgOfTerm(2, Goal));
UInt label_name;
switch (lab_op) {
@@ -1490,34 +1472,12 @@ emit_special_label(Term Goal, compiler_struct *cglobs)
}
}
-static void
-c_goal(Term Goal, Term mod, compiler_struct *cglobs)
-{
+static void c_goal(Term Goal, Term mod, compiler_struct *cglobs) {
Functor f;
PredEntry *p;
Prop p0;
- if (IsVarTerm(Goal)) {
- Goal = Yap_MkApplTerm(FunctorCall, 1, &Goal);
- }
- if (IsApplTerm(Goal) && FunctorOfTerm(Goal) == FunctorModule) {
- Term M = ArgOfTerm(1, Goal);
-
- if (IsVarTerm(M) || !IsAtomTerm(M)) {
- CACHE_REGS
- if (IsVarTerm(M)) {
- LOCAL_Error_TYPE = INSTANTIATION_ERROR;
- } else {
- LOCAL_Error_TYPE = TYPE_ERROR_ATOM;
- }
- LOCAL_Error_Term = M;
- LOCAL_ErrorMessage = "in module name";
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
- }
- Goal = ArgOfTerm(2, Goal);
- mod = M;
- }
+ Goal = Yap_YapStripModule(Goal, &mod);
if (IsVarTerm(Goal)) {
Goal = Yap_MkApplTerm(FunctorCall, 1, &Goal);
} else if (IsNumTerm(Goal)) {
@@ -1526,10 +1486,9 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
} else if (IsRefTerm(Goal)) {
CACHE_REGS
LOCAL_Error_TYPE = TYPE_ERROR_DBREF;
- LOCAL_Error_Term = Goal;
- FAIL("goal argument in static procedure can not be a data base reference", TYPE_ERROR_CALLABLE, Goal);
- }
- else if (IsPairTerm(Goal)) {
+ FAIL("goal argument in static procedure can not be a data base reference",
+ TYPE_ERROR_CALLABLE, Goal);
+ } else if (IsPairTerm(Goal)) {
Goal = Yap_MkApplTerm(FunctorCall, 1, &Goal);
}
if (IsAtomTerm(Goal)) {
@@ -1538,59 +1497,60 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
if (atom == AtomFail || atom == AtomFalse) {
Yap_emit(fail_op, Zero, Zero, &cglobs->cint);
return;
- }
- else if (atom == AtomTrue || atom == AtomOtherwise) {
+ } else if (atom == AtomTrue || atom == AtomOtherwise) {
if (cglobs->onlast) {
- Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- PELOCK(41,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred))
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
- else
+ PELOCK(41, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred))
+ Yap_emit(table_new_answer_op, Zero,
+ cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ else
#endif /* TABLING */
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
}
return;
- }
- else if (atom == AtomCut) {
+ } else if (atom == AtomCut) {
if (profiling)
- Yap_emit(enter_profiling_op, (CELL)RepPredProp(PredPropByAtom(AtomCut,0)), Zero, &cglobs->cint);
+ Yap_emit(enter_profiling_op,
+ (CELL)RepPredProp(PredPropByAtom(AtomCut, 0)), Zero,
+ &cglobs->cint);
else if (call_counting)
- Yap_emit(count_call_op, (CELL)RepPredProp(PredPropByAtom(AtomCut,0)), Zero, &cglobs->cint);
+ Yap_emit(count_call_op, (CELL)RepPredProp(PredPropByAtom(AtomCut, 0)),
+ Zero, &cglobs->cint);
if (cglobs->onlast) {
- /* never a problem here with a -> b, !, c ; d */
- Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
+ /* never a problem here with a -> b, !, c ; d */
+ Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- PELOCK(42,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred)) {
- Yap_emit_3ops(cut_op, Zero, Zero, Zero, &cglobs->cint);
- /* needs to adjust previous commits */
- Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
- Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
- }
- else
+ PELOCK(42, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred)) {
+ Yap_emit_3ops(cut_op, Zero, Zero, Zero, &cglobs->cint);
+ /* needs to adjust previous commits */
+ Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(table_new_answer_op, Zero,
+ cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ } else
#endif /* TABLING */
- {
- Yap_emit_3ops(cutexit_op, Zero, Zero, Zero, &cglobs->cint);
- /* needs to adjust previous commits */
- Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
- Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
- }
+ {
+ Yap_emit_3ops(cutexit_op, Zero, Zero, Zero, &cglobs->cint);
+ /* needs to adjust previous commits */
+ Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ }
#ifdef TABLING
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
- }
- else {
- Yap_emit_3ops(cut_op, Zero, Zero, Zero, &cglobs->cint);
- /* needs to adjust previous commits */
- Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
- Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
- adjust_current_commits(cglobs);
+ } else {
+ Yap_emit_3ops(cut_op, Zero, Zero, Zero, &cglobs->cint);
+ /* needs to adjust previous commits */
+ Yap_emit(empty_call_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(restore_tmps_and_skip_op, Zero, Zero, &cglobs->cint);
+ adjust_current_commits(cglobs);
}
return;
}
@@ -1602,9 +1562,13 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
/* I need an either_me */
cglobs->needs_env = TRUE;
if (profiling)
- Yap_emit(enter_profiling_op, (CELL)RepPredProp(PredPropByAtom(AtomRepeat,0)), Zero, &cglobs->cint);
+ Yap_emit(enter_profiling_op,
+ (CELL)RepPredProp(PredPropByAtom(AtomRepeat, 0)), Zero,
+ &cglobs->cint);
else if (call_counting)
- Yap_emit(count_call_op, (CELL)RepPredProp(PredPropByAtom(AtomRepeat,0)), Zero, &cglobs->cint);
+ Yap_emit(count_call_op,
+ (CELL)RepPredProp(PredPropByAtom(AtomRepeat, 0)), Zero,
+ &cglobs->cint);
cglobs->or_found = TRUE;
push_branch(cglobs->onbranch, TermNil, cglobs);
cglobs->curbranch++;
@@ -1619,20 +1583,21 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
Yap_emit(label_op, l2, Zero, &cglobs->cint);
if (cglobs->onlast) {
#ifdef TABLING
- PELOCK(43,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred)) {
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
- } else {
+ PELOCK(43, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred)) {
+ Yap_emit(table_new_answer_op, Zero,
+ cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ } else {
#endif
- Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- }
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ }
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
- } else {
- ++cglobs->goalno;
- }
+ } else {
+ ++cglobs->goalno;
+ }
cglobs->onbranch = pop_branch(cglobs);
Yap_emit(pop_or_op, Zero, Zero, &cglobs->cint);
/* --cglobs->onbranch; */
@@ -1649,8 +1614,7 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
Yap_emit(enter_profiling_op, (CELL)p, Zero, &cglobs->cint);
if (call_counting)
Yap_emit(count_call_op, (CELL)p, Zero, &cglobs->cint);
- }
- else {
+ } else {
f = FunctorOfTerm(Goal);
p = RepPredProp(p0 = Yap_PredPropByFunctorNonThreadLocal(f, mod));
if (EndOfPAEntr(p0)) {
@@ -1675,124 +1639,120 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
cglobs->onbranch = cglobs->curbranch;
cglobs->or_found = TRUE;
do {
- arg = ArgOfTerm(1, Goal);
- looking_at_commit = IsApplTerm(arg) &&
- FunctorOfTerm(arg) == FunctorArrow;
- if (frst) {
- if (optimizing_commit) {
- Yap_emit(label_op, l, Zero, &cglobs->cint);
- l = ++cglobs->labelno;
- }
- Yap_emit_3ops(push_or_op, l, Zero, Zero, &cglobs->cint);
- if (looking_at_commit &&
- Yap_is_a_test_pred(ArgOfTerm(1, arg), mod)) {
- /*
- * let them think they are still the
- * first
- */
- // Yap_emit(commit_opt_op, l, Zero, &cglobs->cint);
- optimizing_commit = TRUE;
- Yap_emit_3ops(label_ctl_op, SPECIAL_LABEL_INIT, SPECIAL_LABEL_FAILURE, l, &cglobs->cint);
- }
- else {
- optimizing_commit = FALSE;
- cglobs->needs_env = TRUE;
- Yap_emit_3ops(either_op, l, Zero, Zero, &cglobs->cint);
- Yap_emit(restore_tmps_op, Zero, Zero, &cglobs->cint);
- frst = FALSE;
- }
- }
- else {
- optimizing_commit = FALSE;
- Yap_emit(label_op, l, Zero, &cglobs->cint);
- Yap_emit(pushpop_or_op, Zero, Zero, &cglobs->cint);
- Yap_emit_3ops(orelse_op, l = ++cglobs->labelno, Zero, Zero, &cglobs->cint);
- cglobs->needs_env = TRUE;
- }
- /*
- * if(IsApplTerm(arg) &&
- * FunctorOfTerm(arg)==FunctorArrow) {
- */
- if (looking_at_commit) {
- if (!optimizing_commit && !commitflag) {
- CACHE_REGS
- /* This instruction is placed before
- * the disjunction. This means that
- * the program counter must point
- * correctly, and also that the age
- * of variable is older than the
- * current branch.
- */
- int my_goalno = cglobs->goalno;
+ arg = ArgOfTerm(1, Goal);
+ looking_at_commit =
+ IsApplTerm(arg) && FunctorOfTerm(arg) == FunctorArrow;
+ if (frst) {
+ if (optimizing_commit) {
+ Yap_emit(label_op, l, Zero, &cglobs->cint);
+ l = ++cglobs->labelno;
+ }
+ Yap_emit_3ops(push_or_op, l, Zero, Zero, &cglobs->cint);
+ if (looking_at_commit && Yap_is_a_test_pred(ArgOfTerm(1, arg), mod)) {
+ /*
+ * let them think they are still the
+ * first
+ */
+ // Yap_emit(commit_opt_op, l, Zero, &cglobs->cint);
+ optimizing_commit = TRUE;
+ Yap_emit_3ops(label_ctl_op, SPECIAL_LABEL_INIT,
+ SPECIAL_LABEL_FAILURE, l, &cglobs->cint);
+ } else {
+ optimizing_commit = FALSE;
+ cglobs->needs_env = TRUE;
+ Yap_emit_3ops(either_op, l, Zero, Zero, &cglobs->cint);
+ Yap_emit(restore_tmps_op, Zero, Zero, &cglobs->cint);
+ frst = FALSE;
+ }
+ } else {
+ optimizing_commit = FALSE;
+ Yap_emit(label_op, l, Zero, &cglobs->cint);
+ Yap_emit(pushpop_or_op, Zero, Zero, &cglobs->cint);
+ Yap_emit_3ops(orelse_op, l = ++cglobs->labelno, Zero, Zero,
+ &cglobs->cint);
+ cglobs->needs_env = TRUE;
+ }
+ /*
+ * if(IsApplTerm(arg) &&
+ * FunctorOfTerm(arg)==FunctorArrow) {
+ */
+ if (looking_at_commit) {
+ if (!optimizing_commit && !commitflag) {
+ CACHE_REGS
+ /* This instruction is placed before
+ * the disjunction. This means that
+ * the program counter must point
+ * correctly, and also that the age
+ * of variable is older than the
+ * current branch.
+ */
+ int my_goalno = cglobs->goalno;
- cglobs->goalno = savegoalno;
- commitflag = cglobs->labelno;
- commitvar = MkVarTerm();
- if (HR == (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
- }
- savecpc = cglobs->cint.cpc;
- savencpc = FirstP->nextInst;
- cglobs->cint.cpc = FirstP;
- cglobs->onbranch = pop_branch(cglobs);
- c_var(commitvar, save_b_flag, 1, 0, cglobs);
- push_branch(cglobs->onbranch, commitvar, cglobs);
- cglobs->onbranch = cglobs->curbranch;
- cglobs->cint.cpc->nextInst = savencpc;
- cglobs->cint.cpc = savecpc;
- cglobs->goalno = my_goalno;
- }
- save = cglobs->onlast;
- cglobs->onlast = FALSE;
- c_goal(ArgOfTerm(1, arg), mod, cglobs);
- if (!optimizing_commit) {
- c_var((Term) commitvar, commit_b_flag,
- 1, 0, cglobs);
- } else {
- Yap_emit_3ops(label_ctl_op, SPECIAL_LABEL_CLEAR, SPECIAL_LABEL_FAILURE, l, &cglobs->cint);
- }
- cglobs->onlast = save;
- c_goal(ArgOfTerm(2, arg), mod, cglobs);
- }
- else {
- /* standard disjunction */
- c_goal(ArgOfTerm(1, Goal), mod, cglobs);
- }
- if (!cglobs->onlast) {
- Yap_emit(jump_op, m, Zero, &cglobs->cint);
- } else {
-
- }
- if (!optimizing_commit || !cglobs->onlast) {
- cglobs->goalno = savegoalno + 1;
- }
- Goal = ArgOfTerm(2, Goal);
- ++cglobs->curbranch;
- cglobs->onbranch = cglobs->curbranch;
- } while (IsNonVarTerm(Goal) && IsApplTerm(Goal)
- && (FunctorOfTerm(Goal) == FunctorOr
- || FunctorOfTerm(Goal) == FunctorVBar));
+ cglobs->goalno = savegoalno;
+ commitflag = cglobs->labelno;
+ commitvar = MkVarTerm();
+ if (HR == (CELL *)cglobs->cint.freep0) {
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
+ }
+ savecpc = cglobs->cint.cpc;
+ savencpc = FirstP->nextInst;
+ cglobs->cint.cpc = FirstP;
+ cglobs->onbranch = pop_branch(cglobs);
+ c_var(commitvar, save_b_flag, 1, 0, cglobs);
+ push_branch(cglobs->onbranch, commitvar, cglobs);
+ cglobs->onbranch = cglobs->curbranch;
+ cglobs->cint.cpc->nextInst = savencpc;
+ cglobs->cint.cpc = savecpc;
+ cglobs->goalno = my_goalno;
+ }
+ save = cglobs->onlast;
+ cglobs->onlast = FALSE;
+ c_goal(ArgOfTerm(1, arg), mod, cglobs);
+ if (!optimizing_commit) {
+ c_var((Term)commitvar, commit_b_flag, 1, 0, cglobs);
+ } else {
+ Yap_emit_3ops(label_ctl_op, SPECIAL_LABEL_CLEAR,
+ SPECIAL_LABEL_FAILURE, l, &cglobs->cint);
+ }
+ cglobs->onlast = save;
+ c_goal(ArgOfTerm(2, arg), mod, cglobs);
+ } else {
+ /* standard disjunction */
+ c_goal(ArgOfTerm(1, Goal), mod, cglobs);
+ }
+ if (!cglobs->onlast) {
+ Yap_emit(jump_op, m, Zero, &cglobs->cint);
+ } else {
+ }
+ if (!optimizing_commit || !cglobs->onlast) {
+ cglobs->goalno = savegoalno + 1;
+ }
+ Goal = ArgOfTerm(2, Goal);
+ ++cglobs->curbranch;
+ cglobs->onbranch = cglobs->curbranch;
+ } while (IsNonVarTerm(Goal) && IsApplTerm(Goal) &&
+ (FunctorOfTerm(Goal) == FunctorOr ||
+ FunctorOfTerm(Goal) == FunctorVBar));
Yap_emit(pushpop_or_op, Zero, Zero, &cglobs->cint);
Yap_emit(label_op, l, Zero, &cglobs->cint);
if (!optimizing_commit) {
- Yap_emit(orlast_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(orlast_op, Zero, Zero, &cglobs->cint);
} else {
- optimizing_commit = FALSE; /* not really necessary */
+ optimizing_commit = FALSE; /* not really necessary */
}
c_goal(Goal, mod, cglobs);
/* --cglobs->onbranch; */
cglobs->onbranch = pop_branch(cglobs);
if (!cglobs->onlast) {
- Yap_emit(label_op, m, Zero, &cglobs->cint);
- if ((cglobs->onlast = save))
- c_goal(MkAtomTerm(AtomTrue), mod, cglobs);
+ Yap_emit(label_op, m, Zero, &cglobs->cint);
+ if ((cglobs->onlast = save))
+ c_goal(MkAtomTerm(AtomTrue), mod, cglobs);
}
Yap_emit(pop_or_op, Zero, Zero, &cglobs->cint);
return;
- }
- else if (f == FunctorComma) {
+ } else if (f == FunctorComma) {
int save = cglobs->onlast;
Term t2 = ArgOfTerm(2, Goal);
@@ -1801,8 +1761,7 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
cglobs->onlast = save;
c_goal(t2, mod, cglobs);
return;
- }
- else if (f == FunctorNot || f == FunctorAltNot) {
+ } else if (f == FunctorNot || f == FunctorAltNot) {
CACHE_REGS
CELL label = (cglobs->labelno += 2);
CELL end_label = (cglobs->labelno += 2);
@@ -1813,9 +1772,9 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
cglobs->needs_env = TRUE;
commitvar = MkVarTerm();
if (HR == (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
}
push_branch(cglobs->onbranch, commitvar, cglobs);
++cglobs->curbranch;
@@ -1824,7 +1783,7 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
cglobs->onlast = FALSE;
c_var(commitvar, save_b_flag, 1, 0, cglobs);
Yap_emit_3ops(push_or_op, label, Zero, Zero, &cglobs->cint);
- Yap_emit_3ops(either_op, label, Zero, Zero, &cglobs->cint);
+ Yap_emit_3ops(either_op, label, Zero, Zero, &cglobs->cint);
Yap_emit(restore_tmps_op, Zero, Zero, &cglobs->cint);
c_goal(ArgOfTerm(1, Goal), mod, cglobs);
c_var(commitvar, commit_b_flag, 1, 0, cglobs);
@@ -1841,17 +1800,16 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
++cglobs->goalno;
Yap_emit(pop_or_op, Zero, Zero, &cglobs->cint);
return;
- }
- else if (f == FunctorArrow) {
+ } else if (f == FunctorArrow) {
CACHE_REGS
Term commitvar;
int save = cglobs->onlast;
commitvar = MkVarTerm();
if (HR == (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
}
cglobs->onlast = FALSE;
c_var(commitvar, save_b_flag, 1, 0, cglobs);
@@ -1860,173 +1818,165 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
cglobs->onlast = save;
c_goal(ArgOfTerm(2, Goal), mod, cglobs);
return;
- }
- else if (f == FunctorEq) {
+ } else if (f == FunctorEq) {
if (profiling)
- Yap_emit(enter_profiling_op, (CELL)p, Zero, &cglobs->cint);
+ Yap_emit(enter_profiling_op, (CELL)p, Zero, &cglobs->cint);
else if (call_counting)
- Yap_emit(count_call_op, (CELL)p, Zero, &cglobs->cint);
+ Yap_emit(count_call_op, (CELL)p, Zero, &cglobs->cint);
c_eq(ArgOfTerm(1, Goal), ArgOfTerm(2, Goal), cglobs);
if (cglobs->onlast) {
- Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- PELOCK(44,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred))
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
- else
+ PELOCK(44, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred))
+ Yap_emit(table_new_answer_op, Zero,
+ cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ else
#endif /* TABLING */
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
}
return;
- }
- else if (f == FunctorSafe) {
+ } else if (f == FunctorSafe) {
Ventry *v = (Ventry *)ArgOfTerm(1, Goal);
/* This variable must be known before */
v->FlagsOfVE |= SafeVar;
return;
- }
- else if (p->PredFlags & (AsmPredFlag)) {
+ } else if (p->PredFlags & (AsmPredFlag)) {
basic_preds op = p->PredFlags & 0x7f;
if (profiling)
- Yap_emit(enter_profiling_op, (CELL)p, Zero, &cglobs->cint);
+ Yap_emit(enter_profiling_op, (CELL)p, Zero, &cglobs->cint);
else if (call_counting)
- Yap_emit(count_call_op, (CELL)p, Zero, &cglobs->cint);
+ Yap_emit(count_call_op, (CELL)p, Zero, &cglobs->cint);
if (op >= _atom && op <= _primitive) {
- c_test(op, ArgOfTerm(1, Goal), cglobs);
- if (cglobs->onlast) {
- Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
+ c_test(op, ArgOfTerm(1, Goal), cglobs);
+ if (cglobs->onlast) {
+ Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- PELOCK(45,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred))
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
- else
+ PELOCK(45, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred))
+ Yap_emit(table_new_answer_op, Zero,
+ cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ else
#endif /* TABLING */
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
- }
- return;
- }
- else if (op >= _plus && op <= _functor) {
- if (profiling)
- Yap_emit(enter_profiling_op, (CELL)p, Zero, &cglobs->cint);
- else if (call_counting)
- Yap_emit(count_call_op, (CELL)p, Zero, &cglobs->cint);
- if (op == _functor) {
- c_functor(Goal, mod, cglobs);
- }
- else {
- c_bifun(op,
- ArgOfTerm(1, Goal),
- ArgOfTerm(2, Goal),
- ArgOfTerm(3, Goal),
- Goal,
- mod,
- cglobs);
- }
- if (cglobs->onlast) {
- Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
+ }
+ return;
+ } else if (op >= _plus && op <= _functor) {
+ if (profiling)
+ Yap_emit(enter_profiling_op, (CELL)p, Zero, &cglobs->cint);
+ else if (call_counting)
+ Yap_emit(count_call_op, (CELL)p, Zero, &cglobs->cint);
+ if (op == _functor) {
+ c_functor(Goal, mod, cglobs);
+ } else {
+ c_bifun(op, ArgOfTerm(1, Goal), ArgOfTerm(2, Goal),
+ ArgOfTerm(3, Goal), Goal, mod, cglobs);
+ }
+ if (cglobs->onlast) {
+ Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- PELOCK(46,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred))
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
- else
+ PELOCK(46, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred))
+ Yap_emit(table_new_answer_op, Zero,
+ cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ else
#endif /* TABLING */
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
- }
- return;
+ }
+ return;
} else if (op == _p_label_ctl) {
- emit_special_label(Goal, cglobs);
- return;
+ emit_special_label(Goal, cglobs);
+ return;
} else {
- c_args(Goal, 0, cglobs);
+ c_args(Goal, 0, cglobs);
}
}
#ifdef BEAM
else if (p->PredFlags & BinaryPredFlag && !EAM) {
#else
- else if (p->PredFlags & BinaryPredFlag ) {
+ else if (p->PredFlags & BinaryPredFlag) {
#endif
CACHE_REGS
- Term a1 = ArgOfTerm(1,Goal);
+ Term a1 = ArgOfTerm(1, Goal);
if (IsVarTerm(a1) && !IsNewVar(a1)) {
- Term a2 = ArgOfTerm(2,Goal);
- if (IsVarTerm(a2) && !IsNewVar(a2)) {
- cglobs->current_p0 = p0;
- c_2vars(bt_flag, a1, 0, a2, 0, (CELL)p0, 0, 0, cglobs);
- }
- else {
- Term t2 = MkVarTerm();
- //c_var(t2, --cglobs->tmpreg, 0, 0, cglobs);
- if (HR == (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
- }
- cglobs->current_p0 = p0;
- c_eq(t2, a2, cglobs);
- c_2vars(bt_flag, a1, 0, t2, 0, (CELL)p0, 0, 0, cglobs);
- }
+ Term a2 = ArgOfTerm(2, Goal);
+ if (IsVarTerm(a2) && !IsNewVar(a2)) {
+ cglobs->current_p0 = p0;
+ c_2vars(bt_flag, a1, 0, a2, 0, (CELL)p0, 0, 0, cglobs);
+ } else {
+ Term t2 = MkVarTerm();
+ // c_var(t2, --cglobs->tmpreg, 0, 0, cglobs);
+ if (HR == (CELL *)cglobs->cint.freep0) {
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
+ }
+ cglobs->current_p0 = p0;
+ c_eq(t2, a2, cglobs);
+ c_2vars(bt_flag, a1, 0, t2, 0, (CELL)p0, 0, 0, cglobs);
+ }
} else {
- Term a2 = ArgOfTerm(2,Goal);
- Term t1 = MkVarTerm();
- //c_var(t1, --cglobs->tmpreg, 0, 0, cglobs);
- if (HR == (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
- }
- c_eq(t1, a1, cglobs);
+ Term a2 = ArgOfTerm(2, Goal);
+ Term t1 = MkVarTerm();
+ // c_var(t1, --cglobs->tmpreg, 0, 0, cglobs);
+ if (HR == (CELL *)cglobs->cint.freep0) {
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
+ }
+ c_eq(t1, a1, cglobs);
- if (IsVarTerm(a2) && !IsNewVar(a2)) {
- cglobs->current_p0 = p0;
- c_2vars(bt_flag, t1, 0, a2, 0, (CELL)p0, 0, 0, cglobs);
- }
- else {
- Term t2 = MkVarTerm();
- // c_var(t2, --cglobs->tmpreg, 0, 0, cglobs);
- if (HR == (CELL *)cglobs->cint.freep0) {
- /* oops, too many new variables */
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch,OUT_OF_TEMPS_BOTCH);
- }
- c_eq(t2, a2, cglobs);
- cglobs->current_p0 = p0;
- c_2vars(bt_flag, t1, 0, t2, 0, (CELL)p0, 0, 0, cglobs);
- }
+ if (IsVarTerm(a2) && !IsNewVar(a2)) {
+ cglobs->current_p0 = p0;
+ c_2vars(bt_flag, t1, 0, a2, 0, (CELL)p0, 0, 0, cglobs);
+ } else {
+ Term t2 = MkVarTerm();
+ // c_var(t2, --cglobs->tmpreg, 0, 0, cglobs);
+ if (HR == (CELL *)cglobs->cint.freep0) {
+ /* oops, too many new variables */
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_TEMPS_BOTCH);
+ }
+ c_eq(t2, a2, cglobs);
+ cglobs->current_p0 = p0;
+ c_2vars(bt_flag, t1, 0, t2, 0, (CELL)p0, 0, 0, cglobs);
+ }
}
if (cglobs->onlast) {
- Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- PELOCK(47,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred))
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
- else
+ PELOCK(47, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred))
+ Yap_emit(table_new_answer_op, Zero,
+ cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ else
#endif /* TABLING */
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
}
return;
} else {
if (profiling)
- Yap_emit(enter_profiling_op, (CELL)p, Zero, &cglobs->cint);
+ Yap_emit(enter_profiling_op, (CELL)p, Zero, &cglobs->cint);
else if (call_counting)
- Yap_emit(count_call_op, (CELL)p, Zero, &cglobs->cint);
+ Yap_emit(count_call_op, (CELL)p, Zero, &cglobs->cint);
if (f == FunctorExecuteInMod) {
- /* compile the first argument only */
- c_arg(1, ArgOfTerm(1,Goal), 1, 0, cglobs);
+ /* compile the first argument only */
+ c_arg(1, ArgOfTerm(1, Goal), 1, 0, cglobs);
} else {
- c_args(Goal, 0, cglobs);
+ c_args(Goal, 0, cglobs);
}
}
}
@@ -2036,74 +1986,73 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
/* synchronisation means saving the state, so it is never safe in YAPOR */
&& !(p->PredFlags & SyncPredFlag)
#endif /* YAPOR */
- ) {
- Yap_emit(safe_call_op, (CELL) p0, Zero, &cglobs->cint);
+ ) {
+ Yap_emit(safe_call_op, (CELL)p0, Zero, &cglobs->cint);
if (cglobs->onlast) {
Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- PELOCK(48,cglobs->cint.CurrentPred);
+ PELOCK(48, cglobs->cint.CurrentPred);
if (is_tabled(cglobs->cint.CurrentPred))
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE,
+ &cglobs->cint);
else
#endif /* TABLING */
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
}
- }
- else {
- if ((p->PredFlags & (AsmPredFlag |
- ModuleTransparentPredFlag |
- UserCPredFlag)) ||
- p->FunctorOfPred == FunctorExecuteInMod) {
+ } else {
+ if ((p->PredFlags &
+ (AsmPredFlag | ModuleTransparentPredFlag | UserCPredFlag)) ||
+ p->FunctorOfPred == FunctorExecuteInMod) {
#ifdef YAPOR
if (p->PredFlags & SyncPredFlag)
- Yap_emit(sync_op, (CELL)p, (CELL)(p->ArityOfPE), &cglobs->cint);
+ Yap_emit(sync_op, (CELL)p, (CELL)(p->ArityOfPE), &cglobs->cint);
#endif /* YAPOR */
if (p->FunctorOfPred == FunctorExecuteInMod) {
- cglobs->needs_env = TRUE;
- Yap_emit_4ops(call_op, (CELL) p0, Zero, Zero, ArgOfTerm(2,Goal), &cglobs->cint);
+ cglobs->needs_env = TRUE;
+ Yap_emit_4ops(call_op, (CELL)p0, Zero, Zero, ArgOfTerm(2, Goal),
+ &cglobs->cint);
} else {
- cglobs->needs_env = TRUE;
- Yap_emit_3ops(call_op, (CELL) p0, Zero, Zero, &cglobs->cint);
+ cglobs->needs_env = TRUE;
+ Yap_emit_3ops(call_op, (CELL)p0, Zero, Zero, &cglobs->cint);
}
/* functor is allowed to call the garbage collector */
if (cglobs->onlast) {
- Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
- cglobs->or_found = TRUE;
+ Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
+ cglobs->or_found = TRUE;
#ifdef TABLING
- PELOCK(49,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred))
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
- else
+ PELOCK(49, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred))
+ Yap_emit(table_new_answer_op, Zero,
+ cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ else
#endif /* TABLING */
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
}
- }
- else {
+ } else {
if (cglobs->onlast) {
- Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
+ Yap_emit(deallocate_op, Zero, Zero, &cglobs->cint);
#ifdef TABLING
- PELOCK(50,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred)) {
- cglobs->needs_env = TRUE;
- Yap_emit_3ops(call_op, (CELL) p0, Zero, Zero, &cglobs->cint);
- Yap_emit(table_new_answer_op, Zero, cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
- }
- else
+ PELOCK(50, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred)) {
+ cglobs->needs_env = TRUE;
+ Yap_emit_3ops(call_op, (CELL)p0, Zero, Zero, &cglobs->cint);
+ Yap_emit(table_new_answer_op, Zero,
+ cglobs->cint.CurrentPred->ArityOfPE, &cglobs->cint);
+ } else
#endif /* TABLING */
- Yap_emit(execute_op, (CELL) p0, Zero, &cglobs->cint);
+ Yap_emit(execute_op, (CELL)p0, Zero, &cglobs->cint);
#ifdef TABLING
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
- }
- else {
- cglobs->needs_env = TRUE;
- Yap_emit_3ops(call_op, (CELL) p0, Zero, Zero, &cglobs->cint);
+ } else {
+ cglobs->needs_env = TRUE;
+ Yap_emit_3ops(call_op, (CELL)p0, Zero, Zero, &cglobs->cint);
}
}
if (!cglobs->onlast)
@@ -2111,18 +2060,16 @@ c_goal(Term Goal, Term mod, compiler_struct *cglobs)
}
}
-static void
-c_body(Term Body, Term mod, compiler_struct *cglobs)
-{
+static void c_body(Term Body, Term mod, compiler_struct *cglobs) {
cglobs->onhead = FALSE;
cglobs->BodyStart = cglobs->cint.cpc;
cglobs->goalno = 1;
- while (IsNonVarTerm(Body) && IsApplTerm(Body)
- && FunctorOfTerm(Body) == FunctorComma) {
+ while (IsNonVarTerm(Body) && IsApplTerm(Body) &&
+ FunctorOfTerm(Body) == FunctorComma) {
Term t2 = ArgOfTerm(2, Body);
if (!cglobs->cint.success_handler && IsTrueGoal(t2)) {
/* optimise the case where some idiot left trues at the end
- of the clause.
+ of the clause.
*/
Body = ArgOfTerm(1, Body);
break;
@@ -2130,26 +2077,24 @@ c_body(Term Body, Term mod, compiler_struct *cglobs)
c_goal(ArgOfTerm(1, Body), mod, cglobs);
Body = t2;
#ifdef BEAM
- if (EAM) Yap_emit(endgoal_op, Zero, Zero, &cglobs->cint);
+ if (EAM)
+ Yap_emit(endgoal_op, Zero, Zero, &cglobs->cint);
#endif
-
}
cglobs->onlast = TRUE;
c_goal(Body, mod, cglobs);
#ifdef BEAM
- if (EAM && cglobs->goalno > 1) {
- if (cglobs->cint.cpc->op==procceed_op) {
- cglobs->cint.cpc->op=endgoal_op;
- Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
- } else
- Yap_emit(endgoal_op, Zero, Zero, &cglobs->cint);
- }
+ if (EAM && cglobs->goalno > 1) {
+ if (cglobs->cint.cpc->op == procceed_op) {
+ cglobs->cint.cpc->op = endgoal_op;
+ Yap_emit(procceed_op, Zero, Zero, &cglobs->cint);
+ } else
+ Yap_emit(endgoal_op, Zero, Zero, &cglobs->cint);
+ }
#endif
}
-static void
-c_head(Term t, compiler_struct *cglobs)
-{
+static void c_head(Term t, compiler_struct *cglobs) {
Functor f;
cglobs->goalno = 0;
@@ -2160,30 +2105,30 @@ c_head(Term t, compiler_struct *cglobs)
cglobs->space_used = 0;
cglobs->space_op = NULL;
if (IsAtomTerm(t)) {
- Yap_emit(name_op, (CELL) AtomOfTerm(t), Zero, &cglobs->cint);
+ Yap_emit(name_op, (CELL)AtomOfTerm(t), Zero, &cglobs->cint);
#ifdef BEAM
if (EAM) {
- Yap_emit(run_op,Zero,(UInt) cglobs->cint.CurrentPred,&cglobs->cint);
+ Yap_emit(run_op, Zero, (UInt)cglobs->cint.CurrentPred, &cglobs->cint);
}
#endif
- Yap_emit(ensure_space_op, Zero , Zero, &cglobs->cint);
+ Yap_emit(ensure_space_op, Zero, Zero, &cglobs->cint);
cglobs->space_op = cglobs->cint.cpc;
return;
}
f = FunctorOfTerm(t);
- Yap_emit(name_op, (CELL) NameOfFunctor(f), ArityOfFunctor(f), &cglobs->cint);
+ Yap_emit(name_op, (CELL)NameOfFunctor(f), ArityOfFunctor(f), &cglobs->cint);
#ifdef BEAM
- if (EAM) {
- Yap_emit(run_op,Zero,(UInt) cglobs->cint.CurrentPred,&cglobs->cint);
- }
+ if (EAM) {
+ Yap_emit(run_op, Zero, (UInt)cglobs->cint.CurrentPred, &cglobs->cint);
+ }
#endif
if (Yap_ExecutionMode == MIXED_MODE_USER)
- Yap_emit(native_op, 0, 0, &cglobs->cint);
- Yap_emit(ensure_space_op, Zero , Zero, &cglobs->cint);
+ Yap_emit(native_op, 0, 0, &cglobs->cint);
+ Yap_emit(ensure_space_op, Zero, Zero, &cglobs->cint);
cglobs->space_op = cglobs->cint.cpc;
#ifdef BEAM
if (EAM) {
- Yap_emit(run_op,Zero,(UInt) cglobs->cint.CurrentPred,&cglobs->cint);
+ Yap_emit(run_op, Zero, (UInt)cglobs->cint.CurrentPred, &cglobs->cint);
}
#endif
if (Yap_ExecutionMode == MIXED_MODE || Yap_ExecutionMode == COMPILED)
@@ -2200,10 +2145,7 @@ c_head(Term t, compiler_struct *cglobs)
c_args(t, 0, cglobs);
}
-
-inline static bool
-usesvar(compiler_vm_op ic)
-{
+inline static bool usesvar(compiler_vm_op ic) {
if (ic >= get_var_op && ic <= put_val_op)
return true;
switch (ic) {
@@ -2223,9 +2165,8 @@ usesvar(compiler_vm_op ic)
if (ic >= unify_s_var_op && ic <= write_s_val_op)
return true;
#endif
- return ((ic >= unify_var_op && ic <= write_val_op)
- ||
- (ic >= unify_last_var_op && ic <= unify_last_val_op));
+ return ((ic >= unify_var_op && ic <= write_val_op) ||
+ (ic >= unify_last_var_op && ic <= unify_last_val_op));
}
/*
@@ -2240,11 +2181,7 @@ inline static bool
}
*/
-inline static bool
-usesvar2(compiler_vm_op ic)
-{
- return ic == bccall_op;
-}
+inline static bool usesvar2(compiler_vm_op ic) { return ic == bccall_op; }
/*
* Do as in the traditional WAM and make sure voids are in
@@ -2253,43 +2190,38 @@ usesvar2(compiler_vm_op ic)
#define LOCALISE_VOIDS 1
#ifdef LOCALISE_VOIDS
-typedef struct env_tmp {
- Ventry * Var;
+typedef struct env_tmp {
+ Ventry *Var;
struct env_tmp *Next;
-} EnvTmp;
+} EnvTmp;
#endif
-
-static void
- tag_use(Ventry *v USES_REGS)
-{
+static void tag_use(Ventry *v USES_REGS) {
#ifdef BEAM
- if (EAM) {
- if (v->NoOfVE == Unassigned || v->KindOfVE!=PermVar) {
- v->NoOfVE = PermVar | (LOCAL_nperm++);
- v->KindOfVE = PermVar;
- v->FlagsOfVE |= PermFlag;
- }
- }
+ if (EAM) {
+ if (v->NoOfVE == Unassigned || v->KindOfVE != PermVar) {
+ v->NoOfVE = PermVar | (LOCAL_nperm++);
+ v->KindOfVE = PermVar;
+ v->FlagsOfVE |= PermFlag;
+ }
+ }
#endif
- if (v->NoOfVE == Unassigned) {
- if ((v->AgeOfVE > 1 && (v->AgeOfVE > v->FirstOfVE))
- || v->KindOfVE == PermVar /*
+ if (v->NoOfVE == Unassigned) {
+ if ((v->AgeOfVE > 1 && (v->AgeOfVE > v->FirstOfVE)) ||
+ v->KindOfVE == PermVar /*
* * || (v->FlagsOfVE & NonVoid && !(v->FlagsOfVE &
- * * OnHeadFlag))
- */ ) {
- v->NoOfVE = PermVar | (LOCAL_nperm++);
- v->KindOfVE = PermVar;
- v->FlagsOfVE |= PermFlag;
- } else {
- v->NoOfVE = v->KindOfVE = TempVar;
- }
- }
+ * * OnHeadFlag))
+ */) {
+ v->NoOfVE = PermVar | (LOCAL_nperm++);
+ v->KindOfVE = PermVar;
+ v->FlagsOfVE |= PermFlag;
+ } else {
+ v->NoOfVE = v->KindOfVE = TempVar;
+ }
+ }
}
-static void
-AssignPerm(PInstr *pc, compiler_struct *cglobs)
-{
+static void AssignPerm(PInstr *pc, compiler_struct *cglobs) {
CACHE_REGS
int uses_var;
PInstr *opc = NULL;
@@ -2300,7 +2232,7 @@ AssignPerm(PInstr *pc, compiler_struct *cglobs)
/* The WAM tries to keep voids on the
* environment. Traditionally, YAP liberally globalises
* voids.
- *
+ *
* The new version goes to some length to keep void variables
* in environments, but it is dubious that improves
* performance, and may actually slow down the system
@@ -2309,21 +2241,22 @@ AssignPerm(PInstr *pc, compiler_struct *cglobs)
PInstr *tpc = pc->nextInst;
#ifdef LOCALISE_VOIDS
if (pc->op == put_var_op) {
- Ventry *v = (Ventry *) (pc->rnd1);
- if (v->AgeOfVE == v->FirstOfVE
- && !(v->FlagsOfVE & (GlobalVal|OnHeadFlag|OnLastGoal|NonVoid)) ) {
- EnvTmp *x = (EnvTmp *)Yap_AllocCMem(sizeof(*x), &cglobs->cint);
- x->Next = EnvTmps;
- x->Var = v;
- EnvTmps = x;
+ Ventry *v = (Ventry *)(pc->rnd1);
+ if (v->AgeOfVE == v->FirstOfVE &&
+ !(v->FlagsOfVE & (GlobalVal | OnHeadFlag | OnLastGoal | NonVoid))) {
+ EnvTmp *x = (EnvTmp *)Yap_AllocCMem(sizeof(*x), &cglobs->cint);
+ x->Next = EnvTmps;
+ x->Var = v;
+ EnvTmps = x;
}
} else
#endif
- if (pc->op == call_op || pc->op == either_op || pc->op == orelse_op || pc->op == push_or_op) {
+ if (pc->op == call_op || pc->op == either_op || pc->op == orelse_op ||
+ pc->op == push_or_op) {
#ifdef LOCALISE_VOIDS
pc->ops.opseqt[1] = (CELL)EnvTmps;
if (EnvTmps)
- EnvTmps = NULL;
+ EnvTmps = NULL;
#endif
}
pc->nextInst = opc;
@@ -2338,31 +2271,31 @@ AssignPerm(PInstr *pc, compiler_struct *cglobs)
pc->nextInst = opc;
uses_var = usesvar(pc->op);
if (uses_var) {
- Ventry *v = (Ventry *) (pc->rnd1);
+ Ventry *v = (Ventry *)(pc->rnd1);
- tag_use(v PASS_REGS);
- if (usesvar2(pc->op) ) {
- Ventry *v2 = (Ventry *) (pc->rnd3);
- tag_use(v2 PASS_REGS);
+ tag_use(v PASS_REGS);
+ if (usesvar2(pc->op)) {
+ Ventry *v2 = (Ventry *)(pc->rnd3);
+ tag_use(v2 PASS_REGS);
}
} else if (pc->op == empty_call_op) {
pc->rnd2 = LOCAL_nperm;
- } else if (pc->op == call_op || pc->op == either_op || pc->op == orelse_op || pc->op == push_or_op) {
+ } else if (pc->op == call_op || pc->op == either_op ||
+ pc->op == orelse_op || pc->op == push_or_op) {
#ifdef LOCALISE_VOIDS
EnvTmps = (EnvTmp *)(pc->ops.opseqt[1]);
while (EnvTmps) {
- Ventry *v = EnvTmps->Var;
- v->NoOfVE = PermVar | (LOCAL_nperm++);
- v->KindOfVE = PermVar;
- v->FlagsOfVE |= (PermFlag|SafeVar);
- EnvTmps = EnvTmps->Next;
+ Ventry *v = EnvTmps->Var;
+ v->NoOfVE = PermVar | (LOCAL_nperm++);
+ v->KindOfVE = PermVar;
+ v->FlagsOfVE |= (PermFlag | SafeVar);
+ EnvTmps = EnvTmps->Next;
}
#endif
pc->rnd2 = LOCAL_nperm;
- } else if (pc->op == cut_op ||
- pc->op == cutexit_op ||
- pc->op == commit_b_op) {
+ } else if (pc->op == cut_op || pc->op == cutexit_op ||
+ pc->op == commit_b_op) {
pc->rnd2 = LOCAL_nperm;
}
opc = pc;
@@ -2370,24 +2303,21 @@ AssignPerm(PInstr *pc, compiler_struct *cglobs)
} while (pc != NULL);
}
-static CELL *
-init_bvarray(int nperm, compiler_struct *cglobs)
-{
+static CELL *init_bvarray(int nperm, compiler_struct *cglobs) {
CELL *vinfo = NULL;
- size_t sz = sizeof(CELL)*(1+nperm/(8*sizeof(CELL)));
+ size_t sz = sizeof(CELL) * (1 + nperm / (8 * sizeof(CELL)));
vinfo = (CELL *)Yap_AllocCMem(sz, &cglobs->cint);
memset((void *)vinfo, 0, sz);
return vinfo;
}
-static void
-clear_bvarray(int var, CELL *bvarray
+static void clear_bvarray(int var, CELL *bvarray
#ifdef DEBUG
- , compiler_struct *cglobs
+ ,
+ compiler_struct *cglobs
#endif
-)
-{
- int max = 8*sizeof(CELL);
+ ) {
+ int max = 8 * sizeof(CELL);
CELL nbit;
/* get to the array position */
@@ -2402,7 +2332,6 @@ clear_bvarray(int var, CELL *bvarray
CACHE_REGS
/* someone had already marked this variable: complain */
LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
- LOCAL_Error_Term = TermNil;
LOCAL_ErrorMessage = "compiler internal error: variable initialized twice";
save_machine_regs();
siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
@@ -2413,14 +2342,13 @@ clear_bvarray(int var, CELL *bvarray
}
/* copy the current state of the perm variable state array to code space */
-static void
-add_bvarray_op(PInstr *cp, CELL *bvarray, int env_size, compiler_struct *cglobs)
-{
- int i, size = env_size/(8*sizeof(CELL));
+static void add_bvarray_op(PInstr *cp, CELL *bvarray, int env_size,
+ compiler_struct *cglobs) {
+ int i, size = env_size / (8 * sizeof(CELL));
CELL *dest;
- dest =
- Yap_emit_extra_size(mark_initialized_pvars_op, (CELL)env_size, (size+1)*sizeof(CELL), &cglobs->cint);
+ dest = Yap_emit_extra_size(mark_initialized_pvars_op, (CELL)env_size,
+ (size + 1) * sizeof(CELL), &cglobs->cint);
/* copy the cells to dest */
for (i = 0; i <= size; i++)
*dest++ = *bvarray++;
@@ -2432,19 +2360,16 @@ typedef struct {
int lab;
int last;
PInstr *pc;
-} bventry;
+} bventry;
#define MAX_DISJUNCTIONS 128
static bventry *bvstack;
static int bvindex = 0;
-static void
-push_bvmap(int label, PInstr *pcpc, compiler_struct *cglobs)
-{
+static void push_bvmap(int label, PInstr *pcpc, compiler_struct *cglobs) {
if (bvindex == MAX_DISJUNCTIONS) {
CACHE_REGS
LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
- LOCAL_Error_Term = TermNil;
LOCAL_ErrorMessage = "Too many embedded disjunctions";
save_machine_regs();
siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
@@ -2457,42 +2382,36 @@ push_bvmap(int label, PInstr *pcpc, compiler_struct *cglobs)
bvindex++;
}
-static void
-reset_bvmap(CELL *bvarray, int nperm, compiler_struct *cglobs)
-{
+static void reset_bvmap(CELL *bvarray, int nperm, compiler_struct *cglobs) {
int size, size1, env_size, i;
CELL *source;
if (bvarray == NULL)
- if (bvindex == 0) {
- CACHE_REGS
- LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
- LOCAL_Error_Term = TermNil;
- LOCAL_ErrorMessage = "No embedding in disjunctions";
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
- }
- env_size = (bvstack[bvindex-1].pc)->rnd1;
- size = env_size/(8*sizeof(CELL));
- size1 = nperm/(8*sizeof(CELL));
- source = (bvstack[bvindex-1].pc)->arnds;
+ if (bvindex == 0) {
+ CACHE_REGS
+ LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
+ LOCAL_ErrorMessage = "No embedding in disjunctions";
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
+ }
+ env_size = (bvstack[bvindex - 1].pc)->rnd1;
+ size = env_size / (8 * sizeof(CELL));
+ size1 = nperm / (8 * sizeof(CELL));
+ source = (bvstack[bvindex - 1].pc)->arnds;
for (i = 0; i <= size; i++)
*bvarray++ = *source++;
- for (i = size+1; i<= size1; i++)
+ for (i = size + 1; i <= size1; i++)
*bvarray++ = (CELL)(0);
}
-static void
-pop_bvmap(CELL *bvarray, int nperm, compiler_struct *cglobs)
-{
+static void pop_bvmap(CELL *bvarray, int nperm, compiler_struct *cglobs) {
if (bvindex == 0) {
CACHE_REGS
LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
- LOCAL_Error_Term = TermNil;
LOCAL_ErrorMessage = "Too few embedded disjunctions";
/* save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_HEAP_BOTCH); */
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_HEAP_BOTCH); */
}
reset_bvmap(bvarray, nperm, cglobs);
bvindex--;
@@ -2504,52 +2423,47 @@ typedef struct {
} UnsafeEntry;
/* extend to also support variable usage bitmaps for garbage collection */
-static void
-CheckUnsafe(PInstr *pc, compiler_struct *cglobs)
-{
+static void CheckUnsafe(PInstr *pc, compiler_struct *cglobs) {
CACHE_REGS
int pending = 0;
/* say that all variables are yet to initialize */
CELL *vstat = init_bvarray(LOCAL_nperm, cglobs);
- UnsafeEntry *UnsafeStack =
- (UnsafeEntry *) Yap_AllocCMem(LOCAL_nperm * sizeof(UnsafeEntry), &cglobs->cint);
+ UnsafeEntry *UnsafeStack = (UnsafeEntry *)Yap_AllocCMem(
+ LOCAL_nperm * sizeof(UnsafeEntry), &cglobs->cint);
/* keep a copy of previous cglobs->cint.cpc and CodeStart */
PInstr *opc = cglobs->cint.cpc;
PInstr *OldCodeStart = cglobs->cint.CodeStart;
-
+
cglobs->cint.CodeStart = cglobs->cint.BlobsStart;
cglobs->cint.cpc = cglobs->cint.icpc;
bvindex = 0;
- bvstack = (bventry *)Yap_AllocCMem(MAX_DISJUNCTIONS * sizeof(bventry), &cglobs->cint);
+ bvstack = (bventry *)Yap_AllocCMem(MAX_DISJUNCTIONS * sizeof(bventry),
+ &cglobs->cint);
while (pc != NIL) {
- switch(pc->op) {
- case put_val_op:
- {
- Ventry *v = (Ventry *) (pc->rnd1);
- if ((v->FlagsOfVE & PermFlag) && !(v->FlagsOfVE & SafeVar)) {
- UnsafeStack[pending].p = pc;
- UnsafeStack[pending++].v = v;
- v->FlagsOfVE |= SafeVar;
- }
- break;
- }
- case bccall_op:
- {
- Ventry *v = (Ventry *) (pc->rnd1),
- *v3 = (Ventry *) (pc->rnd3);
-
- if ( (v->FlagsOfVE & PermFlag && pc == v->FirstOpForV) ||
- (v3->FlagsOfVE & PermFlag && pc == v3->FirstOpForV) ) {
- CACHE_REGS
- LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
- LOCAL_Error_Term = TermNil;
- LOCAL_ErrorMessage = "comparison should not have first instance of variables";
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
- }
+ switch (pc->op) {
+ case put_val_op: {
+ Ventry *v = (Ventry *)(pc->rnd1);
+ if ((v->FlagsOfVE & PermFlag) && !(v->FlagsOfVE & SafeVar)) {
+ UnsafeStack[pending].p = pc;
+ UnsafeStack[pending++].v = v;
+ v->FlagsOfVE |= SafeVar;
}
break;
+ }
+ case bccall_op: {
+ Ventry *v = (Ventry *)(pc->rnd1), *v3 = (Ventry *)(pc->rnd3);
+
+ if ((v->FlagsOfVE & PermFlag && pc == v->FirstOpForV) ||
+ (v3->FlagsOfVE & PermFlag && pc == v3->FirstOpForV)) {
+ CACHE_REGS
+ LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
+ LOCAL_ErrorMessage =
+ "comparison should not have first instance of variables";
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
+ }
+ } break;
case put_var_op:
case get_var_op:
case save_b_op:
@@ -2558,21 +2472,20 @@ CheckUnsafe(PInstr *pc, compiler_struct *cglobs)
case write_var_op:
case save_appl_op:
case save_pair_op:
- case f_var_op:
- {
- Ventry *v = (Ventry *) (pc->rnd1);
+ case f_var_op: {
+ Ventry *v = (Ventry *)(pc->rnd1);
- if (v->FlagsOfVE & PermFlag && pc == v->FirstOpForV) {
- /* the second condition covers cases such as save_b_op
- in a disjunction */
- clear_bvarray((v->NoOfVE & MaskVarAdrs), vstat
+ if (v->FlagsOfVE & PermFlag && pc == v->FirstOpForV) {
+ /* the second condition covers cases such as save_b_op
+ in a disjunction */
+ clear_bvarray((v->NoOfVE & MaskVarAdrs), vstat
#ifdef DEBUG
- , cglobs
+ ,
+ cglobs
#endif
- );
- }
+ );
}
- break;
+ } break;
case push_or_op:
Yap_emit(label_op, ++cglobs->labelno, Zero, &cglobs->cint);
pc->ops.opseqt[1] = (CELL)cglobs->labelno;
@@ -2599,7 +2512,7 @@ CheckUnsafe(PInstr *pc, compiler_struct *cglobs)
break;
case empty_call_op:
/* just get ourselves a label describing how
- many permanent variables are alive */
+ many permanent variables are alive */
Yap_emit(label_op, ++cglobs->labelno, Zero, &cglobs->cint);
pc->rnd1 = (CELL)cglobs->labelno;
add_bvarray_op(pc, vstat, pc->rnd2, cglobs);
@@ -2607,7 +2520,7 @@ CheckUnsafe(PInstr *pc, compiler_struct *cglobs)
case cut_op:
case cutexit_op:
/* just get ourselves a label describing how
- many permanent variables are alive */
+ many permanent variables are alive */
Yap_emit(label_op, ++cglobs->labelno, Zero, &cglobs->cint);
pc->rnd1 = (CELL)cglobs->labelno;
add_bvarray_op(pc, vstat, pc->rnd2, cglobs);
@@ -2617,20 +2530,19 @@ CheckUnsafe(PInstr *pc, compiler_struct *cglobs)
pc->ops.opseqt[1] = (CELL)cglobs->labelno;
add_bvarray_op(pc, vstat, pc->rnd2, cglobs);
case deallocate_op:
- reset_safe_map:
- {
- int n = pc->op == call_op ? pc->rnd2 : 0;
- int no;
+ reset_safe_map : {
+ int n = pc->op == call_op ? pc->rnd2 : 0;
+ int no;
- while (pending) {
- Ventry *v = UnsafeStack[--pending].v;
+ while (pending) {
+ Ventry *v = UnsafeStack[--pending].v;
- v->FlagsOfVE &= ~SafeVar;
- no = (v->NoOfVE) & MaskVarAdrs;
- if (no >= n)
- UnsafeStack[pending].p->op = put_unsafe_op;
- }
+ v->FlagsOfVE &= ~SafeVar;
+ no = (v->NoOfVE) & MaskVarAdrs;
+ if (no >= n)
+ UnsafeStack[pending].p->op = put_unsafe_op;
}
+ }
default:
break;
}
@@ -2643,9 +2555,8 @@ CheckUnsafe(PInstr *pc, compiler_struct *cglobs)
}
static void
-CheckVoids(compiler_struct *cglobs)
-{ /* establish voids in the head and initial
- * uses */
+CheckVoids(compiler_struct *cglobs) { /* establish voids in the head and initial
+ * uses */
Ventry *ve;
compiler_vm_op ic;
struct PSEUDO *cpc;
@@ -2661,21 +2572,20 @@ CheckVoids(compiler_struct *cglobs)
#endif
case save_pair_op:
case save_appl_op:
- ve = ((Ventry *) cpc->rnd1);
+ ve = ((Ventry *)cpc->rnd1);
if ((ve->FlagsOfVE & PermFlag) == 0 && ve->RCountOfVE <= 1) {
- ve->NoOfVE = ve->KindOfVE = VoidVar;
- if (ic == get_var_op || ic ==
- save_pair_op || ic == save_appl_op
+ ve->NoOfVE = ve->KindOfVE = VoidVar;
+ if (ic == get_var_op || ic == save_pair_op || ic == save_appl_op
#ifdef SFUNC
- || ic == unify_s_var_op
+ || ic == unify_s_var_op
#endif
- ) {
- cpc->op = nop_op;
- break;
- }
+ ) {
+ cpc->op = nop_op;
+ break;
+ }
}
if (ic != get_var_op)
- break;
+ break;
case get_val_op:
case get_atom_op:
case get_num_op:
@@ -2698,10 +2608,9 @@ CheckVoids(compiler_struct *cglobs)
}
}
-static int
-checktemp(Int arg, Int rn, compiler_vm_op ic, compiler_struct *cglobs)
-{
- Ventry *v = (Ventry *) arg;
+static int checktemp(Int arg, Int rn, compiler_vm_op ic,
+ compiler_struct *cglobs) {
+ Ventry *v = (Ventry *)arg;
PInstr *q;
Int Needed[MaxTemps];
Int r, target1, target2;
@@ -2710,13 +2619,12 @@ checktemp(Int arg, Int rn, compiler_vm_op ic, compiler_struct *cglobs)
Int vadr;
Int vreg;
-
cglobs->vadr = vadr = (v->NoOfVE);
cglobs->vreg = vreg = vadr & MaskVarAdrs;
if (v->KindOfVE == PermVar || v->KindOfVE == VoidVar)
return 0;
if (v->RCountOfVE == 1)
- return 0;
+ return 0;
if (vreg) {
--cglobs->Uses[vreg];
return 1;
@@ -2724,8 +2632,9 @@ checktemp(Int arg, Int rn, compiler_vm_op ic, compiler_struct *cglobs)
/* follow the life of the variable */
q = cglobs->cint.cpc;
/*
- * for(r=0; rMaxCTemps; ++r) Needed[r] = cglobs->Uses[r]; might be written
- * as:
+ * for(r=0; rMaxCTemps; ++r) Needed[r] = cglobs->Uses[r]; might be
+ * written
+ * as:
*/
np = Needed;
rp = cglobs->Uses;
@@ -2734,32 +2643,32 @@ checktemp(Int arg, Int rn, compiler_vm_op ic, compiler_struct *cglobs)
if (rn > 0 && (ic == get_var_op || ic == put_var_op)) {
if (ic == put_var_op)
Needed[rn] = 1;
- target1 = rn; /* try to leave it where it is */
- }
- else
+ target1 = rn; /* try to leave it where it is */
+ } else
target1 = cglobs->MaxCTemps;
target2 = cglobs->MaxCTemps;
n = v->RCountOfVE - 1;
while (q != v->LastOpForV && (q = q->nextInst) != NIL) {
- if (q->rnd2 <= 0); /* don't try to reuse REGISTER 0 */
+ if (q->rnd2 <= 0)
+ ; /* don't try to reuse REGISTER 0 */
else if ((usesvar(ic = q->op) && arg == q->rnd1) ||
- (ic == bccall_op && arg == q->rnd3)/*uses_this_var(q, arg)*/) {
+ (ic == bccall_op && arg == q->rnd3) /*uses_this_var(q, arg)*/) {
ic = q->op;
--n;
if (ic == put_val_op) {
- if (target1 == cglobs->MaxCTemps && Needed[q->rnd2] == 0)
- target1 = q->rnd2;
- else if (target1 != (r = q->rnd2)) {
- if (target2 == cglobs->MaxCTemps && Needed[r] == 0)
- target2 = r;
- else if (target2 > r && cglobs->Uses[r] == 0 && Needed[r] == 0)
- target2 = r;
- }
+ if (target1 == cglobs->MaxCTemps && Needed[q->rnd2] == 0)
+ target1 = q->rnd2;
+ else if (target1 != (r = q->rnd2)) {
+ if (target2 == cglobs->MaxCTemps && Needed[r] == 0)
+ target2 = r;
+ else if (target2 > r && cglobs->Uses[r] == 0 && Needed[r] == 0)
+ target2 = r;
+ }
}
}
#ifdef SFUNC
- else if ((ic >= get_var_op && ic <= put_unsafe_op)
- || ic == get_s_f_op || ic == put_s_f_op)
+ else if ((ic >= get_var_op && ic <= put_unsafe_op) || ic == get_s_f_op ||
+ ic == put_s_f_op)
Needed[q->rnd2] = 1;
#else
else if (ic >= get_var_op && ic <= put_unsafe_op)
@@ -2774,17 +2683,18 @@ checktemp(Int arg, Int rn, compiler_vm_op ic, compiler_struct *cglobs)
target1 = r;
}
if (target1 == cglobs->MaxCTemps || cglobs->Uses[target1] || Needed[target1])
- if ((target1 = target2) == cglobs->MaxCTemps || cglobs->Uses[target1] || Needed[target1]) {
+ if ((target1 = target2) == cglobs->MaxCTemps || cglobs->Uses[target1] ||
+ Needed[target1]) {
target1 = cglobs->MaxCTemps;
do
- --target1;
+ --target1;
while (target1 && cglobs->Uses[target1] == 0 && Needed[target1] == 0);
++target1;
}
if (target1 == cglobs->MaxCTemps) {
CACHE_REGS
LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
- LOCAL_Error_Term = TermNil;
+
LOCAL_ErrorMessage = "too many temporaries";
save_machine_regs();
siglongjmp(cglobs->cint.CompilerBotch, COMPILER_ERR_BOTCH);
@@ -2793,8 +2703,9 @@ checktemp(Int arg, Int rn, compiler_vm_op ic, compiler_struct *cglobs)
v->KindOfVE = TempVar;
cglobs->Uses[cglobs->vreg = vreg = target1] = v->RCountOfVE - 1;
/*
- * for(r=0; rMaxCTemps; ++r) if(cglobs->Contents[r]==vadr) cglobs->Contents[r] =
- * NIL;
+ * for(r=0; rMaxCTemps; ++r) if(cglobs->Contents[r]==vadr)
+ * cglobs->Contents[r] =
+ * NIL;
*/
cp = cglobs->Contents;
for (r = 0; r < cglobs->MaxCTemps; ++r)
@@ -2804,16 +2715,15 @@ checktemp(Int arg, Int rn, compiler_vm_op ic, compiler_struct *cglobs)
return 1;
}
-static Int
-checkreg(Int arg, Int rn, compiler_vm_op ic, int var_arg, compiler_struct *cglobs)
-{
+static Int checkreg(Int arg, Int rn, compiler_vm_op ic, int var_arg,
+ compiler_struct *cglobs) {
PInstr *p = cglobs->cint.cpc;
Int vreg;
if (rn >= 0)
return rn;
if (var_arg) {
- Ventry *v = (Ventry *) arg;
+ Ventry *v = (Ventry *)arg;
vreg = (v->NoOfVE) & MaskVarAdrs;
if (v->KindOfVE == PermVar)
@@ -2826,7 +2736,7 @@ checkreg(Int arg, Int rn, compiler_vm_op ic, int var_arg, compiler_struct *cglob
if (!vreg) {
vreg = 1;
while (cglobs->Uses[vreg] != 0) {
- ++vreg;
+ ++vreg;
}
cglobs->Uses[vreg] = v->RCountOfVE;
}
@@ -2840,7 +2750,8 @@ checkreg(Int arg, Int rn, compiler_vm_op ic, int var_arg, compiler_struct *cglob
if (p->op >= get_var_op && p->op <= put_unsafe_op && p->rnd2 == rn)
p->rnd2 = vreg;
/* only copy variables until you reach a call */
- if (p->op == procceed_op || p->op == call_op || p->op == push_or_op || p->op == pushpop_or_op)
+ if (p->op == procceed_op || p->op == call_op || p->op == push_or_op ||
+ p->op == pushpop_or_op)
break;
p = p->nextInst;
}
@@ -2848,32 +2759,28 @@ checkreg(Int arg, Int rn, compiler_vm_op ic, int var_arg, compiler_struct *cglob
}
/* Create a bitmap with all live variables */
-static CELL
-copy_live_temps_bmap(int max, compiler_struct *cglobs)
-{
- unsigned int size = AdjustSize((max|7)/8+1);
+static CELL copy_live_temps_bmap(int max, compiler_struct *cglobs) {
+ unsigned int size = AdjustSize((max | 7) / 8 + 1);
int i;
CELL *dest = Yap_emit_extra_size(mark_live_regs_op, max, size, &cglobs->cint);
- CELL *ptr=dest;
+ CELL *ptr = dest;
*ptr = 0L;
- for (i=1; i <= max; i++) {
+ for (i = 1; i <= max; i++) {
/* move to next cell */
- if (i%(8*CellSize) == 0) {
+ if (i % (8 * CellSize) == 0) {
ptr++;
*ptr = 0L;
}
/* set the register live bit */
if (cglobs->Contents[i]) {
- int j = i%(8*CellSize);
- *ptr |= (1<BodyStart->nextInst;
register Ventry *v = cglobs->vtable;
@@ -2894,11 +2801,11 @@ c_layout(compiler_struct *cglobs)
if (!cglobs->is_a_fact) {
while (v != NIL) {
if (v->FlagsOfVE & BranchVar) {
- v->AgeOfVE = v->FirstOfVE + 1; /* force permanent */
- ++(v->RCountOfVE);
- Yap_emit(put_var_op, (CELL) v, Zero, &cglobs->cint);
- v->FlagsOfVE &= ~GlobalVal;
- v->FirstOpForV = cglobs->cint.cpc;
+ v->AgeOfVE = v->FirstOfVE + 1; /* force permanent */
+ ++(v->RCountOfVE);
+ Yap_emit(put_var_op, (CELL)v, Zero, &cglobs->cint);
+ v->FlagsOfVE &= ~GlobalVal;
+ v->FirstOpForV = cglobs->cint.cpc;
}
v = v->NextOfVE;
}
@@ -2917,18 +2824,18 @@ c_layout(compiler_struct *cglobs)
CheckUnsafe(cglobs->cint.CodeStart, cglobs);
#ifdef DEBUG
if (cglobs->pbvars != LOCAL_nperm) {
- CACHE_REGS
- LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
- LOCAL_Error_Term = TermNil;
- LOCAL_ErrorMessage = "wrong number of variables found in bitmap";
- save_machine_regs();
- siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_HEAP_BOTCH);
- }
+ CACHE_REGS
+ LOCAL_Error_TYPE = SYSTEM_ERROR_COMPILER;
+ LOCAL_ErrorMessage = "wrong number of variables found in bitmap";
+ save_machine_regs();
+ siglongjmp(cglobs->cint.CompilerBotch, OUT_OF_HEAP_BOTCH);
+ }
#endif
}
}
- cglobs->MaxCTemps = cglobs->nvars + cglobs->max_args - cglobs->tmpreg + cglobs->n_common_exps + 2;
+ cglobs->MaxCTemps = cglobs->nvars + cglobs->max_args - cglobs->tmpreg +
+ cglobs->n_common_exps + 2;
if (cglobs->MaxCTemps >= MaxTemps)
cglobs->MaxCTemps = MaxTemps;
{
@@ -2951,7 +2858,7 @@ c_layout(compiler_struct *cglobs)
switch (ic) {
case pop_or_op:
if (needs_either)
- needs_either--;
+ needs_either--;
case either_op:
needs_either++;
break;
@@ -2962,67 +2869,68 @@ c_layout(compiler_struct *cglobs)
break;
#else
case cut_op:
- case cutexit_op:
- {
- int i, max;
+ case cutexit_op: {
+ int i, max;
- max = 0;
- for (i = 1; i < cglobs->MaxCTemps; ++i) {
- if (cglobs->Contents[i]) max = i;
- }
- cglobs->cint.cpc->ops.opseqt[1] = max;
+ max = 0;
+ for (i = 1; i < cglobs->MaxCTemps; ++i) {
+ if (cglobs->Contents[i])
+ max = i;
}
- break;
+ cglobs->cint.cpc->ops.opseqt[1] = max;
+ } break;
#endif /* TABLING_INNER_CUTS */
case allocate_op:
case deallocate_op:
if (!cglobs->needs_env) {
- cglobs->cint.cpc->op = nop_op;
+ cglobs->cint.cpc->op = nop_op;
} else {
#ifdef TABLING
- PELOCK(51,cglobs->cint.CurrentPred);
- if (is_tabled(cglobs->cint.CurrentPred))
- cglobs->cint.cpc->op = nop_op;
- else
+ PELOCK(51, cglobs->cint.CurrentPred);
+ if (is_tabled(cglobs->cint.CurrentPred))
+ cglobs->cint.cpc->op = nop_op;
+ else
#endif /* TABLING */
- if (cglobs->goalno == 1 && !cglobs->or_found && LOCAL_nperm == 0)
- cglobs->cint.cpc->op = nop_op;
+ if (cglobs->goalno == 1 && !cglobs->or_found && LOCAL_nperm == 0)
+ cglobs->cint.cpc->op = nop_op;
#ifdef TABLING
- UNLOCK(cglobs->cint.CurrentPred->PELock);
+ UNLOCK(cglobs->cint.CurrentPred->PELock);
#endif
}
break;
case pop_op:
ic = (cglobs->cint.cpc->nextInst)->op;
if (ic >= get_var_op && ic <= put_unsafe_op)
- cglobs->cint.cpc->op = nop_op;
+ cglobs->cint.cpc->op = nop_op;
break;
case get_var_op:
--cglobs->Uses[rn];
if (checktemp(arg, rn, ic, cglobs)) {
#ifdef BEAM
- if (cglobs->vreg == rn && !EAM)
+ if (cglobs->vreg == rn && !EAM)
#else
- if (cglobs->vreg == rn)
+ if (cglobs->vreg == rn)
#endif
- cglobs->cint.cpc->op = nop_op;
+ cglobs->cint.cpc->op = nop_op;
}
if (!cglobs->Uses[rn])
- cglobs->Contents[rn] = cglobs->vadr;
+ cglobs->Contents[rn] = cglobs->vadr;
break;
case get_val_op:
--cglobs->Uses[rn];
checktemp(arg, rn, ic, cglobs);
if (!cglobs->Uses[rn])
- cglobs->Contents[rn] = cglobs->vadr;
+ cglobs->Contents[rn] = cglobs->vadr;
break;
case f_0_op:
- if (rn_to_kill[0]) --cglobs->Uses[rn_to_kill[0]];
- rn_to_kill[1]=rn_to_kill[0]=0;
+ if (rn_to_kill[0])
+ --cglobs->Uses[rn_to_kill[0]];
+ rn_to_kill[1] = rn_to_kill[0] = 0;
break;
case f_var_op:
- if (rn_to_kill[0]) --cglobs->Uses[rn_to_kill[0]];
- rn_to_kill[1]=rn_to_kill[0]=0;
+ if (rn_to_kill[0])
+ --cglobs->Uses[rn_to_kill[0]];
+ rn_to_kill[1] = rn_to_kill[0] = 0;
case unify_var_op:
case unify_val_op:
case unify_last_var_op:
@@ -3046,16 +2954,16 @@ c_layout(compiler_struct *cglobs)
case get_bigint_op:
--cglobs->Uses[rn];
/* This is not safe if we are in the middle of a disjunction and there
- is something ahead.
+ is something ahead.
*/
if (!cglobs->Uses[rn])
- cglobs->Contents[rn] = arg;
+ cglobs->Contents[rn] = arg;
break;
case get_list_op:
case get_struct_op:
--cglobs->Uses[rn];
if (!cglobs->Uses[rn])
- cglobs->Contents[rn] = NIL;
+ cglobs->Contents[rn] = NIL;
break;
case put_var_op:
case put_unsafe_op:
@@ -3072,38 +2980,36 @@ c_layout(compiler_struct *cglobs)
#else
if (rn && cglobs->Contents[rn] == (Term)cglobs->vadr)
#endif
- {
- cglobs->cint.cpc->op = nop_op;
- }
+ {
+ cglobs->cint.cpc->op = nop_op;
+ }
cglobs->Contents[rn] = cglobs->vadr;
++cglobs->Uses[rn];
if (rn_kills) {
- rn_kills--;
- rn_to_kill[rn_kills]=rn;
+ rn_kills--;
+ rn_to_kill[rn_kills] = rn;
}
break;
case fetch_args_cv_op:
case fetch_args_vc_op:
case fetch_args_iv_op:
case fetch_args_vi_op:
- rn_to_kill[1]=rn_to_kill[0]=0;
+ rn_to_kill[1] = rn_to_kill[0] = 0;
if (cglobs->cint.cpc->nextInst &&
- cglobs->cint.cpc->nextInst->op == put_val_op &&
- cglobs->cint.cpc->nextInst->nextInst &&
- (cglobs->cint.cpc->nextInst->nextInst->op == f_var_op ||
- cglobs->cint.cpc->nextInst->nextInst->op == f_0_op) )
- rn_kills = 1;
+ cglobs->cint.cpc->nextInst->op == put_val_op &&
+ cglobs->cint.cpc->nextInst->nextInst &&
+ (cglobs->cint.cpc->nextInst->nextInst->op == f_var_op ||
+ cglobs->cint.cpc->nextInst->nextInst->op == f_0_op))
+ rn_kills = 1;
break;
case f_val_op:
#ifdef SFUNC
- case write_s_var_op:
- {
- Ventry *ve = (Ventry *) arg;
+ case write_s_var_op: {
+ Ventry *ve = (Ventry *)arg;
- if ((ve->FlagsOfVE & PermFlag) == 0 && ve->RCountOfVE <= 1)
- cglobs->cint.cpc->op = nop_op;
- }
- break;
+ if ((ve->FlagsOfVE & PermFlag) == 0 && ve->RCountOfVE <= 1)
+ cglobs->cint.cpc->op = nop_op;
+ } break;
case write_s_val_op:
#endif
case write_var_op:
@@ -3125,7 +3031,7 @@ c_layout(compiler_struct *cglobs)
case put_bigint_op:
rn = checkreg(arg, rn, ic, FALSE, cglobs);
if (cglobs->Contents[rn] == arg)
- cglobs->cint.cpc->op = nop_op;
+ cglobs->cint.cpc->op = nop_op;
cglobs->Contents[rn] = arg;
++cglobs->Uses[rn];
break;
@@ -3140,87 +3046,84 @@ c_layout(compiler_struct *cglobs)
cglobs->cut_mark->op = clause_with_cut_op;
#endif /* TABLING_INNER_CUTS */
case save_b_op:
- case patch_b_op:
+ case patch_b_op:
case save_appl_op:
case save_pair_op:
checktemp(arg, rn, ic, cglobs);
break;
case safe_call_op:
/*
- vsc: The variables will be in use after this!!!!
- {
- UInt Arity = RepPredProp((Prop) arg)->ArityOfPE;
- for (rn = 1; rn <= Arity; ++rn)
- --cglobs->Uses[rn];
- }
+ vsc: The variables will be in use after this!!!!
+ {
+ UInt Arity = RepPredProp((Prop) arg)->ArityOfPE;
+ for (rn = 1; rn <= Arity; ++rn)
+ --cglobs->Uses[rn];
+ }
*/
break;
case call_op:
case orelse_op:
- case orlast_op:
- {
- up = cglobs->Uses;
- cop = cglobs->Contents;
- for (rn = 1; rn < cglobs->MaxCTemps; ++rn) {
- *up++ = *cop++ = NIL;
- }
+ case orlast_op: {
+ up = cglobs->Uses;
+ cop = cglobs->Contents;
+ for (rn = 1; rn < cglobs->MaxCTemps; ++rn) {
+ *up++ = *cop++ = NIL;
}
- break;
- case label_op:
- {
- up = cglobs->Uses;
- cop = cglobs->Contents;
- for (rn = 0; rn < cglobs->MaxCTemps; ++rn) {
- if (*cop != (TempVar | rn)) {
- *up++ = *cop++ = NIL;
- } else {
- up++;
- cop++;
- }
- }
+ } break;
+ case label_op: {
+ up = cglobs->Uses;
+ cop = cglobs->Contents;
+ for (rn = 0; rn < cglobs->MaxCTemps; ++rn) {
+ if (*cop != (TempVar | rn)) {
+ *up++ = *cop++ = NIL;
+ } else {
+ up++;
+ cop++;
+ }
}
- break;
+ } break;
case restore_tmps_and_skip_op:
case restore_tmps_op:
/*
- This instruction is required by the garbage collector to find out
- how many temporaries are live right now. It is also useful when
- waking up goals before an either or ! instruction.
+ This instruction is required by the garbage collector to find out
+ how many temporaries are live right now. It is also useful when
+ waking up goals before an either or ! instruction.
*/
{
- PInstr *mycpc = cglobs->cint.cpc, *oldCodeStart = cglobs->cint.CodeStart;
- int i, max;
+ PInstr *mycpc = cglobs->cint.cpc,
+ *oldCodeStart = cglobs->cint.CodeStart;
+ int i, max;
- /* instructions must be placed at BlobsStart */
- cglobs->cint.CodeStart = cglobs->cint.BlobsStart;
- cglobs->cint.cpc = cglobs->cint.icpc;
- max = 0;
- for (i = 1; i < cglobs->MaxCTemps; ++i) {
- if (cglobs->Contents[i]) max = i;
- }
- Yap_emit(label_op, ++cglobs->labelno, Zero, &cglobs->cint);
- mycpc->rnd1 = cglobs->labelno;
- rn = copy_live_temps_bmap(max, cglobs);
- cglobs->cint.icpc = cglobs->cint.cpc;
- cglobs->cint.BlobsStart = cglobs->cint.CodeStart;
- cglobs->cint.cpc = mycpc;
- cglobs->cint.CodeStart = oldCodeStart;
+ /* instructions must be placed at BlobsStart */
+ cglobs->cint.CodeStart = cglobs->cint.BlobsStart;
+ cglobs->cint.cpc = cglobs->cint.icpc;
+ max = 0;
+ for (i = 1; i < cglobs->MaxCTemps; ++i) {
+ if (cglobs->Contents[i])
+ max = i;
+ }
+ Yap_emit(label_op, ++cglobs->labelno, Zero, &cglobs->cint);
+ mycpc->rnd1 = cglobs->labelno;
+ rn = copy_live_temps_bmap(max, cglobs);
+ cglobs->cint.icpc = cglobs->cint.cpc;
+ cglobs->cint.BlobsStart = cglobs->cint.CodeStart;
+ cglobs->cint.cpc = mycpc;
+ cglobs->cint.CodeStart = oldCodeStart;
}
default:
break;
}
if (cglobs->cint.cpc->nextInst)
cglobs->cint.cpc = cglobs->cint.cpc->nextInst;
- else return;
+ else
+ return;
}
}
-static void
-push_allocate(PInstr *pc, PInstr *oldpc)
-{
+static void push_allocate(PInstr *pc, PInstr *oldpc) {
/*
The idea is to push an allocate forward as much as we can. This
- delays work in the emulated code, and in the best case we may get rid of
+ delays work in the emulated code, and in the best case we may get rid of
allocates altogether.
*/
/* we can push the allocate */
@@ -3228,7 +3131,7 @@ push_allocate(PInstr *pc, PInstr *oldpc)
PInstr *initial = oldpc, *dealloc_founds[16];
int d_founds = 0;
int level = 0;
-
+
while (pc) {
switch (pc->op) {
case jump_op:
@@ -3236,20 +3139,21 @@ push_allocate(PInstr *pc, PInstr *oldpc)
case call_op:
case safe_call_op:
if (!safe)
- return;
+ return;
else {
- PInstr *where = initial->nextInst->nextInst;
- while (d_founds)
- dealloc_founds[--d_founds]->op = nop_op;
- if (where == pc || oldpc == initial->nextInst)
- return;
- oldpc->nextInst = initial->nextInst;
- initial->nextInst->nextInst = pc;
- initial->nextInst = where;
- return;
+ PInstr *where = initial->nextInst->nextInst;
+ while (d_founds)
+ dealloc_founds[--d_founds]->op = nop_op;
+ if (where == pc || oldpc == initial->nextInst)
+ return;
+ oldpc->nextInst = initial->nextInst;
+ initial->nextInst->nextInst = pc;
+ initial->nextInst = where;
+ return;
}
case push_or_op:
- /* we cannot just put an allocate here, because it may never be executed */
+ /* we cannot just put an allocate here, because it may never be executed
+ */
level++;
safe = FALSE;
break;
@@ -3257,7 +3161,7 @@ push_allocate(PInstr *pc, PInstr *oldpc)
/* last branch and we did not need an allocate so far, cool! */
level--;
if (!level)
- safe = TRUE;
+ safe = TRUE;
break;
case cut_op:
case either_op:
@@ -3266,7 +3170,7 @@ push_allocate(PInstr *pc, PInstr *oldpc)
case deallocate_op:
dealloc_founds[d_founds++] = pc;
if (d_founds == 16)
- return;
+ return;
default:
break;
}
@@ -3275,11 +3179,7 @@ push_allocate(PInstr *pc, PInstr *oldpc)
}
}
-
-
-static void
-c_optimize(PInstr *pc)
-{
+static void c_optimize(PInstr *pc) {
char onTail;
Ventry *v;
PInstr *opc = NULL;
@@ -3304,55 +3204,51 @@ c_optimize(PInstr *pc)
case get_var_op:
/* handle clumsy either branches */
if (npc->op == f_0_op) {
- npc->rnd1 = pc->rnd1;
- npc->op = f_var_op;
- pc->op = nop_op;
- break;
+ npc->rnd1 = pc->rnd1;
+ npc->op = f_var_op;
+ pc->op = nop_op;
+ break;
}
case put_val_op:
- case get_val_op:
- {
- Ventry *ve = (Ventry *) pc->rnd1;
+ case get_val_op: {
+ Ventry *ve = (Ventry *)pc->rnd1;
- if (ve->KindOfVE == TempVar) {
- UInt argno = ve->NoOfVE & MaskVarAdrs;
- if (argno && argno == pc->rnd2) {
- pc->op = nop_op;
- }
- }
+ if (ve->KindOfVE == TempVar) {
+ UInt argno = ve->NoOfVE & MaskVarAdrs;
+ if (argno && argno == pc->rnd2) {
+ pc->op = nop_op;
+ }
}
+ }
onTail = 1;
break;
- case save_pair_op:
- {
- Term ve = (Term) pc->rnd1;
- PInstr *npc = pc->nextInst;
+ case save_pair_op: {
+ Term ve = (Term)pc->rnd1;
+ PInstr *npc = pc->nextInst;
- if (((Ventry *) ve)->RCountOfVE <= 1)
- pc->op = nop_op;
- else {
- *pc = *npc;
- pc->nextInst = npc;
- npc->op = save_pair_op;
- npc->rnd1 = (CELL) ve;
- }
- }
- break;
- case save_appl_op:
- {
- Term ve = (Term) pc->rnd1;
- PInstr *npc = pc->nextInst;
-
- if (((Ventry *) ve)->RCountOfVE <= 1)
- pc->op = nop_op;
- else {
- *pc = *npc;
- pc->nextInst = npc;
- npc->op = save_appl_op;
- npc->rnd1 = (CELL) ve;
- }
- break;
+ if (((Ventry *)ve)->RCountOfVE <= 1)
+ pc->op = nop_op;
+ else {
+ *pc = *npc;
+ pc->nextInst = npc;
+ npc->op = save_pair_op;
+ npc->rnd1 = (CELL)ve;
}
+ } break;
+ case save_appl_op: {
+ Term ve = (Term)pc->rnd1;
+ PInstr *npc = pc->nextInst;
+
+ if (((Ventry *)ve)->RCountOfVE <= 1)
+ pc->op = nop_op;
+ else {
+ *pc = *npc;
+ pc->nextInst = npc;
+ npc->op = save_appl_op;
+ npc->rnd1 = (CELL)ve;
+ }
+ break;
+ }
case nop_op:
break;
case unify_var_op:
@@ -3364,49 +3260,47 @@ c_optimize(PInstr *pc)
* finish the structure for the last instructions to
* work correctly. Instead, we will use unify_void
* with very little overhead */
- v = (Ventry *) (pc->rnd1);
+ v = (Ventry *)(pc->rnd1);
if (v->KindOfVE == VoidVar && onTail) {
pc->op = nop_op;
- }
- else
-#endif /* OLD_SYSTEM */
- onTail = 0;
+ } else
+#endif /* OLD_SYSTEM */
+ onTail = 0;
break;
case unify_val_op:
- v = (Ventry *) (pc->rnd1);
+ v = (Ventry *)(pc->rnd1);
if (!(v->FlagsOfVE & GlobalVal))
- pc->op = unify_local_op;
+ pc->op = unify_local_op;
onTail = 0;
break;
case unify_last_val_op:
- v = (Ventry *) (pc->rnd1);
+ v = (Ventry *)(pc->rnd1);
if (!(v->FlagsOfVE & GlobalVal))
- pc->op = unify_last_local_op;
+ pc->op = unify_last_local_op;
onTail = 0;
break;
case write_val_op:
- v = (Ventry *) (pc->rnd1);
+ v = (Ventry *)(pc->rnd1);
if (!(v->FlagsOfVE & GlobalVal))
- pc->op = write_local_op;
+ pc->op = write_local_op;
onTail = 0;
break;
case pop_op:
if (FALSE && onTail == 1) {
- pc->op = nop_op;
- onTail = 1;
- break;
- }
- else {
- PInstr *p = pc->nextInst;
+ pc->op = nop_op;
+ onTail = 1;
+ break;
+ } else {
+ PInstr *p = pc->nextInst;
- while (p != NIL && p->op == nop_op)
- p = p->nextInst;
- if (p != NIL && p->op == pop_op) {
- pc->rnd1 += p->rnd1;
- pc->nextInst = p->nextInst;
- }
- onTail = 2;
- break;
+ while (p != NIL && p->op == nop_op)
+ p = p->nextInst;
+ if (p != NIL && p->op == pop_op) {
+ pc->rnd1 += p->rnd1;
+ pc->nextInst = p->nextInst;
+ }
+ onTail = 2;
+ break;
}
case write_var_op:
case unify_atom_op:
@@ -3455,15 +3349,15 @@ c_optimize(PInstr *pc)
if (pc->op == allocate_op) {
push_allocate(pc, opc);
break;
- }
+ }
opc = pc;
pc = pc->nextInst;
}
}
-yamop *
-Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
-{ /* compile a prolog clause, copy of clause myst be in ARG1 */
+yamop *Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod,
+ volatile Term src) { /* compile a prolog clause, copy of
+ clause myst be in ARG1 */
CACHE_REGS
/* returns address of code for clause */
Term head, body;
@@ -3473,13 +3367,14 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
volatile int maxvnum = 512;
int botch_why;
/* may botch while doing a different module */
- /* first, initialize cglobs->cint.CompilerBotch to handle all cases of interruptions */
+ /* first, initialize cglobs->cint.CompilerBotch to handle all cases of
+ * interruptions */
compiler_struct cglobs;
-
- #ifdef TABLING_INNER_CUTS
+
+#ifdef TABLING_INNER_CUTS
PInstr cglobs_cut_mark;
cglobs.cut_mark = &cglobs_cut_mark;
- #endif /* TABLING_INNER_CUTS */
+#endif /* TABLING_INNER_CUTS */
/* make sure we know there was no error yet */
LOCAL_ErrorMessage = NULL;
@@ -3487,28 +3382,26 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
restore_machine_regs();
reset_vars(cglobs.vtable);
Yap_ReleaseCMem(&cglobs.cint);
- switch(botch_why) {
+ switch (botch_why) {
case OUT_OF_STACK_BOTCH:
/* out of local stack, just duplicate the stack */
{
- Int osize = 2*sizeof(CELL)*(ASP-HR);
- ARG1 = inp_clause;
- ARG3 = src;
+ Int osize = 2 * sizeof(CELL) * (ASP - HR);
+ ARG1 = inp_clause;
+ ARG3 = src;
- YAPLeaveCriticalSection();
- if (!Yap_gcl(LOCAL_Error_Size, NOfArgs, ENV, gc_P(P,CP))) {
- LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
- LOCAL_Error_Term = inp_clause;
- }
- if (osize > ASP-HR) {
- if (!Yap_growstack(2*sizeof(CELL)*(ASP-HR))) {
- LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
- LOCAL_Error_Term = inp_clause;
- }
- }
- YAPEnterCriticalSection();
- src = ARG3;
- inp_clause = ARG1;
+ YAPLeaveCriticalSection();
+ if (!Yap_gcl(LOCAL_Error_Size, NOfArgs, ENV, gc_P(P, CP))) {
+ LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
+ }
+ if (osize > ASP - HR) {
+ if (!Yap_growstack(2 * sizeof(CELL) * (ASP - HR))) {
+ LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
+ }
+ }
+ YAPEnterCriticalSection();
+ src = ARG3;
+ inp_clause = ARG1;
}
break;
case OUT_OF_AUX_BOTCH:
@@ -3517,8 +3410,7 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
ARG1 = inp_clause;
ARG3 = src;
if (!Yap_ExpandPreAllocCodeSpace(LOCAL_Error_Size, NULL, TRUE)) {
- LOCAL_Error_TYPE = RESOURCE_ERROR_AUXILIARY_STACK;
- LOCAL_Error_Term = inp_clause;
+ LOCAL_Error_TYPE = RESOURCE_ERROR_AUXILIARY_STACK;
}
YAPEnterCriticalSection();
src = ARG3;
@@ -3526,10 +3418,10 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
break;
case OUT_OF_TEMPS_BOTCH:
/* out of temporary cells */
- if (maxvnum < 16*1024) {
- maxvnum *= 2;
+ if (maxvnum < 16 * 1024) {
+ maxvnum *= 2;
} else {
- maxvnum += 4096;
+ maxvnum += 4096;
}
break;
case OUT_OF_HEAP_BOTCH:
@@ -3538,9 +3430,8 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
ARG3 = src;
YAPLeaveCriticalSection();
if (!Yap_growheap(FALSE, LOCAL_Error_Size, NULL)) {
- LOCAL_Error_TYPE = RESOURCE_ERROR_HEAP;
- LOCAL_Error_Term = inp_clause;
- return NULL;
+ LOCAL_Error_TYPE = RESOURCE_ERROR_HEAP;
+ return NULL;
}
YAPEnterCriticalSection();
src = ARG3;
@@ -3551,10 +3442,9 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
ARG1 = inp_clause;
ARG3 = src;
YAPLeaveCriticalSection();
- if (!Yap_growtrail(LOCAL_TrailTop-(ADDR)TR, FALSE)) {
- LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
- LOCAL_Error_Term = inp_clause;
- return NULL;
+ if (!Yap_growtrail(LOCAL_TrailTop - (ADDR)TR, FALSE)) {
+ LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
+ return NULL;
}
YAPEnterCriticalSection();
src = ARG3;
@@ -3570,24 +3460,25 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
LOCAL_Error_Size = 0;
LOCAL_Error_TYPE = YAP_NO_ERROR;
/* initialize variables for code generation */
-
+
cglobs.cint.CodeStart = cglobs.cint.cpc = NULL;
cglobs.cint.BlobsStart = cglobs.cint.icpc = NULL;
cglobs.cint.dbterml = NULL;
cglobs.cint.blks = NULL;
cglobs.cint.label_offset = NULL;
- cglobs.cint.freep =
- cglobs.cint.freep0 =
- (char *) (HR + maxvnum+(sizeof(Int)/sizeof(CELL))*MaxTemps+MaxTemps);
+ cglobs.cint.freep = cglobs.cint.freep0 =
+ (char *)(HR + maxvnum + (sizeof(Int) / sizeof(CELL)) * MaxTemps +
+ MaxTemps);
cglobs.cint.success_handler = 0L;
- if (ASP <= CellPtr (cglobs.cint.freep) + 256) {
+ if (ASP <= CellPtr(cglobs.cint.freep) + 256) {
cglobs.vtable = NULL;
- LOCAL_Error_Size = (256+maxvnum)*sizeof(CELL);
+ LOCAL_Error_Size = (256 + maxvnum) * sizeof(CELL);
save_machine_regs();
- siglongjmp(cglobs.cint.CompilerBotch,3);
+ siglongjmp(cglobs.cint.CompilerBotch, 3);
}
- cglobs.Uses = (Int *)(HR+maxvnum);
- cglobs.Contents = (Term *)(HR+maxvnum+(sizeof(Int)/sizeof(CELL))*MaxTemps);
+ cglobs.Uses = (Int *)(HR + maxvnum);
+ cglobs.Contents =
+ (Term *)(HR + maxvnum + (sizeof(Int) / sizeof(CELL)) * MaxTemps);
cglobs.curbranch = cglobs.onbranch = 0;
cglobs.branch_pointer = cglobs.parent_branches;
cglobs.or_found = FALSE;
@@ -3597,7 +3488,7 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
cglobs.needs_env = FALSE;
/*
* 2000 added to H in case we need to construct call(G) when G is a
- * variable used as a goal
+ * variable used as a goal
*/
cglobs.vtable = NULL;
cglobs.common_exps = NULL;
@@ -3607,39 +3498,40 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
cglobs.hasdbrefs = FALSE;
if (IsVarTerm(my_clause)) {
LOCAL_Error_TYPE = INSTANTIATION_ERROR;
- LOCAL_Error_Term = my_clause;
LOCAL_ErrorMessage = "in compiling clause";
return 0;
}
if (IsApplTerm(my_clause) && FunctorOfTerm(my_clause) == FunctorAssert) {
head = ArgOfTerm(1, my_clause);
body = ArgOfTerm(2, my_clause);
- }
- else {
+ } else {
head = my_clause, body = MkAtomTerm(AtomTrue);
}
- if (IsVarTerm(head) || IsPairTerm(head) || IsIntTerm(head) || IsFloatTerm(head) || IsRefTerm(head)) {
+ if (IsVarTerm(head) || IsPairTerm(head) || IsIntTerm(head) ||
+ IsFloatTerm(head) || IsRefTerm(head)) {
LOCAL_Error_TYPE = TYPE_ERROR_CALLABLE;
- LOCAL_Error_Term = head;
LOCAL_ErrorMessage = "clause head should be atom or compound term";
return (0);
} else {
-
+
/* find out which predicate we are compiling for */
if (IsAtomTerm(head)) {
Atom ap = AtomOfTerm(head);
cglobs.cint.CurrentPred = RepPredProp(PredPropByAtom(ap, mod));
} else {
- cglobs.cint.CurrentPred = RepPredProp(PredPropByFunc(FunctorOfTerm(head),mod));
+ cglobs.cint.CurrentPred =
+ RepPredProp(PredPropByFunc(FunctorOfTerm(head), mod));
}
/* insert extra instructions to count calls */
- PELOCK(52,cglobs.cint.CurrentPred);
+ PELOCK(52, cglobs.cint.CurrentPred);
if ((cglobs.cint.CurrentPred->PredFlags & ProfiledPredFlag) ||
- (PROFILING && (cglobs.cint.CurrentPred->cs.p_code.FirstClause == NIL))) {
+ (PROFILING &&
+ (cglobs.cint.CurrentPred->cs.p_code.FirstClause == NIL))) {
profiling = TRUE;
call_counting = FALSE;
} else if ((cglobs.cint.CurrentPred->PredFlags & CountPredFlag) ||
- (CALL_COUNTING && (cglobs.cint.CurrentPred->cs.p_code.FirstClause == NIL))) {
+ (CALL_COUNTING &&
+ (cglobs.cint.CurrentPred->cs.p_code.FirstClause == NIL))) {
call_counting = TRUE;
profiling = FALSE;
} else {
@@ -3655,9 +3547,10 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
if (cglobs.is_a_fact && !cglobs.vtable) {
#ifdef TABLING
- PELOCK(53,cglobs.cint.CurrentPred);
+ PELOCK(53, cglobs.cint.CurrentPred);
if (is_tabled(cglobs.cint.CurrentPred))
- Yap_emit(table_new_answer_op, Zero, cglobs.cint.CurrentPred->ArityOfPE, &cglobs.cint);
+ Yap_emit(table_new_answer_op, Zero, cglobs.cint.CurrentPred->ArityOfPE,
+ &cglobs.cint);
else
#endif /* TABLING */
Yap_emit(procceed_op, Zero, Zero, &cglobs.cint);
@@ -3687,11 +3580,12 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
Yap_emit(allocate_op, Zero, Zero, &cglobs.cint);
#ifdef BEAM
- if (EAM) Yap_emit(body_op, Zero, Zero, &cglobs.cint);
+ if (EAM)
+ Yap_emit(body_op, Zero, Zero, &cglobs.cint);
#endif
c_body(body, mod, &cglobs);
- /* Insert blobs at the very end */
+ /* Insert blobs at the very end */
if (cglobs.space_op)
cglobs.space_op->rnd1 = cglobs.space_used;
@@ -3714,12 +3608,12 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
#endif
/* phase 2: classify variables and optimize temporaries */
c_layout(&cglobs);
- /* Insert blobs at the very end */
+ /* Insert blobs at the very end */
if (cglobs.cint.BlobsStart != NULL) {
cglobs.cint.cpc->nextInst = cglobs.cint.BlobsStart;
cglobs.cint.BlobsStart = NULL;
while (cglobs.cint.cpc->nextInst != NULL)
- cglobs.cint.cpc = cglobs.cint.cpc->nextInst;
+ cglobs.cint.cpc = cglobs.cint.cpc->nextInst;
}
}
/* eliminate superfluous pop's and unify_var's */
@@ -3730,17 +3624,21 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
#endif
#ifdef BEAM
- {
- void codigo_eam(compiler_struct *);
-
- if (EAM) codigo_eam(&cglobs);
- }
+ {
+ void codigo_eam(compiler_struct *);
+
+ if (EAM)
+ codigo_eam(&cglobs);
+ }
#endif
/* phase 3: assemble code */
- acode = Yap_assemble(ASSEMBLING_CLAUSE, src, cglobs.cint.CurrentPred, (cglobs.is_a_fact && !cglobs.hasdbrefs && !(cglobs.cint.CurrentPred->PredFlags & TabledPredFlag)), &cglobs.cint, cglobs.labelno+1);
+ acode = Yap_assemble(ASSEMBLING_CLAUSE, src, cglobs.cint.CurrentPred,
+ (cglobs.is_a_fact && !cglobs.hasdbrefs &&
+ !(cglobs.cint.CurrentPred->PredFlags & TabledPredFlag)),
+ &cglobs.cint, cglobs.labelno + 1);
/* check first if there was space for us */
- Yap_ReleaseCMem (&cglobs.cint);
+ Yap_ReleaseCMem(&cglobs.cint);
if (acode == NULL) {
return NULL;
} else {
@@ -3749,6 +3647,5 @@ Yap_cclause(volatile Term inp_clause, Int NOfArgs, Term mod, volatile Term src)
}
#ifdef BEAM
- #include "toeam.c"
+#include "toeam.c"
#endif
-
diff --git a/C/dbase.c b/C/dbase.c
index 8c944d905..195cf6d72 100644
--- a/C/dbase.c
+++ b/C/dbase.c
@@ -336,19 +336,18 @@ static int recover_from_record_error(int nargs) {
goto recover_record;
case RESOURCE_ERROR_HEAP:
if (!Yap_growheap(FALSE, LOCAL_Error_Size, NULL)) {
- Yap_Error(RESOURCE_ERROR_HEAP, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ Yap_Error(RESOURCE_ERROR_HEAP, TermNil, LOCAL_ErrorMessage);
return FALSE;
}
goto recover_record;
case RESOURCE_ERROR_AUXILIARY_STACK:
if (!Yap_ExpandPreAllocCodeSpace(LOCAL_Error_Size, NULL, TRUE)) {
- Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, LOCAL_Error_Term,
- LOCAL_ErrorMessage);
+ Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, TermNil, LOCAL_ErrorMessage);
return FALSE;
}
goto recover_record;
default:
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ Yap_Error(LOCAL_Error_TYPE, TermNil, LOCAL_ErrorMessage);
return FALSE;
}
recover_record:
@@ -1121,7 +1120,6 @@ static void sf_include(SFKeep *sfp, struct db_globs *dbg) SFKeep *sfp;
j += 2;
} else {
LOCAL_Error_TYPE = TYPE_ERROR_DBTERM;
- LOCAL_Error_Term = d0;
LOCAL_ErrorMessage = "wrong term in SF";
return (NULL);
}
@@ -1242,7 +1240,6 @@ static DBRef generate_dberror_msg(int errnumb, UInt sz, char *msg) {
CACHE_REGS
LOCAL_Error_Size = sz;
LOCAL_Error_TYPE = errnumb;
- LOCAL_Error_Term = TermNil;
LOCAL_ErrorMessage = msg;
return NULL;
}
@@ -2611,7 +2608,6 @@ static int resize_int_keys(UInt new_size) {
if (new == NULL) {
YAPLeaveCriticalSection();
LOCAL_Error_TYPE = RESOURCE_ERROR_HEAP;
- LOCAL_Error_Term = TermNil;
LOCAL_ErrorMessage = "could not allocate space";
return FALSE;
}
@@ -2693,7 +2689,6 @@ static PredEntry *new_lu_int_key(Int key) {
if (INT_LU_KEYS == NULL) {
CACHE_REGS
LOCAL_Error_TYPE = RESOURCE_ERROR_HEAP;
- LOCAL_Error_Term = TermNil;
LOCAL_ErrorMessage = "could not allocate space";
return NULL;
}
@@ -2825,7 +2820,6 @@ static DBProp FetchIntDBPropFromKey(Int key, int flag, int new,
if (INT_KEYS == NULL) {
CACHE_REGS
LOCAL_Error_TYPE = RESOURCE_ERROR_HEAP;
- LOCAL_Error_Term = TermNil;
LOCAL_ErrorMessage = "could not allocate space";
return NULL;
}
diff --git a/C/errors.c b/C/errors.c
index dba801a01..c1b52d23f 100755
--- a/C/errors.c
+++ b/C/errors.c
@@ -74,16 +74,17 @@ bool Yap_Warning(const char *s, ...) {
return rc;
}
void Yap_InitError(yap_error_number e, Term t, const char *msg) {
- if (LOCAL_ActiveError.status) {
+ if (LOCAL_ActiveError->status) {
Yap_exit(1);
}
- LOCAL_ActiveError.errorNo = e;
- LOCAL_ActiveError.errorFile = NULL;
- LOCAL_ActiveError.errorFunction = NULL;
- LOCAL_ActiveError.errorLine = 0;
+ LOCAL_ActiveError->errorNo = e;
+ LOCAL_ActiveError->errorFile = NULL;
+ LOCAL_ActiveError->errorFunction = NULL;
+ LOCAL_ActiveError->errorLine = 0;
if (msg) {
LOCAL_Error_Size = strlen(msg);
- strcpy(LOCAL_ActiveError.errorComment, msg);
+ LOCAL_ActiveError->errorMsg = malloc(LOCAL_Error_Size + 1);
+ strcpy(LOCAL_ActiveError->errorMsg, msg);
} else {
LOCAL_Error_Size = 0;
}
@@ -158,7 +159,7 @@ bool Yap_HandleError__(const char *file, const char *function, int lineno,
return false;
}
default:
- Yap_Error__(file, function, lineno, err, LOCAL_Error_Term, serr);
+ Yap_Error__(file, function, lineno, err, TermNil, serr);
return false;
}
}
@@ -196,7 +197,7 @@ int Yap_SWIHandleError(const char *s, ...) {
return FALSE;
}
default:
- Yap_Error(err, LOCAL_Error_Term, serr);
+ Yap_Error(err, TermNil, serr);
return (FALSE);
}
}
@@ -266,8 +267,8 @@ static char tmpbuf[YAP_BUF_SIZE];
}
#define END_ERROR_CLASSES() \
- } \
- return TermNil; \
+ } \
+ return TermNil; \
}
#define BEGIN_ERRORS() \
@@ -292,11 +293,44 @@ static char tmpbuf[YAP_BUF_SIZE];
return mkerrorct(B, ts);
#define END_ERRORS() \
- } return TermNil; \
+ } \
+ return TermNil; \
}
#include "YapErrors.h"
+void Yap_pushErrorContext(yap_error_descriptor_t *new_error) {
+ new_error->top_error = LOCAL_ActiveError;
+ LOCAL_ActiveError = new_error;
+}
+
+yap_error_descriptor_t *Yap_popErrorContext(void) {
+ yap_error_descriptor_t *new_error = LOCAL_ActiveError;
+ LOCAL_ActiveError = LOCAL_ActiveError->top_error;
+ return new_error;
+}
+
+void Yap_ThrowError__(const char *file, const char *function, int lineno,
+ yap_error_number type, Term where, ...) {
+ va_list ap;
+ char tmpbuf[MAXPATHLEN];
+
+ va_start(ap, where);
+ char *format = va_arg(ap, char *);
+ if (format != NULL) {
+#if HAVE_VSNPRINTF
+ (void)vsnprintf(tmpbuf, MAXPATHLEN - 1, format, ap);
+#else
+ (void)vsprintf(tnpbuf, format, ap);
+#endif
+ // fprintf(stderr, "warning: ");
+ Yap_Error__(file, function, lineno, type, where, tmpbuf);
+ } else {
+ Yap_Error__(file, function, lineno, type, where);
+ }
+ siglongjmp(LOCAL_RestartEnv, 4);
+}
+
/**
* @brief Yap_Error
* This function handles errors in the C code. Check errors.yap for the
@@ -343,17 +377,17 @@ yamop *Yap_Error__(const char *file, const char *function, int lineno,
/* disallow recursive error handling */
if (LOCAL_PrologMode & InErrorMode) {
- fprintf(stderr, "%% ERROR WITHIN ERROR %d: %s\n", LOCAL_CurrentError,
- tmpbuf);
+ fprintf(stderr, "%% ERROR WITHIN ERROR %d: %s\n", LOCAL_Error_TYPE, tmpbuf);
Yap_RestartYap(1);
}
- LOCAL_ActiveError.errorNo = type;
- LOCAL_ActiveError.errorAsText = Yap_LookupAtom(Yap_errorName( type ));
- LOCAL_ActiveError.errorClass = Yap_errorClass( type);
- LOCAL_ActiveError.classAsText = Yap_LookupAtom(Yap_errorClassName( LOCAL_ActiveError.errorClass ));
- LOCAL_ActiveError.errorLine = lineno;
- LOCAL_ActiveError.errorFunction = function;
- LOCAL_ActiveError.errorFile = file;
+ LOCAL_ActiveError->errorNo = type;
+ LOCAL_ActiveError->errorAsText = Yap_LookupAtom(Yap_errorName(type));
+ LOCAL_ActiveError->errorClass = Yap_errorClass(type);
+ LOCAL_ActiveError->classAsText =
+ Yap_LookupAtom(Yap_errorClassName(LOCAL_ActiveError->errorClass));
+ LOCAL_ActiveError->errorLine = lineno;
+ LOCAL_ActiveError->errorFunction = function;
+ LOCAL_ActiveError->errorFile = file;
Yap_find_prolog_culprit(PASS_REGS1);
LOCAL_PrologMode |= InErrorMode;
Yap_ClearExs();
@@ -380,7 +414,7 @@ yamop *Yap_Error__(const char *file, const char *function, int lineno,
}
if (LOCAL_within_print_message) {
/* error within error */
- fprintf(stderr, "%% ERROR WITHIN WARNING %d: %s\n", LOCAL_CurrentError,
+ fprintf(stderr, "%% ERROR WITHIN WARNING %d: %s\n", LOCAL_Error_TYPE,
tmpbuf);
LOCAL_PrologMode &= ~InErrorMode;
Yap_exit(1);
@@ -395,8 +429,8 @@ yamop *Yap_Error__(const char *file, const char *function, int lineno,
#endif
// fprintf(stderr, "warning: ");
comment = MkAtomTerm(Yap_LookupAtom(s));
- } else if (LOCAL_ErrorSay && LOCAL_ErrorSay[0]) {
- comment = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorSay));
+ } else if (LOCAL_ErrorMessage && LOCAL_ErrorMessage[0]) {
+ comment = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
} else {
comment = TermNil;
}
@@ -410,7 +444,6 @@ yamop *Yap_Error__(const char *file, const char *function, int lineno,
if (type == ABORT_EVENT || LOCAL_PrologMode & BootMode) {
where = TermNil;
LOCAL_PrologMode &= ~AbortMode;
- LOCAL_CurrentError = type;
LOCAL_PrologMode &= ~InErrorMode;
/* make sure failure will be seen at next port */
// no need to lock & unlock
@@ -426,7 +459,6 @@ yamop *Yap_Error__(const char *file, const char *function, int lineno,
}
/* Exit Abort Mode, if we were there */
LOCAL_PrologMode &= ~AbortMode;
- LOCAL_CurrentError = type;
LOCAL_PrologMode |= InErrorMode;
if (!(where = Yap_CopyTerm(where))) {
where = TermNil;
@@ -528,14 +560,10 @@ yamop *Yap_Error__(const char *file, const char *function, int lineno,
/* This is used by some complex procedures to detect there was an error */
if (IsAtomTerm(nt[0])) {
- strncpy(LOCAL_ErrorSay, (char *)RepAtom(AtomOfTerm(nt[0]))->StrOfAE,
- MAX_ERROR_MSG_SIZE);
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
+ LOCAL_ErrorMessage = RepAtom(AtomOfTerm(nt[0]))->StrOfAE;
} else {
- strncpy(LOCAL_ErrorSay,
- (char *)RepAtom(NameOfFunctor(FunctorOfTerm(nt[0])))->StrOfAE,
- MAX_ERROR_MSG_SIZE);
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
+ LOCAL_ErrorMessage =
+ (char *)RepAtom(NameOfFunctor(FunctorOfTerm(nt[0])))->StrOfAE;
}
nt[1] = TermNil;
switch (type) {
diff --git a/C/eval.c b/C/eval.c
index 4f7569f92..b4c08d13d 100644
--- a/C/eval.c
+++ b/C/eval.c
@@ -15,23 +15,22 @@
* *
*************************************************************************/
#ifdef SCCS
-static char SccsId[] = "%W% %G%";
+static char SccsId[] = "%W% %G%";
#endif
//! @file eval.c
-//! @{
+//! @{
/**
@defgroup arithmetic_preds Arithmetic Predicates
@ingroup arithmetic
*/
-
-
#include "Yap.h"
-#include "Yatom.h"
+
#include "YapHeap.h"
+#include "Yatom.h"
#include "eval.h"
#if HAVE_STDARG_H
#include
@@ -46,41 +45,39 @@ static char SccsId[] = "%W% %G%";
static Term Eval(Term t1 USES_REGS);
-static Term
-get_matrix_element(Term t1, Term t2 USES_REGS)
-{
+static Term get_matrix_element(Term t1, Term t2 USES_REGS) {
if (!IsPairTerm(t2)) {
if (t2 == MkAtomTerm(AtomLength)) {
Int sz = 1;
while (IsApplTerm(t1)) {
- Functor f = FunctorOfTerm(t1);
- if (NameOfFunctor(f) != AtomNil) {
- return MkIntegerTerm(sz);
- }
- sz *= ArityOfFunctor(f);
- t1 = ArgOfTerm(1, t1);
+ Functor f = FunctorOfTerm(t1);
+ if (NameOfFunctor(f) != AtomNil) {
+ return MkIntegerTerm(sz);
+ }
+ sz *= ArityOfFunctor(f);
+ t1 = ArgOfTerm(1, t1);
}
return MkIntegerTerm(sz);
}
Yap_ArithError(TYPE_ERROR_EVALUABLE, t2, "X is Y^[A]");
- return FALSE;
+ return FALSE;
}
while (IsPairTerm(t2)) {
Int indx;
Term indxt = Eval(HeadOfTerm(t2) PASS_REGS);
if (!IsIntegerTerm(indxt)) {
Yap_ArithError(TYPE_ERROR_EVALUABLE, t2, "X is Y^[A]");
- return FALSE;
+ return FALSE;
}
indx = IntegerOfTerm(indxt);
if (!IsApplTerm(t1)) {
Yap_ArithError(TYPE_ERROR_EVALUABLE, t1, "X is Y^[A]");
- return FALSE;
+ return FALSE;
} else {
Functor f = FunctorOfTerm(t1);
if (ArityOfFunctor(f) < indx) {
- Yap_ArithError(TYPE_ERROR_EVALUABLE, t1, "X is Y^[A]");
- return FALSE;
+ Yap_ArithError(TYPE_ERROR_EVALUABLE, t1, "X is Y^[A]");
+ return FALSE;
}
}
t1 = ArgOfTerm(indx, t1);
@@ -93,95 +90,90 @@ get_matrix_element(Term t1, Term t2 USES_REGS)
return Eval(t1 PASS_REGS);
}
-static Term
-Eval(Term t USES_REGS)
-{
+static Term Eval(Term t USES_REGS) {
if (IsVarTerm(t)) {
- return Yap_ArithError(INSTANTIATION_ERROR,t,"in arithmetic");
+ Yap_ArithError(INSTANTIATION_ERROR, t, "in arithmetic");
} else if (IsNumTerm(t)) {
return t;
} else if (IsAtomTerm(t)) {
ExpEntry *p;
- Atom name = AtomOfTerm(t);
+ Atom name = AtomOfTerm(t);
if (EndOfPAEntr(p = RepExpProp(Yap_GetExpProp(name, 0)))) {
- return Yap_ArithError(TYPE_ERROR_EVALUABLE, takeIndicator(t),
- "atom %s in arithmetic expression",
- RepAtom(name)->StrOfAE);
+ Yap_ArithError(TYPE_ERROR_EVALUABLE, takeIndicator(t),
+ "atom %s in arithmetic expression",
+ RepAtom(name)->StrOfAE);
}
return Yap_eval_atom(p->FOfEE);
} else if (IsApplTerm(t)) {
Functor fun = FunctorOfTerm(t);
if (fun == FunctorString) {
- const char *s = (const char*)StringOfTerm(t);
+ const char *s = (const char *)StringOfTerm(t);
if (s[1] == '\0')
- return MkIntegerTerm(s[0]);
- return Yap_ArithError(TYPE_ERROR_EVALUABLE, t,
- "string in arithmetic expression");
+ return MkIntegerTerm(s[0]);
+ Yap_ArithError(TYPE_ERROR_EVALUABLE, t,
+ "string in arithmetic expression");
} else if ((Atom)fun == AtomFoundVar) {
- return Yap_ArithError(TYPE_ERROR_EVALUABLE, TermNil,
- "cyclic term in arithmetic expression");
+ Yap_ArithError(TYPE_ERROR_EVALUABLE, TermNil,
+ "cyclic term in arithmetic expression");
} else {
Int n = ArityOfFunctor(fun);
- Atom name = NameOfFunctor(fun);
+ Atom name = NameOfFunctor(fun);
ExpEntry *p;
Term t1, t2;
-
+
if (EndOfPAEntr(p = RepExpProp(Yap_GetExpProp(name, n)))) {
- return Yap_ArithError(TYPE_ERROR_EVALUABLE, takeIndicator(t),
- "functor %s/%d for arithmetic expression",
- RepAtom(name)->StrOfAE,n);
+ Yap_ArithError(TYPE_ERROR_EVALUABLE, takeIndicator(t),
+ "functor %s/%d for arithmetic expression",
+ RepAtom(name)->StrOfAE, n);
}
if (p->FOfEE == op_power && p->ArityOfEE == 2) {
- t2 = ArgOfTerm(2, t);
- if (IsPairTerm(t2)) {
- return get_matrix_element(ArgOfTerm(1, t), t2 PASS_REGS);
- }
+ t2 = ArgOfTerm(2, t);
+ if (IsPairTerm(t2)) {
+ return get_matrix_element(ArgOfTerm(1, t), t2 PASS_REGS);
+ }
}
*RepAppl(t) = (CELL)AtomFoundVar;
- t1 = Eval(ArgOfTerm(1,t) PASS_REGS);
+ t1 = Eval(ArgOfTerm(1, t) PASS_REGS);
if (t1 == 0L) {
- *RepAppl(t) = (CELL)fun;
- return FALSE;
+ *RepAppl(t) = (CELL)fun;
+ return FALSE;
}
if (n == 1) {
- *RepAppl(t) = (CELL)fun;
- return Yap_eval_unary(p->FOfEE, t1);
+ *RepAppl(t) = (CELL)fun;
+ return Yap_eval_unary(p->FOfEE, t1);
}
- t2 = Eval(ArgOfTerm(2,t) PASS_REGS);
+ t2 = Eval(ArgOfTerm(2, t) PASS_REGS);
*RepAppl(t) = (CELL)fun;
if (t2 == 0L)
- return FALSE;
- return Yap_eval_binary(p->FOfEE,t1,t2);
+ return FALSE;
+ return Yap_eval_binary(p->FOfEE, t1, t2);
}
- } /* else if (IsPairTerm(t)) */ {
+ } /* else if (IsPairTerm(t)) */
+ {
if (TailOfTerm(t) != TermNil) {
- return Yap_ArithError(TYPE_ERROR_EVALUABLE, t,
- "string must contain a single character to be evaluated as an arithmetic expression");
+ Yap_ArithError(TYPE_ERROR_EVALUABLE, t,
+ "string must contain a single character to be "
+ "evaluated as an arithmetic expression");
}
return Eval(HeadOfTerm(t) PASS_REGS);
}
}
-Term
-Yap_InnerEval__(Term t USES_REGS)
-{
- return Eval(t PASS_REGS);
-}
+Term Yap_InnerEval__(Term t USES_REGS) { return Eval(t PASS_REGS); }
#ifdef BEAM
Int BEAM_is(void);
-Int
-BEAM_is(void)
-{ /* X is Y */
+Int BEAM_is(void) { /* X is Y */
union arith_ret res;
blob_type bt;
bt = Eval(Deref(XREGS[2]), &res);
- if (bt==db_ref_e) return (NULL);
- return (EvalToTerm(bt,&res));
+ if (bt == db_ref_e)
+ return (NULL);
+ return (EvalToTerm(bt, &res));
}
#endif
@@ -197,21 +189,20 @@ X is 2+3*4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
succeeds with `X = 14`.
- Consult @ref arithmetic_operators for the complete list of arithmetic_operators
+ Consult @ref arithmetic_operators for the complete list of
+arithmetic_operators
*/
/// @memberof is/2
-static Int
-p_is( USES_REGS1 )
-{ /* X is Y */
+static Int p_is(USES_REGS1) { /* X is Y */
Term out;
yap_error_number err;
Term t = Deref(ARG2);
if (IsVarTerm(t)) {
- Yap_EvalError(INSTANTIATION_ERROR,t, "X is Y");
- return(FALSE);
+ Yap_EvalError(INSTANTIATION_ERROR, t, "X is Y");
+ return (FALSE);
}
Yap_ClearExs();
do {
@@ -221,15 +212,15 @@ p_is( USES_REGS1 )
if (err == RESOURCE_ERROR_STACK) {
LOCAL_Error_TYPE = YAP_NO_ERROR;
if (!Yap_gcl(LOCAL_Error_Size, 2, ENV, CP)) {
- Yap_EvalError(RESOURCE_ERROR_STACK, ARG2, LOCAL_ErrorMessage);
- return FALSE;
+ Yap_EvalError(RESOURCE_ERROR_STACK, ARG2, LOCAL_ErrorMessage);
+ return FALSE;
}
} else {
- Yap_EvalError(err, takeIndicator( ARG2 ), "X is Exp");
+ Yap_EvalError(err, takeIndicator(ARG2), "X is Exp");
return FALSE;
}
} while (TRUE);
- return Yap_unify_constant(ARG1,out);
+ return Yap_unify_constant(ARG1, out);
}
/**
@@ -239,20 +230,18 @@ p_is( USES_REGS1 )
*/
/// @memberof isnan/1
-static Int
-p_isnan( USES_REGS1 )
-{ /* X isnan Y */
+static Int p_isnan(USES_REGS1) { /* X isnan Y */
Term out = 0L;
-
+
while (!(out = Eval(Deref(ARG1) PASS_REGS))) {
if (LOCAL_Error_TYPE == RESOURCE_ERROR_STACK) {
LOCAL_Error_TYPE = YAP_NO_ERROR;
if (!Yap_gcl(LOCAL_Error_Size, 1, ENV, CP)) {
- Yap_EvalError(RESOURCE_ERROR_STACK, ARG2, LOCAL_ErrorMessage);
- return FALSE;
+ Yap_EvalError(RESOURCE_ERROR_STACK, TermNil, LOCAL_ErrorMessage);
+ return FALSE;
}
} else {
- Yap_EvalError(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ Yap_EvalError(LOCAL_Error_TYPE, ARG1, LOCAL_ErrorMessage);
return FALSE;
}
}
@@ -274,9 +263,7 @@ p_isnan( USES_REGS1 )
*/
/// @memberof isnan/1
-static Int
-p_isinf( USES_REGS1 )
-{ /* X is Y */
+static Int p_isinf(USES_REGS1) { /* X is Y */
Term out = 0L;
while (!(out = Eval(Deref(ARG1) PASS_REGS))) {
@@ -287,7 +274,7 @@ p_isinf( USES_REGS1 )
return FALSE;
}
} else {
- Yap_EvalError(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ Yap_EvalError(LOCAL_Error_TYPE, ARG1, LOCAL_ErrorMessage);
return FALSE;
}
}
@@ -312,14 +299,12 @@ True if _Log1_ is the logarithm of the positive number _A1_,
*/
/// @memberof logsum/3
-static Int
-p_logsum( USES_REGS1 )
-{ /* X is Y */
+static Int p_logsum(USES_REGS1) { /* X is Y */
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
int done = FALSE;
Float f1, f2;
-
+
while (!done) {
if (IsFloatTerm(t1)) {
f1 = FloatOfTerm(t1);
@@ -334,16 +319,16 @@ p_logsum( USES_REGS1 )
#endif
} else {
while (!(t1 = Eval(t1 PASS_REGS))) {
- if (LOCAL_Error_TYPE == RESOURCE_ERROR_STACK) {
- LOCAL_Error_TYPE = YAP_NO_ERROR;
- if (!Yap_gcl(LOCAL_Error_Size, 1, ENV, CP)) {
- Yap_EvalError(RESOURCE_ERROR_STACK, ARG2, LOCAL_ErrorMessage);
- return FALSE;
- }
- } else {
- Yap_EvalError(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- return FALSE;
- }
+ if (LOCAL_Error_TYPE == RESOURCE_ERROR_STACK) {
+ LOCAL_Error_TYPE = YAP_NO_ERROR;
+ if (!Yap_gcl(LOCAL_Error_Size, 1, ENV, CP)) {
+ Yap_EvalError(RESOURCE_ERROR_STACK, ARG2, LOCAL_ErrorMessage);
+ return FALSE;
+ }
+ } else {
+ Yap_EvalError(LOCAL_Error_TYPE, ARG1, LOCAL_ErrorMessage);
+ return FALSE;
+ }
}
}
}
@@ -362,88 +347,47 @@ p_logsum( USES_REGS1 )
#endif
} else {
while (!(t2 = Eval(t2 PASS_REGS))) {
- if (LOCAL_Error_TYPE == RESOURCE_ERROR_STACK) {
- LOCAL_Error_TYPE = YAP_NO_ERROR;
- if (!Yap_gcl(LOCAL_Error_Size, 2, ENV, CP)) {
- Yap_EvalError(RESOURCE_ERROR_STACK, ARG2, LOCAL_ErrorMessage);
- return FALSE;
- }
- } else {
- Yap_EvalError(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- return FALSE;
- }
+ if (LOCAL_Error_TYPE == RESOURCE_ERROR_STACK) {
+ LOCAL_Error_TYPE = YAP_NO_ERROR;
+ if (!Yap_gcl(LOCAL_Error_Size, 2, ENV, CP)) {
+ Yap_EvalError(RESOURCE_ERROR_STACK, ARG2, LOCAL_ErrorMessage);
+ return FALSE;
+ }
+ } else {
+ Yap_EvalError(LOCAL_Error_TYPE, ARG1, LOCAL_ErrorMessage);
+ return FALSE;
+ }
}
}
}
if (f1 >= f2) {
- Float fi = exp(f2-f1);
- return Yap_unify(ARG3,MkFloatTerm(f1+log(1+fi)));
+ Float fi = exp(f2 - f1);
+ return Yap_unify(ARG3, MkFloatTerm(f1 + log(1 + fi)));
} else {
- Float fi = exp(f1-f2);
- return Yap_unify(ARG3,MkFloatTerm(f2+log(1+fi)));
+ Float fi = exp(f1 - f2);
+ return Yap_unify(ARG3, MkFloatTerm(f2 + log(1 + fi)));
}
}
-
-Int
-Yap_ArithError__(const char *file, const char *function, int lineno, yap_error_number type, Term where,...)
-{
+yamop *Yap_EvalError__(const char *file, const char *function, int lineno,
+ yap_error_number type, Term where, ...) {
CACHE_REGS
va_list ap;
- char *format;
-
- if (LOCAL_ArithError)
- return 0L;
- LOCAL_ArithError = TRUE;
- LOCAL_Error_TYPE = type;
- LOCAL_Error_File = file;
- LOCAL_Error_Function = function;
- LOCAL_Error_Lineno = lineno;
- LOCAL_Error_Term = where;
- if (!LOCAL_ErrorMessage)
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- va_start (ap, where);
- format = va_arg( ap, char *);
- if (format != NULL) {
-#if HAVE_VSNPRINTF
- (void) vsnprintf(LOCAL_ErrorMessage, MAX_ERROR_MSG_SIZE, format, ap);
-#else
- (void) vsprintf(LOCAL_ErrorMessage, format, ap);
-#endif
- } else {
- LOCAL_ErrorMessage[0] = '\0';
- }
- va_end (ap);
- return 0L;
-}
+ char *format, buf[MAX_ERROR_MSG_SIZE];
-yamop *
-Yap_EvalError__(const char *file, const char *function, int lineno,yap_error_number type, Term where,...)
-{
- CACHE_REGS
- va_list ap;
- char *format;
-
- if (LOCAL_ArithError) {
- LOCAL_ArithError = YAP_NO_ERROR;
- return Yap_Error__(file, function, lineno, LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- }
-
- if (!LOCAL_ErrorMessage)
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- va_start (ap, where);
+ va_start(ap, where);
format = va_arg(ap, char *);
if (format != NULL) {
-#if HAVE_VSNPRINTF
- (void) vsnprintf(LOCAL_ErrorMessage, MAX_ERROR_MSG_SIZE, format, ap);
+#if HAVE_VSNPRINTF
+ (void)vsnprintf(buf, MAX_ERROR_MSG_SIZE, format, ap);
#else
- (void) vsprintf(LOCAL_ErrorMessage, format, ap);
+ (void)vsprintf(buf, format, ap);
#endif
} else {
- LOCAL_ErrorMessage[0] = '\0';
+ buf[0] = '\0';
}
- va_end (ap);
- return Yap_Error__(file, function, lineno, type, where, LOCAL_ErrorMessage);
+ va_end(ap);
+ return Yap_Error__(file, function, lineno, type, where, buf);
}
/**
@@ -461,11 +405,10 @@ Yap_EvalError__(const char *file, const char *function, int lineno,yap_error_num
*/
/// @memberof between/3
-static Int cont_between( USES_REGS1 )
-{
- Term t1 = EXTRA_CBACK_ARG(3,1);
- Term t2 = EXTRA_CBACK_ARG(3,2);
-
+static Int cont_between(USES_REGS1) {
+ Term t1 = EXTRA_CBACK_ARG(3, 1);
+ Term t2 = EXTRA_CBACK_ARG(3, 2);
+
Yap_unify(ARG3, t1);
if (IsIntegerTerm(t1)) {
Int i1;
@@ -475,7 +418,7 @@ static Int cont_between( USES_REGS1 )
cut_succeed();
i1 = IntegerOfTerm(t1);
tn = add_int(i1, 1 PASS_REGS);
- EXTRA_CBACK_ARG(3,1) = tn;
+ EXTRA_CBACK_ARG(3, 1) = tn;
HB = B->cp_h = HR;
return TRUE;
} else {
@@ -489,16 +432,14 @@ static Int cont_between( USES_REGS1 )
t[0] = t1;
t[1] = MkIntTerm(1);
tn = Eval(Yap_MkApplTerm(FunctorPlus, 2, t) PASS_REGS);
- EXTRA_CBACK_ARG(3,1) = tn;
+ EXTRA_CBACK_ARG(3, 1) = tn;
HB = B->cp_h = HR;
return TRUE;
}
}
/// @memberof between/3
-static Int
-init_between( USES_REGS1 )
-{
+static Int init_between(USES_REGS1) {
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
@@ -510,14 +451,11 @@ init_between( USES_REGS1 )
Yap_EvalError(INSTANTIATION_ERROR, t1, "between/3");
return FALSE;
}
- if (!IsIntegerTerm(t1) &&
- !IsBigIntTerm(t1)) {
+ if (!IsIntegerTerm(t1) && !IsBigIntTerm(t1)) {
Yap_EvalError(TYPE_ERROR_INTEGER, t1, "between/3");
return FALSE;
}
- if (!IsIntegerTerm(t2) &&
- !IsBigIntTerm(t2) &&
- t2 != MkAtomTerm(AtomInf) &&
+ if (!IsIntegerTerm(t2) && !IsBigIntTerm(t2) && t2 != MkAtomTerm(AtomInf) &&
t2 != MkAtomTerm(AtomInfinity)) {
Yap_EvalError(TYPE_ERROR_INTEGER, t2, "between/3");
return FALSE;
@@ -530,19 +468,20 @@ init_between( USES_REGS1 )
t3 = Deref(ARG3);
if (!IsVarTerm(t3)) {
if (!IsIntegerTerm(t3)) {
- if (!IsBigIntTerm(t3)) {
- Yap_EvalError(TYPE_ERROR_INTEGER, t3, "between/3");
- return FALSE;
- }
- cut_fail();
+ if (!IsBigIntTerm(t3)) {
+ Yap_EvalError(TYPE_ERROR_INTEGER, t3, "between/3");
+ return FALSE;
+ }
+ cut_fail();
} else {
- Int i3 = IntegerOfTerm(t3);
- if (i3 >= i1 && i3 <= i2)
- cut_succeed();
- cut_fail();
+ Int i3 = IntegerOfTerm(t3);
+ if (i3 >= i1 && i3 <= i2)
+ cut_succeed();
+ cut_fail();
}
}
- if (i1 > i2) cut_fail();
+ if (i1 > i2)
+ cut_fail();
if (i1 == i2) {
Yap_unify(ARG3, t1);
cut_succeed();
@@ -554,16 +493,16 @@ init_between( USES_REGS1 )
t3 = Deref(ARG3);
if (!IsVarTerm(t3)) {
if (!IsIntegerTerm(t3)) {
- if (!IsBigIntTerm(t3)) {
- Yap_EvalError(TYPE_ERROR_INTEGER, t3, "between/3");
- return FALSE;
- }
- cut_fail();
+ if (!IsBigIntTerm(t3)) {
+ Yap_EvalError(TYPE_ERROR_INTEGER, t3, "between/3");
+ return FALSE;
+ }
+ cut_fail();
} else {
- Int i3 = IntegerOfTerm(t3);
- if (i3 >= i1)
- cut_succeed();
- cut_fail();
+ Int i3 = IntegerOfTerm(t3);
+ if (i3 >= i1)
+ cut_succeed();
+ cut_fail();
}
}
} else {
@@ -572,28 +511,28 @@ init_between( USES_REGS1 )
if (!IsVarTerm(t3)) {
if (!IsIntegerTerm(t3) && !IsBigIntTerm(t3)) {
- Yap_EvalError(TYPE_ERROR_INTEGER, t3, "between/3");
- return FALSE;
+ Yap_EvalError(TYPE_ERROR_INTEGER, t3, "between/3");
+ return FALSE;
}
- if (Yap_acmp(t3, t1 PASS_REGS) >= 0 && Yap_acmp(t2,t3 PASS_REGS) >= 0 && P != FAILCODE)
- cut_succeed();
+ if (Yap_acmp(t3, t1 PASS_REGS) >= 0 && Yap_acmp(t2, t3 PASS_REGS) >= 0 &&
+ P != FAILCODE)
+ cut_succeed();
cut_fail();
}
cmp = Yap_acmp(t1, t2 PASS_REGS);
- if (cmp > 0) cut_fail();
+ if (cmp > 0)
+ cut_fail();
if (cmp == 0) {
Yap_unify(ARG3, t1);
cut_succeed();
}
}
- EXTRA_CBACK_ARG(3,1) = t1;
- EXTRA_CBACK_ARG(3,2) = t2;
- return cont_between( PASS_REGS1 );
+ EXTRA_CBACK_ARG(3, 1) = t1;
+ EXTRA_CBACK_ARG(3, 2) = t2;
+ return cont_between(PASS_REGS1);
}
-void
-Yap_InitEval(void)
-{
+void Yap_InitEval(void) {
/* here are the arithmetical predicates */
Yap_InitConstExps();
Yap_InitUnaryExps();
diff --git a/C/exec.c b/C/exec.c
index 41c79ddeb..9b099872a 100755
--- a/C/exec.c
+++ b/C/exec.c
@@ -292,7 +292,7 @@ inline static bool do_execute(Term t, Term mod USES_REGS) {
Term t2 = ArgOfTerm(2, t);
if (IsVarTerm(t2))
return CallMetaCall(t, mod PASS_REGS);
- if (!CommaCall(t2, mod))
+ if (1 || !CommaCall(t2, mod))
return CallMetaCall(t, mod PASS_REGS);
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
otherwise I would dereference the argument and
might skip a svar */
+ if (pen->PredFlags & MetaPredFlag) {
+ return CallMetaCall(t, mod PASS_REGS);
+ }
pt = RepAppl(t) + 1;
for (i = 1; i <= arity; i++) {
#if YAPOR_SBA
@@ -1020,7 +1023,6 @@ static Int protect_stack(USES_REGS1) {
static Int setup_call_catcher_cleanup(USES_REGS1) {
Term Setup = Deref(ARG1);
- Term cmod = CurrentModule;
Int oENV = LCL0 - ENV;
choiceptr B0 = B;
Term t3, t4;
@@ -1048,8 +1050,6 @@ static Int setup_call_catcher_cleanup(USES_REGS1) {
prune_inner_computation(B0);
}
// at this point starts actual goal execution....
- cmod = CurrentModule;
-
rc = Yap_RunTopGoal(Yap_GetFromSlot(h2), false);
complete_inner_computation(B);
t4 = Yap_GetFromSlot(h4);
@@ -1446,7 +1446,6 @@ static bool exec_absmi(bool top, yap_reset_t reset_mode USES_REGS) {
/* must be done here, otherwise siglongjmp will clobber all the
* registers
*/
- Yap_Error(LOCAL_matherror, TermNil, NULL);
/* reset the registers so that we don't have trash in abstract
* machine */
Yap_set_fpu_exceptions(
@@ -1458,6 +1457,14 @@ static bool exec_absmi(bool top, yap_reset_t reset_mode USES_REGS) {
LOCAL_CBorder = OldBorder;
return false;
}
+ case 4: {
+ /* abort */
+ /* can be called from anywgerre, must reset registers,
+ */
+ Yap_JumpToEnv(TermDAbort);
+ P = (yamop *)FAILCODE;
+ LOCAL_PrologMode = UserMode;
+ } break;
default:
/* do nothing */
LOCAL_PrologMode = UserMode;
@@ -2003,7 +2010,7 @@ bool is_cleanup_cp(choiceptr cp_b) {
}
static Int JumpToEnv() {
- choiceptr handler = B, oh = NULL;
+ choiceptr handler = B;
/* just keep the throwm object away, we don't need to care about it
*/
/* careful, previous step may have caused a stack shift,
@@ -2021,7 +2028,6 @@ static Int JumpToEnv() {
handler->cp_b == NULL)) {
break;
}
- oh = handler;
handler = handler->cp_b;
}
if (LOCAL_PrologMode & AsyncIntMode) {
@@ -2074,7 +2080,7 @@ static Int jump_env(USES_REGS1) {
Yap_Error(INSTANTIATION_ERROR, t, "throw ball must be bound");
return false;
} else if (IsApplTerm(t) && FunctorOfTerm(t) == FunctorError) {
- Term t2;
+ Term t2, te;
Yap_find_prolog_culprit(PASS_REGS1);
// LOCAL_Error_TYPE = ERROR_EVENT;
@@ -2089,7 +2095,7 @@ static Int jump_env(USES_REGS1) {
} else {
//LOCAL_Error_TYPE = THROW_EVENT;
}
- LOCAL_ActiveError.prologPredName = NULL;
+ LOCAL_ActiveError->prologPredName = NULL;
Yap_PutException(t);
bool out = JumpToEnv(PASS_REGS1);
if (B != NULL && P == FAILCODE && B->cp_ap == NOCODE &&
@@ -2225,10 +2231,11 @@ bool Yap_PutException(Term t) {
}
bool Yap_ResetException(int wid) {
- if (REMOTE_BallTerm(wid)) {
- Yap_PopTermFromDB(REMOTE_BallTerm(wid));
+ if (REMOTE_ActiveError(wid)->errorTerm) {
+ Yap_PopTermFromDB(REMOTE_ActiveError(wid)->errorTerm);
}
- REMOTE_BallTerm(wid) = NULL;
+ REMOTE_ActiveError(wid)->errorTerm = NULL;
+ REMOTE_ActiveError(wid)->errorTerm = NULL;
return true;
}
diff --git a/C/flags.c b/C/flags.c
index 4b850c0d9..fa1b553e6 100644
--- a/C/flags.c
+++ b/C/flags.c
@@ -51,9 +51,9 @@ static Term stream(Term inp);
static bool getenc(Term inp);
static bool typein(Term inp);
static bool dqf(Term t2);
-static bool set_error_stream( Term inp );
-static bool set_input_stream( Term inp );
-static bool set_output_stream( Term inp );
+static bool set_error_stream(Term inp);
+static bool set_input_stream(Term inp);
+static bool set_output_stream(Term inp);
static void newFlag(Term fl, Term val);
static Int current_prolog_flag(USES_REGS1);
@@ -173,41 +173,38 @@ static Term isaccess(Term inp) {
}
static Term stream(Term inp) {
- if ( IsVarTerm(inp) )
+ if (IsVarTerm(inp))
return inp;
- if (Yap_CheckStream( inp, Input_Stream_f | Output_Stream_f |
- Append_Stream_f | Socket_Stream_f, "yap_flag/3" ) >= 0)
+ if (Yap_CheckStream(inp, Input_Stream_f | Output_Stream_f | Append_Stream_f |
+ Socket_Stream_f,
+ "yap_flag/3") >= 0)
return inp;
return 0;
-
}
-static bool
-set_error_stream( Term inp ) {
- if( IsVarTerm(inp) )
- return Yap_unify( inp, Yap_StreamUserName( LOCAL_c_error_stream ) );
- LOCAL_c_error_stream = Yap_CheckStream( inp, Output_Stream_f |
- Append_Stream_f | Socket_Stream_f, "yap_flag/3" );
- return true;
-}
-
-static bool
-set_input_stream( Term inp ) {
- if( IsVarTerm(inp) )
- return Yap_unify( inp, Yap_StreamUserName( LOCAL_c_input_stream ) );
- LOCAL_c_input_stream = Yap_CheckStream( inp, Input_Stream_f | Socket_Stream_f, "yap_flag/3" );
+static bool set_error_stream(Term inp) {
+ if (IsVarTerm(inp))
+ return Yap_unify(inp, Yap_StreamUserName(LOCAL_c_error_stream));
+ LOCAL_c_error_stream = Yap_CheckStream(
+ inp, Output_Stream_f | Append_Stream_f | Socket_Stream_f, "yap_flag/3");
return true;
}
-static bool
-set_output_stream( Term inp ) {
- if( IsVarTerm(inp) )
- return Yap_unify( inp, Yap_StreamUserName( LOCAL_c_output_stream ) );
- LOCAL_c_output_stream = Yap_CheckStream( inp, Output_Stream_f |
- Append_Stream_f | Socket_Stream_f, "yap_flag/3" );
+static bool set_input_stream(Term inp) {
+ if (IsVarTerm(inp))
+ return Yap_unify(inp, Yap_StreamUserName(LOCAL_c_input_stream));
+ LOCAL_c_input_stream =
+ Yap_CheckStream(inp, Input_Stream_f | Socket_Stream_f, "yap_flag/3");
return true;
}
+static bool set_output_stream(Term inp) {
+ if (IsVarTerm(inp))
+ return Yap_unify(inp, Yap_StreamUserName(LOCAL_c_output_stream));
+ LOCAL_c_output_stream = Yap_CheckStream(
+ inp, Output_Stream_f | Append_Stream_f | Socket_Stream_f, "yap_flag/3");
+ return true;
+}
static Term isground(Term inp) {
return Yap_IsGroundTerm(inp) ? inp : TermZERO;
@@ -870,7 +867,7 @@ static Int cont_prolog_flag(USES_REGS1) {
}
EXTRA_CBACK_ARG(3, 1) = MkIntTerm(++i);
flag = getYapFlag(f);
- if (!Yap_unify(f, ARG2))
+ if (!Yap_unify(flag, ARG2))
return false;
return setYapFlag(f, Deref(ARG3));
}
@@ -1175,31 +1172,33 @@ static Int source_mode(USES_REGS1) {
if (!current && !Yap_unify_constant(ARG1, TermFalse))
return false;
targ = Deref(ARG2);
- setYapFlag(TermSource, ARG2);
+ setYapFlag(TermSource, targ);
return true;
}
static bool setInitialValue(bool bootstrap, flag_func f, const char *s,
flag_term *tarr) {
errno = 0;
+ const char *ss = (const char *)s;
if (f == booleanFlag) {
if (!bootstrap) {
return 0;
}
- if (!strcmp(s, "true")) {
+ const char *ss = (const char *)s;
+ if (!strcmp(ss, "true")) {
tarr->at = TermTrue;
return true;
}
- if (!strcmp(s, "false")) {
+ if (!strcmp(ss, "false")) {
tarr->at = TermFalse;
return true;
}
- if (!strcmp(s, "on")) {
+ if (!strcmp(ss, "on")) {
tarr->at = TermTrue;
return true;
}
- if (!strcmp(s, "off")) {
+ if (!strcmp(ss, "off")) {
tarr->at = TermFalse;
return true;
}
@@ -1210,7 +1209,7 @@ static bool setInitialValue(bool bootstrap, flag_func f, const char *s,
if (!bootstrap) {
return 0;
}
- UInt r = strtoul(s, NULL, 10);
+ UInt r = strtoul(ss, NULL, 10);
Term t;
if (errno) {
Yap_Error(DOMAIN_ERROR_OUT_OF_RANGE, TermNil,
@@ -1229,27 +1228,27 @@ static bool setInitialValue(bool bootstrap, flag_func f, const char *s,
if (!bootstrap) {
return false;
}
- if (!strcmp(s, "INT_MAX")) {
+ if (!strcmp(ss, "INT_MAX")) {
tarr->at = MkIntTerm(Int_MAX);
return true;
}
- if (!strcmp(s, "MAX_THREADS")) {
+ if (!strcmp(ss, "MAX_THREADS")) {
tarr->at = MkIntTerm(MAX_THREADS);
return true;
}
- if (!strcmp(s, "MAX_WORKERS")) {
+ if (!strcmp(ss, "MAX_WORKERS")) {
tarr->at = MkIntTerm(MAX_WORKERS);
return true;
}
- if (!strcmp(s, "INT_MIN")) {
+ if (!strcmp(ss, "INT_MIN")) {
tarr->at = MkIntTerm(Int_MIN);
return true;
}
- if (!strcmp(s, "YAP_NUMERIC_VERSION")) {
+ if (!strcmp(ss, "YAP_NUMERIC_VERSION")) {
tarr->at = MkIntTerm(atol(YAP_NUMERIC_VERSION));
return true;
}
- if (!strcmp(s, "YAP_NUMERIC_VERSION")) {
+ if (!strcmp(ss, "YAP_NUMERIC_VERSION")) {
tarr->at = MkIntTerm(atol(YAP_NUMERIC_VERSION));
return true;
}
@@ -1297,7 +1296,7 @@ static bool setInitialValue(bool bootstrap, flag_func f, const char *s,
return true;
}
}
- } else if (strcmp(s, "@boot") == 0) {
+ } else if (strcmp(ss, "@boot") == 0) {
if (bootstrap) {
return true;
}
@@ -1317,9 +1316,9 @@ static bool setInitialValue(bool bootstrap, flag_func f, const char *s,
return false;
}
CACHE_REGS
- encoding_t encoding = ENC_ISO_UTF8;
- t0 =
- Yap_StringToTerm(s, strlen(s) + 1, &encoding, GLOBAL_MaxPriority, NULL);
+ const unsigned char *us = (const unsigned char *)s;
+ t0 = Yap_BufferToTermWithPrioBindings(us, strlen(s) + 1, TermNil,
+ GLOBAL_MaxPriority, 0L);
if (!t0)
return false;
if (IsAtomTerm(t0) || IsIntTerm(t0)) {
@@ -1369,7 +1368,7 @@ do_prolog_flag_property(Term tflag,
args = Yap_ArgList2ToVector(opts, prolog_flag_property_defs,
PROLOG_FLAG_PROPERTY_END);
if (args == NULL) {
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, NULL);
+ Yap_Error(LOCAL_Error_TYPE, opts, NULL);
return false;
}
if (!IsAtomTerm(tflag)) {
@@ -1434,7 +1433,7 @@ do_prolog_flag_property(Term tflag,
}
}
// UNLOCK(GLOBAL_Prolog_Flag[sno].prolog_flaglock);
- free(args);
+ free(args);
return rc;
}
@@ -1533,14 +1532,14 @@ static Int do_create_prolog_flag(USES_REGS1) {
args = Yap_ArgList2ToVector(opts, prolog_flag_property_defs,
PROLOG_FLAG_PROPERTY_END);
if (args == NULL) {
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, NULL);
+ Yap_Error(LOCAL_Error_TYPE, opts, NULL);
return false;
}
fv = GetFlagProp(AtomOfTerm(tflag));
if (fv) {
if (args[PROLOG_FLAG_PROPERTY_KEEP].used &&
args[PROLOG_FLAG_PROPERTY_KEEP].tvalue == TermTrue) {
- free(args);
+ free(args);
return true;
}
} else {
@@ -1570,7 +1569,7 @@ static Int do_create_prolog_flag(USES_REGS1) {
fv->type = isground;
} break;
case PROLOG_FLAG_PROPERTY_SCOPE:
- free(args);
+ free(args);
return false;
case PROLOG_FLAG_PROPERTY_END:
break;
@@ -1621,8 +1620,9 @@ void Yap_InitFlags(bool bootstrap) {
while (f->name != NULL) {
bool itf = setInitialValue(bootstrap, f->def, f->init,
LOCAL_Flags + LOCAL_flagCount);
- // Term itf = Yap_StringToTerm(f->init, strlen(f->init)+1,
- // EBC_ISO_UTF8, GLOBAL_MaxPriority, &tp);
+ // Term itf = Yap_BufferToTermWithPrioBindings(f->init,
+ // strlen(f->init)+1,
+ // LOBAL_MaxPriority, &tp);
if (itf) {
initFlag(f, LOCAL_flagCount, false);
}
@@ -1633,7 +1633,7 @@ void Yap_InitFlags(bool bootstrap) {
if (GLOBAL_Stream[StdInStream].status & Readline_Stream_f) {
setBooleanGlobalPrologFlag(READLINE_FLAG, true);
}
-
+
if (!bootstrap) {
Yap_InitCPredBack("current_prolog_flag", 2, 1, current_prolog_flag,
cont_yap_flag, 0);
diff --git a/C/globals.c b/C/globals.c
index 07b74511c..9897a3221 100644
--- a/C/globals.c
+++ b/C/globals.c
@@ -1654,7 +1654,8 @@ static Int p_nb_queue_close(USES_REGS1) {
return Yap_unify(ARG3, ARG2);
}
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);
return out;
}
diff --git a/C/gmp_support.c b/C/gmp_support.c
index 5de3d4f8b..167802cb1 100644
--- a/C/gmp_support.c
+++ b/C/gmp_support.c
@@ -32,7 +32,7 @@ MkBigAndClose(MP_INT *new)
Term t = Yap_MkBigIntTerm(new);
mpz_clear(new);
if (t == TermNil) {
- return Yap_ArithError(RESOURCE_ERROR_STACK, t, ">>/2");
+ Yap_ArithError(RESOURCE_ERROR_STACK, t, ">>/2");
}
return t;
}
@@ -43,7 +43,7 @@ MkRatAndClose(MP_RAT *new)
Term t = Yap_MkBigRatTerm(new);
mpq_clear(new);
if (t == TermNil) {
- return Yap_ArithError(RESOURCE_ERROR_STACK, t, ">>/2");
+ Yap_ArithError(RESOURCE_ERROR_STACK, t, ">>/2");
}
return t;
}
@@ -243,7 +243,7 @@ Yap_gmp_div_big_int(Term t, Int i)
if (i > 0) {
mpz_tdiv_q_ui(&new, &new, i);
} else if (i == 0) {
- return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
+ Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
} else {
/* we do not handle MIN_INT */
mpz_tdiv_q_ui(&new, &new, -i);
@@ -253,7 +253,7 @@ Yap_gmp_div_big_int(Term t, Int i)
if (i > 0) {
mpz_fdiv_q_ui(&new, &new, i);
} else if (i == 0) {
- return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
+ Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
} else {
/* we do not handle MIN_INT */
mpz_fdiv_q_ui(&new, &new, -i);
@@ -285,7 +285,7 @@ Yap_gmp_div2_big_int(Term t, Int i)
if (i > 0) {
mpz_fdiv_q_ui(&new, &new, i);
} else if (i == 0) {
- return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
+ Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, MkIntTerm(0), "// /2");
} else {
/* we do not handle MIN_INT */
mpz_fdiv_q_ui(&new, &new, -i);
@@ -311,7 +311,7 @@ Yap_gmp_and_int_big(Int i, Term t)
CELL *pt = RepAppl(t);
MP_INT *b;
if (pt[1] != BIG_INT) {
- return Yap_ArithError(TYPE_ERROR_INTEGER, t, "/\\/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t, "/\\/2");
}
b = Yap_BigIntOfTerm(t);
@@ -328,7 +328,7 @@ Yap_gmp_ior_int_big(Int i, Term t)
CELL *pt = RepAppl(t);
MP_INT *b;
if (pt[1] != BIG_INT) {
- return Yap_ArithError(TYPE_ERROR_INTEGER, t, "\\/ /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t, "\\/ /2");
}
b = Yap_BigIntOfTerm(t);
@@ -367,7 +367,7 @@ Yap_gmp_xor_int_big(Int i, Term t)
CELL *pt = RepAppl(t);
MP_INT *b;
if (pt[1] != BIG_INT) {
- return Yap_ArithError(TYPE_ERROR_INTEGER, t, "#/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t, "#/2");
}
b = Yap_BigIntOfTerm(t);
@@ -394,7 +394,7 @@ Yap_gmp_sll_big_int(Term t, Int i)
mpz_init(&new);
if (i == Int_MIN) {
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);
}
@@ -628,9 +628,9 @@ Yap_gmp_and_big_big(Term t1, Term t2)
return MkBigAndClose(&new);
} else {
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);
} else {
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);
} else {
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);
} else {
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);
if (pt[1] != BIG_INT) {
- return Yap_ArithError(TYPE_ERROR_INTEGER, t, "mod/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t, "mod/2");
} else {
MP_INT *b = Yap_BigIntOfTerm(t);
MP_INT new;
@@ -719,7 +719,7 @@ Yap_gmp_mod_int_big(Int i1, Term t)
CACHE_REGS
CELL *pt = RepAppl(t);
if (pt[1] != BIG_INT) {
- return Yap_ArithError(TYPE_ERROR_INTEGER, t, "mod/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t, "mod/2");
} else {
MP_INT *b = Yap_BigIntOfTerm(t);
/* integer is much smaller */
@@ -768,9 +768,9 @@ Yap_gmp_rem_big_big(Term t1, Term t2)
return MkBigAndClose(&new);
} else {
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);
if (pt[1] != BIG_INT) {
- return Yap_ArithError(TYPE_ERROR_INTEGER, t, "rem/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t, "rem/2");
} else {
MP_INT *b = Yap_BigIntOfTerm(t);
MP_INT new;
@@ -796,7 +796,7 @@ Yap_gmp_rem_int_big(Int i1, Term t)
CACHE_REGS
CELL *pt = RepAppl(t);
if (pt[1] != BIG_INT) {
- return Yap_ArithError(TYPE_ERROR_INTEGER, t, "rem/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t, "rem/2");
} else {
/* integer is much smaller */
return MkIntegerTerm(i1);
@@ -818,9 +818,9 @@ Yap_gmp_gcd_big_big(Term t1, Term t2)
return MkBigAndClose(&new);
} else {
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
CELL *pt = RepAppl(t);
if (pt[1] != BIG_INT) {
- return Yap_ArithError(TYPE_ERROR_INTEGER, t, "gcd/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t, "gcd/2");
} else {
/* integer is much smaller */
if (i > 0) {
@@ -992,7 +992,7 @@ Yap_gmp_exp_int_big(Int i, Term t)
CACHE_REGS
CELL *pt = RepAppl(t);
if (pt[1] == BIG_INT) {
- return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t, "^/2");
+ Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t, "^/2");
} else {
MP_INT *b = Yap_BigIntOfTerm(t);
Float dbl = mpz_get_d(b);
@@ -1009,7 +1009,7 @@ Yap_gmp_exp_big_big(Term t1, Term t2)
Float dbl1, dbl2;
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 {
if (pt1[1] != BIG_INT) {
dbl1 = mpz_get_d(Yap_BigIntOfTerm(t1));
@@ -1476,7 +1476,7 @@ Yap_gmp_unot_big(Term t)
mpz_com(&new, &new);
return MkBigAndClose(&new);
} 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);
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 {
MP_RAT *b = Yap_BigRatOfTerm(t);
MP_RAT new;
@@ -1591,7 +1591,7 @@ Yap_gmp_float_integer_part(Term t)
{
CELL *pt = RepAppl(t);
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 {
MP_RAT *b = Yap_BigRatOfTerm(t);
MP_INT new;
@@ -1624,12 +1624,12 @@ Yap_gmp_lsb(Term t)
if (pt[1] == BIG_INT) {
MP_INT *big = Yap_BigIntOfTerm(t);
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");
}
return MkIntegerTerm(mpz_scan1(big,0));
} 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) {
MP_INT *big = Yap_BigIntOfTerm(t);
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");
}
return MkIntegerTerm(mpz_sizeinbase(big,2));
} 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) {
MP_INT *big = Yap_BigIntOfTerm(t);
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");
}
return MkIntegerTerm(mpz_popcount(big));
} else {
- return Yap_ArithError(TYPE_ERROR_INTEGER, t, "popcount");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t, "popcount");
}
}
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) {
size_t size = mpz_sizeinbase(b, base);
diff --git a/C/grow.c b/C/grow.c
index 953ea53f4..13e30ad11 100755
--- a/C/grow.c
+++ b/C/grow.c
@@ -749,9 +749,7 @@ AdjustScannerStacks(TokEntry **tksp, VarEntry **vep USES_REGS)
break;
case Var_tok:
case String_tok:
- case WString_tok:
case BQString_tok:
- case WBQString_tok:
if (IsOldTrail(tks->TokInfo))
tks->TokInfo = TrailAdjust(tks->TokInfo);
break;
@@ -834,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);
#endif
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 */
if ( Yap_only_has_signal( YAP_CDOVF_SIGNAL) ) {
@@ -978,7 +976,7 @@ static_growglobal(size_t request, CELL **ptr, CELL *hsplit USES_REGS)
fprintf(stderr, "%% Worker Id %d:\n", worker_id);
#endif
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;
YAPEnterCriticalSection();
@@ -1796,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",
(unsigned long int)(TR-(tr_fr_ptr)LOCAL_TrailBase),LOCAL_TrailBase,TR);
#endif
- fprintf(stderr, "%% growing the trail %ld bytes\n", size);
+ fprintf(stderr, "%% growing the trail " UInt_FORMAT " bytes\n", size);
}
LOCAL_ErrorMessage = NULL;
if (!GLOBAL_AllowTrailExpansion) {
diff --git a/C/learn2 b/C/learn2
new file mode 100644
index 000000000..7d931f0c6
--- /dev/null
+++ b/C/learn2
@@ -0,0 +1,43 @@
+#!/usr/local/bin/python3.4
+import os, sys
+if 'LD_LIBRARY_PATH' not in os.environ:
+ os.environ['LD_LIBRARY_PATH'] = '/usr/local/lib'
+ try:
+ os.execv(sys.argv[0], sys.argv)
+ except Exception as exc:
+ print( 'Failed re-exec:', exc )
+ sys.exit(1)
+#
+# import yourmodule
+print( 'Success:', os.environ['LD_LIBRARY_PATH']
+# your program goes here
+
+import matplotlib
+matplotlib.use('Agg')
+
+
+#import sys, os
+sys.path = sys.path + [os.getcwd()]
+
+sys.druwid_root = os.path.abspath(os.path.dirname(__file__))
+
+
+import dru.druwid
+import dru.druplot
+from dru.shell import AlephShell
+
+cq = dru.druwid.ClauseQueue()
+
+learner = dru.druwid.Aleph( cq )
+
+#
+# initialize engine
+#
+def main():
+ if not learner:
+ print("Nothing to do, bye!")
+ exit(2)
+ AlephShell(learner).cmdloop()
+
+if __name__ == "__main__":
+ main()
diff --git a/C/load_dl.c b/C/load_dl.c
index d0ad81787..0a437d589 100755
--- a/C/load_dl.c
+++ b/C/load_dl.c
@@ -127,7 +127,8 @@ void *Yap_LoadForeignFile(char *file, int flags) {
if (out == NULL) {
const char *m_os = dlerror();
if (m_os) {
- strncpy(LOCAL_ErrorSay, m_os, MAX_ERROR_MSG_SIZE - 1);
+ LOCAL_ErrorMessage = malloc(MAX_ERROR_MSG_SIZE);
+ strncpy(LOCAL_ErrorMessage, m_os, MAX_ERROR_MSG_SIZE - 1);
} else {
LOCAL_ErrorMessage = "dlopen failed";
}
@@ -177,7 +178,8 @@ static Int LoadForeign(StringList ofiles, StringList libs, char *proc_name,
NULL)
#endif
{
- strcpy(LOCAL_ErrorSay, dlerror());
+ LOCAL_ErrorMessage = malloc(MAX_ERROR_MSG_SIZE);
+ strcpy(LOCAL_ErrorMessage, dlerror());
return LOAD_FAILLED;
}
libs = libs->next;
@@ -192,7 +194,8 @@ static Int LoadForeign(StringList ofiles, StringList libs, char *proc_name,
/* dlopen wants to follow the LD_CONFIG_PATH */
const char *file = AtomName(ofiles->name);
if (!Yap_findFile(file, NULL, NULL, LOCAL_FileNameBuf, true, YAP_OBJ, true, true)) {
- strcpy(LOCAL_ErrorSay,
+ LOCAL_ErrorMessage = malloc(MAX_ERROR_MSG_SIZE);
+ strcpy(LOCAL_ErrorMessage,
"%% Trying to open unexisting file in LoadForeign");
return LOAD_FAILLED;
}
@@ -217,7 +220,7 @@ static Int LoadForeign(StringList ofiles, StringList libs, char *proc_name,
}
if (!*init_proc) {
- strcpy(LOCAL_ErrorSay, "Could not locate initialization routine");
+ LOCAL_ErrorMessage = "Could not locate initialization routine";
return LOAD_FAILLED;
}
diff --git a/C/load_dll.c b/C/load_dll.c
index 98facdb65..ea881df06 100755
--- a/C/load_dll.c
+++ b/C/load_dll.c
@@ -45,10 +45,10 @@ Yap_LoadForeignFile(char *file, int flags)
void *ptr= (void *)LoadLibrary(file);
if (!ptr) {
CACHE_REGS
- LOCAL_ErrorSay[0]='\0';
+ LOCAL_ErrorMessage = NULL;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(),
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorSay, 256,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorMessage, 256,
NULL);
}
return ptr;
@@ -86,13 +86,13 @@ LoadForeign(StringList ofiles, StringList libs,
if (!Yap_findFile(file, NULL, NULL, LOCAL_FileNameBuf, true, YAP_OBJ, true, true) &&
(handle=LoadLibrary(LOCAL_FileNameBuf)) != 0)
{
- LOCAL_ErrorSay[0]=~'\0';
+ LOCAL_ErrorMessage = NULL;
if (*init_proc == NULL)
*init_proc = (YapInitProc)GetProcAddress((HMODULE)handle, proc_name);
} else {
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(),
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorSay, 256,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), LOCAL_ErrorMessage, 256,
NULL);
//fprintf(stderr,"WinError: %s\n", LOCAL_ErrorSay);
}
@@ -124,7 +124,7 @@ LoadForeign(StringList ofiles, StringList libs,
}
if(*init_proc == NULL) {
- strcpy(LOCAL_ErrorSay,"Could not locate initialization routine");
+ LOCAL_ErrorMessage = "Could not locate initialization routine";
return LOAD_FAILLED;
}
diff --git a/C/load_foreign.c b/C/load_foreign.c
index 472d65e76..a1dd5fea7 100644
--- a/C/load_foreign.c
+++ b/C/load_foreign.c
@@ -140,7 +140,8 @@ p_open_shared_object( USES_REGS1 ) {
s = (char *)RepAtom(AtomOfTerm(t))->StrOfAE;
if ((handle = Yap_LoadForeignFile(s, IntegerOfTerm(tflags)))==NULL) {
- Yap_Error(EXISTENCE_ERROR_SOURCE_SINK,t,"open_shared_object_failed for %s with %s\n", s, LOCAL_ErrorSay);
+ Yap_Error(EXISTENCE_ERROR_SOURCE_SINK,t,"open_shared_object_failed for %s"
+ " with %s\n", s, LOCAL_ErrorMessage);
return FALSE;
} else {
return Yap_unify(MkIntegerTerm((Int)handle),ARG3);
diff --git a/C/modules.c b/C/modules.c
index 5709ba07f..a35cd917b 100644
--- a/C/modules.c
+++ b/C/modules.c
@@ -370,16 +370,57 @@ static Int new_system_module(USES_REGS1) {
}
static Int strip_module(USES_REGS1) {
- Term t1 = Deref(ARG1), tmod = CurrentModule;
- if (tmod == PROLOG_MODULE) {
- tmod = TermProlog;
- }
- t1 = Yap_StripModule(t1, &tmod);
- if (!t1) {
+ Term t1 = Deref(ARG1), tmod = CurrentModule;
+ if (tmod == PROLOG_MODULE) {
+ tmod = TermProlog;
+ }
+ t1 = Yap_StripModule(t1, &tmod);
+ if (!t1) {
+ Yap_Error(TYPE_ERROR_CALLABLE, t1, "trying to obtain module");
+ return FALSE;
+ }
+ 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;
- }
- return Yap_unify(ARG3, t1) && Yap_unify(ARG2, tmod);
+ 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) {
@@ -564,13 +605,14 @@ void Yap_InitModulesC(void) {
SafePredFlag | SyncPredFlag);
Yap_InitCPred("$change_module", 1, change_module,
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("current_source_module", 2, current_source_module,
SafePredFlag | SyncPredFlag);
- Yap_InitCPred("$yap_strip_module", 3, yap_strip_module,
- SafePredFlag | SyncPredFlag);
- Yap_InitCPred("context_module", 1, context_module, 0);
+ Yap_InitCPred("$yap_strip_clause", 3, yap_strip_clause,
+ SafePredFlag | SyncPredFlag);
+ Yap_InitCPred("context_module", 1, context_module, 0);
Yap_InitCPred("$is_system_module", 1, is_system_module, SafePredFlag);
Yap_InitCPred("$copy_operators", 2, copy_operators, 0);
Yap_InitCPred("new_system_module", 1, new_system_module, SafePredFlag);
diff --git a/C/parser.c b/C/parser.c
index b2ccbdc8b..e4001d273 100755
--- a/C/parser.c
+++ b/C/parser.c
@@ -8,9 +8,9 @@
* *
**************************************************************************
* *
-* File: parser.c *
+* File: parser.c *
* Last rev: *
-* mods: *
+* mods: *
* comments: Prolog's parser *
* *
*************************************************************************/
@@ -138,11 +138,11 @@ dot with single quotes.
*/
#include "Yap.h"
-#include "Yatom.h"
#include "YapHeap.h"
#include "YapText.h"
-#include "yapio.h"
+#include "Yatom.h"
#include "eval.h"
+#include "yapio.h"
/* stuff we want to use in standard YAP code */
#include "iopreds.h"
#if HAVE_STRING_H
@@ -163,23 +163,26 @@ dot with single quotes.
typedef struct jmp_buff_struct { sigjmp_buf JmpBuff; } JMPBUFF;
static void GNextToken(CACHE_TYPE1);
-static void checkfor(wchar_t, JMPBUFF *, encoding_t CACHE_TYPE);
-static Term ParseArgs(Atom, wchar_t, JMPBUFF *, Term, encoding_t, Term CACHE_TYPE);
+static void checkfor(Term, JMPBUFF *, encoding_t CACHE_TYPE);
+static Term ParseArgs(Atom, Term, JMPBUFF *, Term, encoding_t, Term CACHE_TYPE);
static Term ParseList(JMPBUFF *, encoding_t, Term CACHE_TYPE);
static Term ParseTerm(int, JMPBUFF *, encoding_t, Term CACHE_TYPE);
-const char *Yap_tokRep(TokEntry *tokptr, encoding_t enc);
+extern Term Yap_tokRep(void* tokptr);
+extern const char * Yap_tokText(void *tokptr);
static void syntax_msg(const char *msg, ...) {
CACHE_REGS
va_list ap;
-
- if (LOCAL_toktide == LOCAL_tokptr) {
- char out[YAP_FILENAME_MAX];
+ if (!LOCAL_ErrorMessage ||
+ (LOCAL_Error_TYPE == SYNTAX_ERROR &&
+ LOCAL_ActiveError->prologParserLine < LOCAL_tokptr->TokPos)) {
+ if (!LOCAL_ErrorMessage) {
+ LOCAL_ErrorMessage = malloc(1024 + 1);
+ }
+ LOCAL_ActiveError->prologParserLine = LOCAL_tokptr->TokPos;
va_start(ap, msg);
- vsnprintf(out, YAP_FILENAME_MAX - 1, msg, ap);
- LOCAL_Error_Term = MkStringTerm( out );
- LOCAL_Error_TYPE = SYNTAX_ERROR;
+ vsnprintf(LOCAL_ErrorMessage, MAX_ERROR_MSG_SIZE, msg, ap);
va_end(ap);
}
}
@@ -225,11 +228,12 @@ static void syntax_msg(const char *msg, ...) {
#define FAIL siglongjmp(FailBuff->JmpBuff, 1)
-VarEntry *
-Yap_LookupVar(const char *var) /* lookup variable in variables table */
+VarEntry *Yap_LookupVar(const char *var) /* lookup variable in variables table
+ * */
{
CACHE_REGS
VarEntry *p;
+ Atom vat = Yap_LookupAtom(var);
#if DEBUG
if (GLOBAL_Option[4])
@@ -245,7 +249,7 @@ Yap_LookupVar(const char *var) /* lookup variable in variables table */
CELL hpv = p->hv;
if (hv == hpv) {
Int scmp;
- if ((scmp = strcmp(var, p->VarRep)) == 0) {
+ if ((scmp = strcmp(var, RepAtom(p->VarRep)->StrOfAE)) == 0) {
p->refs++;
return (p);
} else if (scmp < 0) {
@@ -263,22 +267,21 @@ Yap_LookupVar(const char *var) /* lookup variable in variables table */
p = p->VarRight;
}
}
- p = (VarEntry *)Yap_AllocScannerMemory(strlen(var) + sizeof(VarEntry));
+ p = (VarEntry *)Yap_AllocScannerMemory(sizeof(VarEntry));
*op = p;
p->VarLeft = p->VarRight = NULL;
p->hv = hv;
p->refs = 1L;
- strcpy(p->VarRep, var);
+ p->VarRep = vat;
} else {
/* anon var */
- p = (VarEntry *)Yap_AllocScannerMemory(sizeof(VarEntry) + 2);
+ p = (VarEntry *)Yap_AllocScannerMemory(sizeof(VarEntry));
p->VarLeft = LOCAL_AnonVarTable;
LOCAL_AnonVarTable = p;
p->VarRight = NULL;
p->refs = 0L;
p->hv = 1L;
- p->VarRep[0] = '_';
- p->VarRep[1] = '\0';
+ p->VarRep = vat;
}
p->VarAdr = TermNil;
return (p);
@@ -286,11 +289,11 @@ Yap_LookupVar(const char *var) /* lookup variable in variables table */
static Term VarNames(VarEntry *p, Term l USES_REGS) {
if (p != NULL) {
- if (strcmp(p->VarRep, "_") != 0) {
+ if (strcmp(RepAtom(p->VarRep)->StrOfAE, "_") != 0) {
Term t[2];
Term o;
- t[0] = MkAtomTerm(Yap_LookupAtom(p->VarRep));
+ t[0] = MkAtomTerm(p->VarRep);
if (!IsVarTerm(p->VarAdr))
p->VarAdr = MkVarTerm();
t[1] = p->VarAdr;
@@ -317,11 +320,11 @@ Term Yap_VarNames(VarEntry *p, Term l) {
static Term Singletons(VarEntry *p, Term l USES_REGS) {
if (p != NULL) {
- if (p->VarRep[0] != '_' && p->refs == 1) {
+ if (RepAtom(p->VarRep)->StrOfAE[0] != '_' && p->refs == 1) {
Term t[2];
Term o;
- t[0] = MkAtomTerm(Yap_LookupAtom(p->VarRep));
+ t[0] = MkAtomTerm(p->VarRep);
t[1] = p->VarAdr;
o = Yap_MkApplTerm(FunctorEq, 2, t);
o = MkPairTerm(o,
@@ -364,6 +367,7 @@ static Term Variables(VarEntry *p, Term l USES_REGS) {
Term Yap_Variables(VarEntry *p, Term l) {
CACHE_REGS
+ l = Variables(LOCAL_AnonVarTable, l PASS_REGS);
return Variables(p, l PASS_REGS);
}
@@ -379,7 +383,7 @@ static int IsPrefixOp(Atom op, int *pptr, int *rpptr, Term cmod USES_REGS) {
}
if ((p = opp->Prefix) != 0) {
READ_UNLOCK(opp->OpRWLock);
- *pptr = *rpptr = p &MaskPrio;
+ *pptr = *rpptr = p & MaskPrio;
if (p & DcrrpFlag)
--*rpptr;
return TRUE;
@@ -394,19 +398,20 @@ int Yap_IsPrefixOp(Atom op, int *pptr, int *rpptr) {
return IsPrefixOp(op, pptr, rpptr, CurrentModule PASS_REGS);
}
-static int IsInfixOp(Atom op, int *pptr, int *lpptr, int *rpptr, Term cmod USES_REGS) {
+static int IsInfixOp(Atom op, int *pptr, int *lpptr, int *rpptr,
+ Term cmod USES_REGS) {
int p;
OpEntry *opp = Yap_GetOpProp(op, INFIX_OP, cmod PASS_REGS);
if (!opp)
- return FALSE;
+ return false;
if (opp->OpModule && opp->OpModule != cmod) {
READ_UNLOCK(opp->OpRWLock);
- return FALSE;
+ return false;
}
if ((p = opp->Infix) != 0) {
READ_UNLOCK(opp->OpRWLock);
- *pptr = *rpptr = *lpptr = p &MaskPrio;
+ *pptr = *rpptr = *lpptr = p & MaskPrio;
if (p & DcrrpFlag)
--*rpptr;
if (p & DcrlpFlag)
@@ -435,7 +440,7 @@ static int IsPosfixOp(Atom op, int *pptr, int *lpptr, Term cmod USES_REGS) {
}
if ((p = opp->Posfix) != 0) {
READ_UNLOCK(opp->OpRWLock);
- *pptr = *lpptr = p &MaskPrio;
+ *pptr = *lpptr = p & MaskPrio;
if (p & DcrlpFlag)
--*lpptr;
return (TRUE);
@@ -459,12 +464,14 @@ inline static void GNextToken(USES_REGS1) {
LOCAL_tokptr = LOCAL_tokptr->TokNext;
}
-inline static void checkfor(wchar_t c, JMPBUFF *FailBuff, encoding_t enc USES_REGS) {
- if (LOCAL_tokptr->Tok != Ord(Ponctuation_tok) ||
- LOCAL_tokptr->TokInfo != (Term)c) {
+inline static void checkfor(Term c, JMPBUFF *FailBuff,
+ encoding_t enc USES_REGS) {
+ if (LOCAL_tokptr->Tok != Ord(Ponctuation_tok) || LOCAL_tokptr->TokInfo != c) {
char s[1024];
- strncpy(s, Yap_tokRep(LOCAL_tokptr, enc), 1023);
- syntax_msg("line %d: expected to find \'%c\', found %s", LOCAL_tokptr->TokPos, c, s);
+ strncpy(s, Yap_tokText(LOCAL_tokptr), 1023);
+ syntax_msg("line %d: expected to find "
+ "\'%c....................................\', found %s",
+ LOCAL_tokptr->TokPos, c, s);
FAIL;
}
NextToken;
@@ -472,7 +479,8 @@ inline static void checkfor(wchar_t c, JMPBUFF *FailBuff, encoding_t enc USES_RE
#ifdef O_QUASIQUOTATIONS
-static int is_quasi_quotation_syntax(Term goal, Atom *pat, encoding_t enc, Term cmod) {
+static int is_quasi_quotation_syntax(Term goal, Atom *pat, encoding_t enc,
+ Term cmod) {
CACHE_REGS
Term m = cmod, t;
Atom at;
@@ -520,12 +528,12 @@ static int get_quasi_quotation(term_t t, unsigned char **here,
}
}
- return FALSE; // errorWarning("end_of_file_in_quasi_quotation", 0, _PL_rd);
+ return false; // errorWarning("end_of_file_in_quasi_quotation", 0, _PL_rd);
}
#endif /*O_QUASIQUOTATIONS*/
-static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff,
- Term arg1, encoding_t enc, Term cmod USES_REGS) {
+static Term ParseArgs(Atom a, Term close, JMPBUFF *FailBuff, Term arg1,
+ encoding_t enc, Term cmod USES_REGS) {
int nargs = 0;
Term *p, t;
Functor func;
@@ -544,12 +552,12 @@ static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff,
func = Yap_MkFunctor(a, 1);
if (func == NULL) {
- syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos );
+ syntax_msg("line %d: Heap Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
t = Yap_MkApplTerm(func, nargs, p);
if (HR > ASP - 4096) {
- syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos );
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
return TermNil;
}
NextToken;
@@ -559,15 +567,15 @@ static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff,
while (1) {
Term *tp = (Term *)ParserAuxSp;
if (ParserAuxSp + 1 > LOCAL_TrailTop) {
- syntax_msg("line %d: Trail Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Trail Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
- *tp++ = Unsigned(ParseTerm(999, FailBuff, enc,cmod PASS_REGS));
+ *tp++ = Unsigned(ParseTerm(999, FailBuff, enc, cmod PASS_REGS));
ParserAuxSp = (char *)tp;
++nargs;
if (LOCAL_tokptr->Tok != Ord(Ponctuation_tok))
break;
- if (((int)LOCAL_tokptr->TokInfo) != ',')
+ if (LOCAL_tokptr->TokInfo != TermComma)
break;
NextToken;
}
@@ -577,12 +585,12 @@ static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff,
* order
*/
if (HR > ASP - (nargs + 1)) {
- syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
func = Yap_MkFunctor(a, nargs);
if (func == NULL) {
- syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Heap Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
#ifdef SFUNC
@@ -597,7 +605,7 @@ static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff,
t = Yap_MkApplTerm(func, nargs, p);
#endif
if (HR > ASP - 4096) {
- syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
return TermNil;
}
/* check for possible overflow against local stack */
@@ -606,7 +614,8 @@ static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff,
}
static Term MakeAccessor(Term t, Functor f USES_REGS) {
- UInt arity = ArityOfFunctor(FunctorOfTerm(t)), i;
+ UInt arity = ArityOfFunctor(FunctorOfTerm(t));
+ int i;
Term tf[2], tl = TermNil;
tf[1] = ArgOfTerm(1, t);
@@ -626,34 +635,35 @@ loop:
HR += 2;
to_store[0] = ParseTerm(999, FailBuff, enc, cmod PASS_REGS);
if (LOCAL_tokptr->Tok == Ord(Ponctuation_tok)) {
- if (((int)LOCAL_tokptr->TokInfo) == ',') {
+ if (LOCAL_tokptr->TokInfo == TermComma) {
NextToken;
{
/* check for possible overflow against local stack */
if (HR > ASP - 4096) {
to_store[1] = TermNil;
- syntax_msg("line %d: Stack Overflow" ,LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
FAIL;
} else {
to_store[1] = AbsPair(HR);
goto loop;
}
}
- } else if (((int)LOCAL_tokptr->TokInfo) == '|') {
+ } else if (LOCAL_tokptr->TokInfo == TermVBar) {
NextToken;
to_store[1] = ParseTerm(999, FailBuff, enc, cmod PASS_REGS);
} else {
to_store[1] = MkAtomTerm(AtomNil);
}
} else {
- syntax_msg("line %d: looking for symbol ',','|' got symbol '%s'",LOCAL_tokptr->TokPos,
- Yap_tokRep(LOCAL_tokptr, enc));
+ syntax_msg("line %d: looking for symbol ',','|' got symbol '%s'",
+ LOCAL_tokptr->TokPos, Yap_tokText(LOCAL_tokptr));
FAIL;
}
return (o);
}
-static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USES_REGS) {
+static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc,
+ Term cmod USES_REGS) {
/* parse term with priority prio */
Volatile Term t;
Volatile Functor func;
@@ -667,7 +677,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
NextToken;
/* special rules apply for +1, -2.3, etc... */
if (LOCAL_tokptr->Tok == Number_tok) {
- if ((Atom)t == AtomMinus) {
+ if (t == TermMinus) {
t = LOCAL_tokptr->TokInfo;
if (IsIntTerm(t))
t = MkIntTerm(-IntOfTerm(t));
@@ -685,12 +695,12 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
}
}
if ((LOCAL_tokptr->Tok != Ord(Ponctuation_tok) ||
- Unsigned(LOCAL_tokptr->TokInfo) != 'l') &&
- IsPrefixOp((Atom)t, &opprio, &oprprio, cmod PASS_REGS)) {
+ LOCAL_tokptr->TokInfo != Terml) &&
+ IsPrefixOp(AtomOfTerm(t), &opprio, &oprprio, cmod PASS_REGS)) {
if (LOCAL_tokptr->Tok == Name_tok) {
- Atom at = (Atom)LOCAL_tokptr->TokInfo;
+ Atom at = AtomOfTerm(LOCAL_tokptr->TokInfo);
#ifndef _MSC_VER
- if ((Atom)t == AtomPlus) {
+ if (t == TermPlus) {
if (at == AtomInf) {
t = MkFloatTerm(INFINITY);
NextToken;
@@ -700,7 +710,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
NextToken;
break;
}
- } else if ((Atom)t == AtomMinus) {
+ } else if (t == TermMinus) {
if (at == AtomInf) {
t = MkFloatTerm(-INFINITY);
NextToken;
@@ -717,25 +727,23 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
/* try to parse as a prefix operator */
TRY(
/* build appl on the heap */
- func = Yap_MkFunctor((Atom)t, 1); if (func == NULL) {
- syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos);
+ func = Yap_MkFunctor(AtomOfTerm(t), 1); if (func == NULL) {
+ syntax_msg("line %d: Heap Overflow", LOCAL_tokptr->TokPos);
FAIL;
- }
- t = ParseTerm(oprprio, FailBuff, enc, cmod PASS_REGS);
+ } t = ParseTerm(oprprio, FailBuff, enc, cmod PASS_REGS);
t = Yap_MkApplTerm(func, 1, &t);
/* check for possible overflow against local stack */
if (HR > ASP - 4096) {
- syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
FAIL;
} curprio = opprio;
, break;)
}
}
if (LOCAL_tokptr->Tok == Ord(Ponctuation_tok) &&
- Unsigned(LOCAL_tokptr->TokInfo) == 'l')
- t = ParseArgs((Atom)t, ')', FailBuff, 0L, enc, cmod PASS_REGS);
- else
- t = MkAtomTerm((Atom)t);
+ LOCAL_tokptr->TokInfo == Terml)
+ t = ParseArgs(AtomOfTerm(t), TermEndBracket, FailBuff, 0L, enc,
+ cmod PASS_REGS);
break;
case Number_tok:
@@ -744,9 +752,9 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
break;
case String_tok: /* build list on the heap */
- t = LOCAL_tokptr->TokInfo;
- NextToken;
- break;
+ t = LOCAL_tokptr->TokInfo;
+ NextToken;
+ break;
case Var_tok:
varinfo = (VarEntry *)(LOCAL_tokptr->TokInfo);
@@ -757,33 +765,34 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
break;
case Error_tok:
- syntax_msg("line %d: found ill-formed \"%s\"",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc));
+ syntax_msg("line %d: found ill-formed \"%s\"", LOCAL_tokptr->TokPos,
+ Yap_tokText(LOCAL_tokptr));
FAIL;
case Ponctuation_tok:
- switch ((int)LOCAL_tokptr->TokInfo) {
+ switch (RepAtom(AtomOfTerm(LOCAL_tokptr->TokInfo))->StrOfAE[0]) {
case '(':
case 'l': /* non solo ( */
NextToken;
t = ParseTerm(GLOBAL_MaxPriority, FailBuff, enc, cmod PASS_REGS);
- checkfor(')', FailBuff, enc PASS_REGS);
+ checkfor(TermEndBracket, FailBuff, enc PASS_REGS);
break;
case '[':
NextToken;
if (LOCAL_tokptr->Tok == Ponctuation_tok &&
- (int)LOCAL_tokptr->TokInfo == ']') {
+ LOCAL_tokptr->TokInfo == TermEndSquareBracket) {
t = TermNil;
NextToken;
break;
}
t = ParseList(FailBuff, enc, cmod PASS_REGS);
- checkfor(']', FailBuff, enc PASS_REGS);
+ checkfor(TermEndSquareBracket, FailBuff, enc PASS_REGS);
break;
case '{':
NextToken;
if (LOCAL_tokptr->Tok == Ponctuation_tok &&
- (int)LOCAL_tokptr->TokInfo == '}') {
+ (int)LOCAL_tokptr->TokInfo == TermEndCurlyBracket) {
t = MkAtomTerm(AtomBraces);
NextToken;
break;
@@ -792,13 +801,14 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
t = Yap_MkApplTerm(FunctorBraces, 1, &t);
/* check for possible overflow against local stack */
if (HR > ASP - 4096) {
- syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
- checkfor('}', FailBuff, enc PASS_REGS);
+ checkfor(TermEndCurlyBracket, FailBuff, enc PASS_REGS);
break;
default:
- syntax_msg("line %d: unexpected ponctuation signal %s",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc));
+ syntax_msg("line %d: unexpected ponctuation signal %s",
+ LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr));
FAIL;
}
break;
@@ -843,12 +853,12 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
t = ParseTerm(GLOBAL_MaxPriority, FailBuff, enc, cmod PASS_REGS);
if (LOCAL_tokptr->Tok != QuasiQuotes_tok) {
syntax_msg("expected to find quasi quotes, got \"%s\"", ,
- Yap_tokRep(LOCAL_tokptr, enc));
+ Yap_tokText(LOCAL_tokptr));
FAIL;
}
if (!(is_quasi_quotation_syntax(t, &at))) {
syntax_msg("bad quasi quotation syntax, at \"%s\"",
- Yap_tokRep(LOCAL_tokptr, enc));
+ Yap_tokText(LOCAL_tokptr));
FAIL;
}
/* Arg 2: the content */
@@ -858,7 +868,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
if (!get_quasi_quotation(Yap_InitSlot(ArgOfTerm(2, tn)), &qq->text,
qq->text + strlen((const char *)qq->text))) {
syntax_msg("could not get quasi quotation, at \"%s\"",
- Yap_tokRep(LOCAL_tokptr, enc));
+ Yap_tokText(LOCAL_tokptr));
FAIL;
}
if (positions) {
@@ -870,7 +880,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
qq->mid.charno + 2, /* end of | token */
PL_INTPTR, qqend - 2)) /* end minus "|}" */
syntax_msg("failed to unify quasi quotation, at \"%s\"",
- Yap_tokRep(LOCAL_tokptr, enc));
+ Yap_tokText(LOCAL_tokptr));
FAIL;
}
@@ -889,33 +899,35 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
NextToken;
break;
default:
- syntax_msg("line %d: expected operator, got \'%s\'",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc));
+ syntax_msg("line %d: expected operator, got \'%s\'", LOCAL_tokptr->TokPos,
+ Yap_tokText(LOCAL_tokptr));
FAIL;
}
/* main loop to parse infix and posfix operators starts here */
while (true) {
+ Atom name;
if (LOCAL_tokptr->Tok == Ord(Name_tok) &&
- Yap_HasOp((Atom)(LOCAL_tokptr->TokInfo))) {
- Atom save_opinfo = opinfo = (Atom)(LOCAL_tokptr->TokInfo);
+ Yap_HasOp((name = AtomOfTerm(LOCAL_tokptr->TokInfo)))) {
+ Atom save_opinfo = opinfo = name;
if (IsInfixOp(save_opinfo, &opprio, &oplprio, &oprprio, cmod PASS_REGS) &&
opprio <= prio && oplprio >= curprio) {
/* try parsing as infix operator */
Volatile int oldprio = curprio;
TRY3(
- func = Yap_MkFunctor((Atom)LOCAL_tokptr->TokInfo, 2);
+ func = Yap_MkFunctor(save_opinfo, 2);
if (func == NULL) {
- syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Heap Overflow", LOCAL_tokptr->TokPos);
FAIL;
} NextToken;
{
Term args[2];
args[0] = t;
- args[1] = ParseTerm(oprprio, FailBuff,enc, cmod PASS_REGS);
+ args[1] = ParseTerm(oprprio, FailBuff, enc, cmod PASS_REGS);
t = Yap_MkApplTerm(func, 2, args);
/* check for possible overflow against local stack */
if (HR > ASP - 4096) {
- syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
},
@@ -923,18 +935,18 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
opinfo = save_opinfo; continue;, opinfo = save_opinfo;
curprio = oldprio;)
}
- if (IsPosfixOp(opinfo, &opprio, &oplprio, cmod PASS_REGS) && opprio <= prio &&
- oplprio >= curprio) {
+ if (IsPosfixOp(opinfo, &opprio, &oplprio, cmod PASS_REGS) &&
+ opprio <= prio && oplprio >= curprio) {
/* parse as posfix operator */
- Functor func = Yap_MkFunctor((Atom)LOCAL_tokptr->TokInfo, 1);
+ Functor func = Yap_MkFunctor(AtomOfTerm(LOCAL_tokptr->TokInfo), 1);
if (func == NULL) {
- syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Heap Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
t = Yap_MkApplTerm(func, 1, &t);
/* check for possible overflow against local stack */
if (HR > ASP - 4096) {
- syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
curprio = opprio;
@@ -944,8 +956,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
break;
}
if (LOCAL_tokptr->Tok == Ord(Ponctuation_tok)) {
- if (Unsigned(LOCAL_tokptr->TokInfo) == ',' && prio >= 1000 &&
- curprio <= 999) {
+ if (LOCAL_tokptr->TokInfo == TermComma && prio >= 1000 && curprio <= 999) {
Volatile Term args[2];
NextToken;
args[0] = t;
@@ -953,13 +964,14 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
t = Yap_MkApplTerm(FunctorComma, 2, args);
/* check for possible overflow against local stack */
if (HR > ASP - 4096) {
- syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
curprio = 1000;
continue;
- } else if (Unsigned(LOCAL_tokptr->TokInfo) == '|' &&
- IsInfixOp(AtomVBar, &opprio, &oplprio, &oprprio, cmod PASS_REGS) &&
+ } else if (LOCAL_tokptr->TokInfo == TermVBar &&
+ IsInfixOp(AtomVBar, &opprio, &oplprio, &oprprio,
+ cmod PASS_REGS) &&
opprio <= prio && oplprio >= curprio) {
Volatile Term args[2];
NextToken;
@@ -968,37 +980,42 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USE
t = Yap_MkApplTerm(FunctorVBar, 2, args);
/* check for possible overflow against local stack */
if (HR > ASP - 4096) {
- syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ syntax_msg("line %d: Stack Overflow", LOCAL_tokptr->TokPos);
FAIL;
}
curprio = opprio;
continue;
- } else if (Unsigned(LOCAL_tokptr->TokInfo) == '(' &&
- IsPosfixOp(AtomEmptyBrackets, &opprio, &oplprio, cmod PASS_REGS) &&
+ } else if (LOCAL_tokptr->TokInfo == TermBeginBracket &&
+ IsPosfixOp(AtomEmptyBrackets, &opprio, &oplprio,
+ cmod PASS_REGS) &&
opprio <= prio && oplprio >= curprio) {
- t = ParseArgs(AtomEmptyBrackets, ')', FailBuff, t, enc, cmod PASS_REGS);
+ t = ParseArgs(AtomEmptyBrackets, TermEndBracket, FailBuff, t, enc,
+ cmod PASS_REGS);
curprio = opprio;
continue;
- } else if (Unsigned(LOCAL_tokptr->TokInfo) == '[' &&
- IsPosfixOp(AtomEmptySquareBrackets, &opprio,
- &oplprio, cmod PASS_REGS) &&
+ } else if (LOCAL_tokptr->TokInfo == TermBeginSquareBracket &&
+ IsPosfixOp(AtomEmptySquareBrackets, &opprio, &oplprio,
+ cmod PASS_REGS) &&
opprio <= prio && oplprio >= curprio) {
- t = ParseArgs(AtomEmptySquareBrackets, ']', FailBuff, t, enc, cmod PASS_REGS);
+ t = ParseArgs(AtomEmptySquareBrackets, TermEndSquareBracket, FailBuff,
+ t, enc, cmod PASS_REGS);
t = MakeAccessor(t, FunctorEmptySquareBrackets PASS_REGS);
curprio = opprio;
continue;
- } else if (Unsigned(LOCAL_tokptr->TokInfo) == '{' &&
- IsPosfixOp(AtomEmptyCurlyBrackets, &opprio,
- &oplprio, cmod PASS_REGS) &&
+ } else if (LOCAL_tokptr->TokInfo == TermBeginCurlyBracket &&
+ IsPosfixOp(AtomBraces, &opprio, &oplprio,
+ cmod PASS_REGS) &&
opprio <= prio && oplprio >= curprio) {
- t = ParseArgs(AtomEmptyCurlyBrackets, '}', FailBuff, t, enc, cmod PASS_REGS);
- t = MakeAccessor(t, FunctorEmptyCurlyBrackets PASS_REGS);
+ t = ParseArgs(AtomBraces, TermEndCurlyBracket, FailBuff, t,
+ enc, cmod PASS_REGS);
+ t = MakeAccessor(t, FunctorBraces PASS_REGS);
curprio = opprio;
continue;
}
}
- if (LOCAL_tokptr->Tok <= Ord(WString_tok)) {
- syntax_msg("line %d: expected operator, got \'%s\'",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc));
+ if (LOCAL_tokptr->Tok <= Ord(String_tok)) {
+ syntax_msg("line %d: expected operator, got \'%s\'", LOCAL_tokptr->TokPos,
+ Yap_tokText(LOCAL_tokptr));
FAIL;
}
break;
@@ -1011,6 +1028,7 @@ Term Yap_Parse(UInt prio, encoding_t enc, Term cmod) {
Volatile Term t;
JMPBUFF FailBuff;
yhandle_t sls = Yap_StartSlots();
+ LOCAL_toktide = LOCAL_tokptr;
if (!sigsetjmp(FailBuff.JmpBuff, 0)) {
@@ -1027,22 +1045,23 @@ Term Yap_Parse(UInt prio, encoding_t enc, Term cmod) {
}
#endif
Yap_CloseSlots(sls);
- if (LOCAL_tokptr != NULL && LOCAL_tokptr->Tok != Ord(eot_tok)) {
- LOCAL_Error_TYPE = SYNTAX_ERROR;
- LOCAL_ErrorMessage = "term does not end on . ";
- t = 0;
- }
- if (t != 0 && LOCAL_Error_TYPE == SYNTAX_ERROR) {
- LOCAL_Error_TYPE = YAP_NO_ERROR;
- LOCAL_ErrorMessage = NULL;
- }
- // if (LOCAL_tokptr->Tok != Ord(eot_tok))
- // return (0L);
- return t;
}
- Yap_CloseSlots(sls);
-
- return (0);
+ if (LOCAL_tokptr != NULL && LOCAL_tokptr->Tok != Ord(eot_tok)) {
+ LOCAL_Error_TYPE = SYNTAX_ERROR;
+ if (LOCAL_tokptr->TokNext) {
+ LOCAL_ErrorMessage = "operator misssing . ";
+ } else {
+ LOCAL_ErrorMessage = "term does not end on . ";
+ }
+ t = 0;
+ }
+ if (t != 0 && LOCAL_Error_TYPE == SYNTAX_ERROR) {
+ LOCAL_Error_TYPE = YAP_NO_ERROR;
+ LOCAL_ErrorMessage = NULL;
+ }
+ // if (LOCAL_tokptr->Tok != Ord(eot_tok))
+ // return (0L);
+ return t;
}
//! @}
diff --git a/C/pold.c b/C/pold.c
new file mode 100755
index 000000000..82c35294e
--- /dev/null
+++ b/C/pold.c
@@ -0,0 +1,1047 @@
+/*************************************************************************
+* *
+* YAP Prolog *
+* *
+* Yap Prolog was developed at NCCUP - Universidade do Porto *
+* *
+* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
+* *
+**************************************************************************
+* *
+* File: parser.c *
+* Last rev: *
+* mods: *
+* comments: Prolog's parser *
+* *
+*************************************************************************/
+#ifdef SCCS
+static char SccsId[] = "%W% %G%";
+#endif
+
+/**
+
+@defgroup YAPSyntax YAP Syntax
+@ingroup YAPProgramming
+@{
+
+We will describe the syntax of YAP at two levels. We first will
+describe the syntax for Prolog terms. In a second level we describe
+the \a tokens from which Prolog \a terms are
+built.
+
+@defgroup Formal_Syntax Syntax of Terms
+@ingroup Syntax
+@{
+
+Below, we describe the syntax of YAP terms from the different
+classes of tokens defined above. The formalism used will be BNF,
+extended where necessary with attributes denoting integer precedence or
+operator type.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ term
+----> subterm(1200) end_of_term_marker
+
+ subterm(N) ----> term(M) [M <= N]
+
+ term(N) ----> op(N, fx) subterm(N-1)
+ | op(N, fy) subterm(N)
+ | subterm(N-1) op(N, xfx) subterm(N-1)
+ | subterm(N-1) op(N, xfy) subterm(N)
+ | subterm(N) op(N, yfx) subterm(N-1)
+ | subterm(N-1) op(N, xf)
+ | subterm(N) op(N, yf)
+
+ term(0) ----> atom '(' arguments ')'
+ | '(' subterm(1200) ')'
+ | '{' subterm(1200) '}'
+ | list
+ | string
+ | number
+ | atom
+ | variable
+
+ arguments ----> subterm(999)
+ | subterm(999) ',' arguments
+
+ list ----> '[]'
+ | '[' list_expr ']'
+
+ list_expr ----> subterm(999)
+ | subterm(999) list_tail
+
+ list_tail ----> ',' list_expr
+ | ',..' subterm(999)
+ | '|' subterm(999)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Notes:
+
+ + \a op(N,T) denotes an atom which has been previously declared with type
+ \a T and base precedence \a N.
+
+ + Since ',' is itself a pre-declared operator with type \a xfy and
+ precedence 1000, is \a subterm starts with a '(', \a op must be
+ followed by a space to avoid ambiguity with the case of a functor
+ followed by arguments, e.g.:
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ (a,b) [the same as '+'(','(a,b)) of arity one]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ versus
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++(a,b) [the same as '+'(a,b) of arity two]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ +
+In the first rule for term(0) no blank space should exist between
+\a atom and '('.
+
+ +
+Each term to be read by the YAP parser must end with a single
+dot, followed by a blank (in the sense mentioned in the previous
+paragraph). When a name consisting of a single dot could be taken for
+the end of term marker, the ambiguity should be avoided by surrounding the
+dot with single quotes.
+
+@}
+
+*/
+
+/*
+ * Description:
+ *
+ * parser: produces a prolog term from an array of tokens
+ *
+ * parser usage: the parser takes its input from an array of token descriptions
+ * addressed by the global variable 'tokptr' and produces a Term as result. A
+ * macro 'NextToken' should be defined in 'yap.h' for advancing 'tokptr' from
+ * one token to the next. In the distributed version this macro also updates
+ * a variable named 'toktide' for keeping track of how far the parser went
+ * before failling with a syntax error. The parser should be invoked with
+ * 'tokptr' pointing to the first token. The last token should have type
+ * 'eot_tok'. The parser return either a Term. Syntactic errors are signaled
+ * by a return value 0. The parser builds new terms on the 'global stack' and
+ * also uses an auxiliary stack pointed to by 'AuxSp'. In the distributed
+ * version this auxiliary stack is assumed to grow downwards. This
+ * assumption, however, is only relevant to routine 'ParseArgs', and to the
+ * variable toktide. conclusion: set tokptr pointing to first token set AuxSp
+ * Call Parse
+ *
+ * VSC: Working whithout known bugs in 87/4/6
+ *
+ * LD: -I or +I evaluated by parser 87/4/28
+ *
+ * LD: parser extended 87/4/28
+ *
+ */
+
+#include "Yap.h"
+#include "Yatom.h"
+#include "YapHeap.h"
+#include "YapText.h"
+#include "yapio.h"
+#include "eval.h"
+/* stuff we want to use in standard YAP code */
+#include "iopreds.h"
+#if HAVE_STRING_H
+#include
+#endif
+#if HAVE_STDARG_H
+#include
+#endif
+
+#ifdef __STDC__XXX
+#define Volatile volatile
+#else
+#define Volatile
+#endif
+
+/* weak backtraking mechanism based on long_jump */
+
+typedef struct jmp_buff_struct { sigjmp_buf JmpBuff; } JMPBUFF;
+
+static void GNextToken(CACHE_TYPE1);
+static void checkfor(wchar_t, JMPBUFF *, encoding_t CACHE_TYPE);
+static Term ParseArgs(Atom, wchar_t, JMPBUFF *, Term, encoding_t, Term CACHE_TYPE);
+static Term ParseList(JMPBUFF *, encoding_t, Term CACHE_TYPE);
+static Term ParseTerm(int, JMPBUFF *, encoding_t, Term CACHE_TYPE);
+
+const char *Yap_tokRep(TokEntry *tokptr, encoding_t enc);
+
+static void syntax_msg(const char *msg, ...) {
+ CACHE_REGS
+ va_list ap;
+
+ if (LOCAL_toktide == LOCAL_tokptr) {
+ LOCAL_ErrorMessage = malloc(MAX_ERROR_MSG_SIZE+1);
+ va_start(ap, msg);
+ vsnprintf(LOCAL_ErrorMessage, YAP_FILENAME_MAX , msg, ap);
+ LOCAL_Error_TYPE = SYNTAX_ERROR;
+ va_end(ap);
+ }
+}
+
+#define TRY(S, P) \
+ { \
+ Volatile JMPBUFF *saveenv, newenv; \
+ Volatile TokEntry *saveT = LOCAL_tokptr; \
+ Volatile CELL *saveH = HR; \
+ Volatile int savecurprio = curprio; \
+ saveenv = FailBuff; \
+ if (!sigsetjmp(newenv.JmpBuff, 0)) { \
+ FailBuff = &newenv; \
+ S; \
+ FailBuff = saveenv; \
+ P; \
+ } else { \
+ FailBuff = saveenv; \
+ HR = saveH; \
+ curprio = savecurprio; \
+ LOCAL_tokptr = saveT; \
+ } \
+ }
+
+#define TRY3(S, P, F) \
+ { \
+ Volatile JMPBUFF *saveenv, newenv; \
+ Volatile TokEntry *saveT = LOCAL_tokptr; \
+ Volatile CELL *saveH = HR; \
+ saveenv = FailBuff; \
+ if (!sigsetjmp(newenv.JmpBuff, 0)) { \
+ FailBuff = &newenv; \
+ S; \
+ FailBuff = saveenv; \
+ P; \
+ } else { \
+ FailBuff = saveenv; \
+ HR = saveH; \
+ LOCAL_tokptr = saveT; \
+ F \
+ } \
+ }
+
+#define FAIL siglongjmp(FailBuff->JmpBuff, 1)
+
+VarEntry *
+Yap_LookupVar(const char *var) /* lookup variable in variables table */
+{
+ CACHE_REGS
+ VarEntry *p;
+
+#if DEBUG
+ if (GLOBAL_Option[4])
+ fprintf(stderr, "[LookupVar %s]", var);
+#endif
+ if (var[0] != '_' || var[1] != '\0') {
+ VarEntry **op = &LOCAL_VarTable;
+ UInt hv;
+
+ p = LOCAL_VarTable;
+ hv = HashFunction((unsigned char *)var) % AtomHashTableSize;
+ while (p != NULL) {
+ CELL hpv = p->hv;
+ if (hv == hpv) {
+ Int scmp;
+ if ((scmp = strcmp(var, p->VarRep)) == 0) {
+ p->refs++;
+ return (p);
+ } else if (scmp < 0) {
+ op = &(p->VarLeft);
+ p = p->VarLeft;
+ } else {
+ op = &(p->VarRight);
+ p = p->VarRight;
+ }
+ } else if (hv < hpv) {
+ op = &(p->VarLeft);
+ p = p->VarLeft;
+ } else {
+ op = &(p->VarRight);
+ p = p->VarRight;
+ }
+ }
+ p = (VarEntry *)Yap_AllocScannerMemory(strlen(var) + sizeof(VarEntry));
+ *op = p;
+ p->VarLeft = p->VarRight = NULL;
+ p->hv = hv;
+ p->refs = 1L;
+ strcpy(p->VarRep, var);
+ } else {
+ /* anon var */
+ p = (VarEntry *)Yap_AllocScannerMemory(sizeof(VarEntry) + 2);
+ p->VarLeft = LOCAL_AnonVarTable;
+ LOCAL_AnonVarTable = p;
+ p->VarRight = NULL;
+ p->refs = 0L;
+ p->hv = 1L;
+ p->VarRep[0] = '_';
+ p->VarRep[1] = '\0';
+ }
+ p->VarAdr = TermNil;
+ return (p);
+}
+
+static Term VarNames(VarEntry *p, Term l USES_REGS) {
+ if (p != NULL) {
+ if (strcmp(p->VarRep, "_") != 0) {
+ Term t[2];
+ Term o;
+
+ t[0] = MkAtomTerm(Yap_LookupAtom(p->VarRep));
+ if (!IsVarTerm(p->VarAdr))
+ p->VarAdr = MkVarTerm();
+ t[1] = p->VarAdr;
+ o = Yap_MkApplTerm(FunctorEq, 2, t);
+ o = MkPairTerm(o, VarNames(p->VarRight,
+ VarNames(p->VarLeft, l PASS_REGS) PASS_REGS));
+ if (HR > ASP - 4096) {
+ save_machine_regs();
+ siglongjmp(LOCAL_IOBotch, 1);
+ }
+ return (o);
+ } else {
+ return VarNames(p->VarRight, VarNames(p->VarLeft, l PASS_REGS) PASS_REGS);
+ }
+ } else {
+ return (l);
+ }
+}
+
+Term Yap_VarNames(VarEntry *p, Term l) {
+ CACHE_REGS
+ return VarNames(p, l PASS_REGS);
+}
+
+static Term Singletons(VarEntry *p, Term l USES_REGS) {
+ if (p != NULL) {
+ if (p->VarRep[0] != '_' && p->refs == 1) {
+ Term t[2];
+ Term o;
+
+ t[0] = MkAtomTerm(Yap_LookupAtom(p->VarRep));
+ t[1] = p->VarAdr;
+ o = Yap_MkApplTerm(FunctorEq, 2, t);
+ o = MkPairTerm(o,
+ Singletons(p->VarRight,
+ Singletons(p->VarLeft, l PASS_REGS) PASS_REGS));
+ if (HR > ASP - 4096) {
+ save_machine_regs();
+ siglongjmp(LOCAL_IOBotch, 1);
+ }
+ return (o);
+ } else {
+ return Singletons(p->VarRight,
+ Singletons(p->VarLeft, l PASS_REGS) PASS_REGS);
+ }
+ } else {
+ return (l);
+ }
+}
+
+Term Yap_Singletons(VarEntry *p, Term l) {
+ CACHE_REGS
+ return Singletons(p, l PASS_REGS);
+}
+
+static Term Variables(VarEntry *p, Term l USES_REGS) {
+ if (p != NULL) {
+ Term o;
+ o = MkPairTerm(
+ p->VarAdr,
+ Variables(p->VarRight, Variables(p->VarLeft, l PASS_REGS) PASS_REGS));
+ if (HR > ASP - 4096) {
+ save_machine_regs();
+ siglongjmp(LOCAL_IOBotch, 1);
+ }
+ return (o);
+ } else {
+ return (l);
+ }
+}
+
+Term Yap_Variables(VarEntry *p, Term l) {
+ CACHE_REGS
+ return Variables(p, l PASS_REGS);
+}
+
+static int IsPrefixOp(Atom op, int *pptr, int *rpptr, Term cmod USES_REGS) {
+ int p;
+
+ OpEntry *opp = Yap_GetOpProp(op, PREFIX_OP, cmod PASS_REGS);
+ if (!opp)
+ return FALSE;
+ if (opp->OpModule && opp->OpModule != cmod) {
+ READ_UNLOCK(opp->OpRWLock);
+ return FALSE;
+ }
+ if ((p = opp->Prefix) != 0) {
+ READ_UNLOCK(opp->OpRWLock);
+ *pptr = *rpptr = p &MaskPrio;
+ if (p & DcrrpFlag)
+ --*rpptr;
+ return TRUE;
+ } else {
+ READ_UNLOCK(opp->OpRWLock);
+ return FALSE;
+ }
+}
+
+int Yap_IsPrefixOp(Atom op, int *pptr, int *rpptr) {
+ CACHE_REGS
+ return IsPrefixOp(op, pptr, rpptr, CurrentModule PASS_REGS);
+}
+
+static int IsInfixOp(Atom op, int *pptr, int *lpptr, int *rpptr, Term cmod USES_REGS) {
+ int p;
+
+ OpEntry *opp = Yap_GetOpProp(op, INFIX_OP, cmod PASS_REGS);
+ if (!opp)
+ return FALSE;
+ if (opp->OpModule && opp->OpModule != cmod) {
+ READ_UNLOCK(opp->OpRWLock);
+ return FALSE;
+ }
+ if ((p = opp->Infix) != 0) {
+ READ_UNLOCK(opp->OpRWLock);
+ *pptr = *rpptr = *lpptr = p &MaskPrio;
+ if (p & DcrrpFlag)
+ --*rpptr;
+ if (p & DcrlpFlag)
+ --*lpptr;
+ return TRUE;
+ } else {
+ READ_UNLOCK(opp->OpRWLock);
+ return FALSE;
+ }
+}
+
+int Yap_IsInfixOp(Atom op, int *pptr, int *lpptr, int *rpptr) {
+ CACHE_REGS
+ return IsInfixOp(op, pptr, lpptr, rpptr, CurrentModule PASS_REGS);
+}
+
+static int IsPosfixOp(Atom op, int *pptr, int *lpptr, Term cmod USES_REGS) {
+ int p;
+
+ OpEntry *opp = Yap_GetOpProp(op, POSFIX_OP, cmod PASS_REGS);
+ if (!opp)
+ return FALSE;
+ if (opp->OpModule && opp->OpModule != cmod) {
+ READ_UNLOCK(opp->OpRWLock);
+ return FALSE;
+ }
+ if ((p = opp->Posfix) != 0) {
+ READ_UNLOCK(opp->OpRWLock);
+ *pptr = *lpptr = p &MaskPrio;
+ if (p & DcrlpFlag)
+ --*lpptr;
+ return (TRUE);
+ } else {
+ READ_UNLOCK(opp->OpRWLock);
+ return (FALSE);
+ }
+}
+
+int Yap_IsPosfixOp(Atom op, int *pptr, int *lpptr) {
+ CACHE_REGS
+ return IsPosfixOp(op, pptr, lpptr, CurrentModule PASS_REGS);
+}
+
+inline static void GNextToken(USES_REGS1) {
+ if (LOCAL_tokptr->Tok == Ord(eot_tok))
+ return;
+ if (LOCAL_tokptr == LOCAL_toktide) {
+ LOCAL_toktide = LOCAL_tokptr = LOCAL_tokptr->TokNext;
+ } else
+ LOCAL_tokptr = LOCAL_tokptr->TokNext;
+}
+
+inline static void checkfor(wchar_t c, JMPBUFF *FailBuff, encoding_t enc USES_REGS) {
+ if (LOCAL_tokptr->Tok != Ord(Ponctuation_tok) ||
+ LOCAL_tokptr->TokInfo != (Term)c) {
+ char s[1024];
+ strncpy(s, Yap_tokRep(LOCAL_tokptr, enc), 1023);
+ syntax_msg("line %d: expected to find \'%c\', found %s", LOCAL_tokptr->TokPos, c, s);
+ FAIL;
+ }
+ NextToken;
+}
+
+#ifdef O_QUASIQUOTATIONS
+
+static int is_quasi_quotation_syntax(Term goal, Atom *pat, encoding_t enc, Term cmod) {
+ CACHE_REGS
+ Term m = cmod, t;
+ Atom at;
+ UInt arity;
+ Functor f;
+
+ t = Yap_StripModule(goal, &m);
+ f = FunctorOfTerm(t);
+ *pat = at = NameOfFunctor(f);
+ arity = ArityOfFunctor(f);
+ if (arity > 0)
+ return TRUE;
+ return FALSE;
+}
+
+static int get_quasi_quotation(term_t t, unsigned char **here,
+ unsigned char *ein) {
+ unsigned char *in, *start = *here;
+
+ for (in = start; in <= ein; in++) {
+ if (in[0] == '}' && in[-1] == '|') {
+ *here = in + 1; /* after } */
+ in--; /* Before | */
+
+ if (LOCAL_quasi_quotations) /* option; must return strings */
+ {
+ PL_chars_t txt;
+ int rc;
+
+ txt.text.t = (char *)start;
+ txt.length = in - start;
+ txt.storage = PL_CHARS_HEAP;
+ txt.encoding = ENC_UTF8;
+ txt.canonical = FALSE;
+
+ rc = PL_unify_text(t, 0, &txt, PL_CODE_LIST);
+ PL_free_text(&txt);
+
+ return rc;
+ } else {
+ return PL_unify_term(t, PL_FUNCTOR, FUNCTOR_dquasi_quotation3,
+ PL_POINTER, LOCAL, PL_INTPTR, (intptr_t)(start),
+ PL_INTPTR, (intptr_t)(in - start));
+ }
+ }
+ }
+
+ return FALSE; // errorWarning("end_of_file_in_quasi_quotation", 0, _PL_rd);
+}
+#endif /*O_QUASIQUOTATIONS*/
+
+static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff,
+ Term arg1, encoding_t enc, Term cmod USES_REGS) {
+ int nargs = 0;
+ Term *p, t;
+ Functor func;
+#ifdef SFUNC
+ SFEntry *pe = (SFEntry *)Yap_GetAProp(a, SFProperty);
+#endif
+
+ NextToken;
+ p = (Term *)ParserAuxSp;
+ if (arg1) {
+ *p = arg1;
+ nargs++;
+ ParserAuxSp = (char *)(p + 1);
+ if (LOCAL_tokptr->Tok == Ord(Ponctuation_tok) &&
+ LOCAL_tokptr->TokInfo == close) {
+
+ func = Yap_MkFunctor(a, 1);
+ if (func == NULL) {
+ syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos );
+ FAIL;
+ }
+ t = Yap_MkApplTerm(func, nargs, p);
+ if (HR > ASP - 4096) {
+ syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos );
+ return TermNil;
+ }
+ NextToken;
+ return t;
+ }
+ }
+ while (1) {
+ Term *tp = (Term *)ParserAuxSp;
+ if (ParserAuxSp + 1 > LOCAL_TrailTop) {
+ syntax_msg("line %d: Trail Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+ *tp++ = Unsigned(ParseTerm(999, FailBuff, enc,cmod PASS_REGS));
+ ParserAuxSp = (char *)tp;
+ ++nargs;
+ if (LOCAL_tokptr->Tok != Ord(Ponctuation_tok))
+ break;
+ if (((int)LOCAL_tokptr->TokInfo) != ',')
+ break;
+ NextToken;
+ }
+ ParserAuxSp = (char *)p;
+ /*
+ * Needed because the arguments for the functor are placed in reverse
+ * order
+ */
+ if (HR > ASP - (nargs + 1)) {
+ syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+ func = Yap_MkFunctor(a, nargs);
+ if (func == NULL) {
+ syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+#ifdef SFUNC
+ if (pe)
+ t = MkSFTerm(Yap_MkFunctor(a, SFArity), nargs, p, pe->NilValue);
+ else
+ t = Yap_MkApplTerm(Yap_MkFunctor(a, nargs), nargs, p);
+#else
+ if (a == AtomDBref && nargs == 2)
+ t = MkDBRefTerm((DBRef)IntegerOfTerm(p[0]));
+ else
+ t = Yap_MkApplTerm(func, nargs, p);
+#endif
+ if (HR > ASP - 4096) {
+ syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ return TermNil;
+ }
+ /* check for possible overflow against local stack */
+ checkfor(close, FailBuff, enc PASS_REGS);
+ return t;
+}
+
+static Term MakeAccessor(Term t, Functor f USES_REGS) {
+ UInt arity = ArityOfFunctor(FunctorOfTerm(t)), i;
+ Term tf[2], tl = TermNil;
+
+ tf[1] = ArgOfTerm(1, t);
+ for (i = arity; i > 1; i--) {
+ tl = MkPairTerm(ArgOfTerm(i, t), tl);
+ }
+ tf[0] = tl;
+ return Yap_MkApplTerm(f, 2, tf);
+}
+
+static Term ParseList(JMPBUFF *FailBuff, encoding_t enc, Term cmod USES_REGS) {
+ Term o;
+ CELL *to_store;
+ o = AbsPair(HR);
+loop:
+ to_store = HR;
+ HR += 2;
+ to_store[0] = ParseTerm(999, FailBuff, enc, cmod PASS_REGS);
+ if (LOCAL_tokptr->Tok == Ord(Ponctuation_tok)) {
+ if (((int)LOCAL_tokptr->TokInfo) == ',') {
+ NextToken;
+ {
+ /* check for possible overflow against local stack */
+ if (HR > ASP - 4096) {
+ to_store[1] = TermNil;
+ syntax_msg("line %d: Stack Overflow" ,LOCAL_tokptr->TokPos);
+ FAIL;
+ } else {
+ to_store[1] = AbsPair(HR);
+ goto loop;
+ }
+ }
+ } else if (((int)LOCAL_tokptr->TokInfo) == '|') {
+ NextToken;
+ to_store[1] = ParseTerm(999, FailBuff, enc, cmod PASS_REGS);
+ } else {
+ to_store[1] = MkAtomTerm(AtomNil);
+ }
+ } else {
+ syntax_msg("line %d: looking for symbol ',','|' got symbol '%s'",LOCAL_tokptr->TokPos,
+ Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+ }
+ return (o);
+}
+
+static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USES_REGS) {
+ /* parse term with priority prio */
+ Volatile Term t;
+ Volatile Functor func;
+ Volatile VarEntry *varinfo;
+ Volatile int curprio = 0, opprio, oplprio, oprprio;
+ Volatile Atom opinfo;
+
+ switch (LOCAL_tokptr->Tok) {
+ case Name_tok:
+ t = LOCAL_tokptr->TokInfo;
+ NextToken;
+ /* special rules apply for +1, -2.3, etc... */
+ if (LOCAL_tokptr->Tok == Number_tok) {
+ if ((Atom)t == AtomMinus) {
+ t = LOCAL_tokptr->TokInfo;
+ if (IsIntTerm(t))
+ t = MkIntTerm(-IntOfTerm(t));
+ else if (IsFloatTerm(t))
+ t = MkFloatTerm(-FloatOfTerm(t));
+#ifdef USE_GMP
+ else if (IsBigIntTerm(t)) {
+ t = Yap_gmp_neg_big(t);
+ }
+#endif
+ else
+ t = MkLongIntTerm(-LongIntOfTerm(t));
+ NextToken;
+ break;
+ }
+ }
+ if ((LOCAL_tokptr->Tok != Ord(Ponctuation_tok) ||
+ Unsigned(LOCAL_tokptr->TokInfo) != 'l') &&
+ IsPrefixOp((Atom)t, &opprio, &oprprio, cmod PASS_REGS)) {
+ if (LOCAL_tokptr->Tok == Name_tok) {
+ Atom at = (Atom)LOCAL_tokptr->TokInfo;
+#ifndef _MSC_VER
+ if ((Atom)t == AtomPlus) {
+ if (at == AtomInf) {
+ t = MkFloatTerm(INFINITY);
+ NextToken;
+ break;
+ } else if (at == AtomNan) {
+ t = MkFloatTerm(NAN);
+ NextToken;
+ break;
+ }
+ } else if ((Atom)t == AtomMinus) {
+ if (at == AtomInf) {
+ t = MkFloatTerm(-INFINITY);
+ NextToken;
+ break;
+ } else if (at == AtomNan) {
+ t = MkFloatTerm(NAN);
+ NextToken;
+ break;
+ }
+ }
+#endif
+ }
+ if (opprio <= prio) {
+ /* try to parse as a prefix operator */
+ TRY(
+ /* build appl on the heap */
+ func = Yap_MkFunctor((Atom)t, 1); if (func == NULL) {
+ syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+ t = ParseTerm(oprprio, FailBuff, enc, cmod PASS_REGS);
+ t = Yap_MkApplTerm(func, 1, &t);
+ /* check for possible overflow against local stack */
+ if (HR > ASP - 4096) {
+ syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ } curprio = opprio;
+ , break;)
+ }
+ }
+ if (LOCAL_tokptr->Tok == Ord(Ponctuation_tok) &&
+ Unsigned(LOCAL_tokptr->TokInfo) == 'l')
+ t = ParseArgs((Atom)t, ')', FailBuff, 0L, enc, cmod PASS_REGS);
+ else
+ t = MkAtomTerm((Atom)t);
+ break;
+
+ case Number_tok:
+ t = LOCAL_tokptr->TokInfo;
+ NextToken;
+ break;
+
+ case String_tok: /* build list on the heap */
+ t = LOCAL_tokptr->TokInfo;
+ NextToken;
+ break;
+
+ case Var_tok:
+ varinfo = (VarEntry *)(LOCAL_tokptr->TokInfo);
+ if ((t = varinfo->VarAdr) == TermNil) {
+ t = varinfo->VarAdr = MkVarTerm();
+ }
+ NextToken;
+ break;
+
+ case Error_tok:
+ syntax_msg("line %d: found ill-formed \"%s\"",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+
+ case Ponctuation_tok:
+
+ switch ((int)LOCAL_tokptr->TokInfo) {
+ case '(':
+ case 'l': /* non solo ( */
+ NextToken;
+ t = ParseTerm(GLOBAL_MaxPriority, FailBuff, enc, cmod PASS_REGS);
+ checkfor(')', FailBuff, enc PASS_REGS);
+ break;
+ case '[':
+ NextToken;
+ if (LOCAL_tokptr->Tok == Ponctuation_tok &&
+ (int)LOCAL_tokptr->TokInfo == ']') {
+ t = TermNil;
+ NextToken;
+ break;
+ }
+ t = ParseList(FailBuff, enc, cmod PASS_REGS);
+ checkfor(']', FailBuff, enc PASS_REGS);
+ break;
+ case '{':
+ NextToken;
+ if (LOCAL_tokptr->Tok == Ponctuation_tok &&
+ (int)LOCAL_tokptr->TokInfo == '}') {
+ t = MkAtomTerm(AtomBraces);
+ NextToken;
+ break;
+ }
+ t = ParseTerm(GLOBAL_MaxPriority, FailBuff, enc, cmod PASS_REGS);
+ t = Yap_MkApplTerm(FunctorBraces, 1, &t);
+ /* check for possible overflow against local stack */
+ if (HR > ASP - 4096) {
+ syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+ checkfor('}', FailBuff, enc PASS_REGS);
+ break;
+ default:
+ syntax_msg("line %d: unexpected ponctuation signal %s",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+ }
+ break;
+
+#if QQ
+ case QuasiQuotes_tok: {
+ qq_t *qq = (qq_t *)(LOCAL_tokptr->TokInfo);
+ term_t pv, positions = LOCAL_subtpos, to;
+ Atom at;
+ Term tn;
+ CELL *tnp;
+
+ // from SWI, enter the list
+ /* prepare (if we are the first in term) */
+ if (!LOCAL_varnames)
+ LOCAL_varnames = PL_new_term_ref();
+ if (!LOCAL_qq) {
+ if (LOCAL_quasi_quotations) {
+ LOCAL_qq = LOCAL_quasi_quotations;
+ } else {
+ if (!(LOCAL_qq = PL_new_term_ref()))
+ return FALSE;
+ }
+ // create positions term
+ if (positions) {
+ if (!(pv = PL_new_term_refs(3)) ||
+ !PL_unify_term(positions, PL_FUNCTOR,
+ FUNCTOR_quasi_quotation_position5, PL_INTPTR,
+ qq->start.charno, PL_VARIABLE, PL_TERM,
+ pv + 0, // leave three open slots
+ PL_TERM, pv + 1, PL_TERM, pv + 2))
+ return FALSE;
+ } else
+ pv = 0;
+ /* push type */
+
+ if (!(LOCAL_qq_tail = PL_copy_term_ref(LOCAL_qq)))
+ return FALSE;
+ }
+
+ NextToken;
+ t = ParseTerm(GLOBAL_MaxPriority, FailBuff, enc, cmod PASS_REGS);
+ if (LOCAL_tokptr->Tok != QuasiQuotes_tok) {
+ syntax_msg("expected to find quasi quotes, got \"%s\"", ,
+ Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+ }
+ if (!(is_quasi_quotation_syntax(t, &at))) {
+ syntax_msg("bad quasi quotation syntax, at \"%s\"",
+ Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+ }
+ /* Arg 2: the content */
+ tn = Yap_MkNewApplTerm(SWIFunctorToFunctor(FUNCTOR_quasi_quotation4), 4);
+ tnp = RepAppl(tn) + 1;
+ tnp[0] = MkAtomTerm(at);
+ if (!get_quasi_quotation(Yap_InitSlot(ArgOfTerm(2, tn)), &qq->text,
+ qq->text + strlen((const char *)qq->text))) {
+ syntax_msg("could not get quasi quotation, at \"%s\"",
+ Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+ }
+ if (positions) {
+ intptr_t qqend = qq->end.charno;
+
+ // set_range_position(positions, -1, qqend PASS_LD);
+ if (!PL_unify_term(Yap_InitSlot(ArgOfTerm(2, t)), PL_FUNCTOR,
+ FUNCTOR_minus2, PL_INTPTR,
+ qq->mid.charno + 2, /* end of | token */
+ PL_INTPTR, qqend - 2)) /* end minus "|}" */
+ syntax_msg("failed to unify quasi quotation, at \"%s\"",
+ Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+ }
+
+ tnp[2] = Yap_GetFromSlot(LOCAL_varnames); /* Arg 3: the var dictionary */
+ /* Arg 4: the result */
+ t = ArgOfTerm(4, tn);
+ if (!(to = PL_new_term_ref()) ||
+ !PL_unify_list(LOCAL_qq_tail, to, LOCAL_qq_tail) ||
+ !PL_unify(to, Yap_InitSlot(tn))) {
+ syntax_msg("failed to unify quasi quotation, at \"%s\"",
+ Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+ }
+ }
+#endif
+ NextToken;
+ break;
+ default:
+ syntax_msg("line %d: expected operator, got \'%s\'",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+ }
+
+ /* main loop to parse infix and posfix operators starts here */
+ while (true) {
+ if (LOCAL_tokptr->Tok == Ord(Name_tok) &&
+ Yap_HasOp((Atom)(LOCAL_tokptr->TokInfo))) {
+ Atom save_opinfo = opinfo = (Atom)(LOCAL_tokptr->TokInfo);
+ if (IsInfixOp(save_opinfo, &opprio, &oplprio, &oprprio, cmod PASS_REGS) &&
+ opprio <= prio && oplprio >= curprio) {
+ /* try parsing as infix operator */
+ Volatile int oldprio = curprio;
+ TRY3(
+ func = Yap_MkFunctor((Atom)LOCAL_tokptr->TokInfo, 2);
+ if (func == NULL) {
+ syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ } NextToken;
+ {
+ Term args[2];
+ args[0] = t;
+ args[1] = ParseTerm(oprprio, FailBuff,enc, cmod PASS_REGS);
+ t = Yap_MkApplTerm(func, 2, args);
+ /* check for possible overflow against local stack */
+ if (HR > ASP - 4096) {
+ syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+ },
+ curprio = opprio;
+ opinfo = save_opinfo; continue;, opinfo = save_opinfo;
+ curprio = oldprio;)
+ }
+ if (IsPosfixOp(opinfo, &opprio, &oplprio, cmod PASS_REGS) && opprio <= prio &&
+ oplprio >= curprio) {
+ /* parse as posfix operator */
+ Functor func = Yap_MkFunctor((Atom)LOCAL_tokptr->TokInfo, 1);
+ if (func == NULL) {
+ syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+ t = Yap_MkApplTerm(func, 1, &t);
+ /* check for possible overflow against local stack */
+ if (HR > ASP - 4096) {
+ syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+ curprio = opprio;
+ NextToken;
+ continue;
+ }
+ break;
+ }
+ if (LOCAL_tokptr->Tok == Ord(Ponctuation_tok)) {
+ if (Unsigned(LOCAL_tokptr->TokInfo) == ',' && prio >= 1000 &&
+ curprio <= 999) {
+ Volatile Term args[2];
+ NextToken;
+ args[0] = t;
+ args[1] = ParseTerm(1000, FailBuff, enc, cmod PASS_REGS);
+ t = Yap_MkApplTerm(FunctorComma, 2, args);
+ /* check for possible overflow against local stack */
+ if (HR > ASP - 4096) {
+ syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+ curprio = 1000;
+ continue;
+ } else if (Unsigned(LOCAL_tokptr->TokInfo) == '|' &&
+ IsInfixOp(AtomVBar, &opprio, &oplprio, &oprprio, cmod PASS_REGS) &&
+ opprio <= prio && oplprio >= curprio) {
+ Volatile Term args[2];
+ NextToken;
+ args[0] = t;
+ args[1] = ParseTerm(oprprio, FailBuff, enc, cmod PASS_REGS);
+ t = Yap_MkApplTerm(FunctorVBar, 2, args);
+ /* check for possible overflow against local stack */
+ if (HR > ASP - 4096) {
+ syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos);
+ FAIL;
+ }
+ curprio = opprio;
+ continue;
+ } else if (Unsigned(LOCAL_tokptr->TokInfo) == '(' &&
+ IsPosfixOp(AtomEmptyBrackets, &opprio, &oplprio, cmod PASS_REGS) &&
+ opprio <= prio && oplprio >= curprio) {
+ t = ParseArgs(AtomEmptyBrackets, ')', FailBuff, t, enc, cmod PASS_REGS);
+ curprio = opprio;
+ continue;
+ } else if (Unsigned(LOCAL_tokptr->TokInfo) == '[' &&
+ IsPosfixOp(AtomEmptySquareBrackets, &opprio,
+ &oplprio, cmod PASS_REGS) &&
+ opprio <= prio && oplprio >= curprio) {
+ t = ParseArgs(AtomEmptySquareBrackets, ']', FailBuff, t, enc, cmod PASS_REGS);
+ t = MakeAccessor(t, FunctorEmptySquareBrackets PASS_REGS);
+ curprio = opprio;
+ continue;
+ } else if (Unsigned(LOCAL_tokptr->TokInfo) == '{' &&
+ IsPosfixOp(AtomEmptyCurlyBrackets, &opprio,
+ &oplprio, cmod PASS_REGS) &&
+ opprio <= prio && oplprio >= curprio) {
+ t = ParseArgs(AtomEmptyCurlyBrackets, '}', FailBuff, t, enc, cmod PASS_REGS);
+ t = MakeAccessor(t, FunctorEmptyCurlyBrackets PASS_REGS);
+ curprio = opprio;
+ continue;
+ }
+ }
+ if (LOCAL_tokptr->Tok <= Ord(WString_tok)) {
+ syntax_msg("line %d: expected operator, got \'%s\'",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr, enc));
+ FAIL;
+ }
+ break;
+ }
+ return t;
+}
+
+Term Yap_Parse(UInt prio, encoding_t enc, Term cmod) {
+ CACHE_REGS
+ Volatile Term t;
+ JMPBUFF FailBuff;
+ yhandle_t sls = Yap_StartSlots();
+
+ if (!sigsetjmp(FailBuff.JmpBuff, 0)) {
+
+ t = ParseTerm(prio, &FailBuff, enc, cmod PASS_REGS);
+#if DEBUG
+ if (GLOBAL_Option['p' - 'a' + 1]) {
+ Yap_DebugPutc(stderr, '[');
+ if (t == 0)
+ Yap_DebugPlWrite(MkIntTerm(0));
+ else
+ Yap_DebugPlWrite(t);
+ Yap_DebugPutc(stderr, ']');
+ Yap_DebugPutc(stderr, '\n');
+ }
+#endif
+ Yap_CloseSlots(sls);
+ if (LOCAL_tokptr != NULL && LOCAL_tokptr->Tok != Ord(eot_tok)) {
+ LOCAL_Error_TYPE = SYNTAX_ERROR;
+ LOCAL_ErrorMessage = "term does not end on . ";
+ t = 0;
+ }
+ if (t != 0 && LOCAL_Error_TYPE == SYNTAX_ERROR) {
+ LOCAL_Error_TYPE = YAP_NO_ERROR;
+ LOCAL_ErrorMessage = NULL;
+ }
+ // if (LOCAL_tokptr->Tok != Ord(eot_tok))
+ // return (0L);
+ return t;
+ }
+ Yap_CloseSlots(sls);
+
+ return (0);
+}
+
+//! @}
diff --git a/C/prim_absmi_insts.h b/C/prim_absmi_insts.h
index 419bb48cf..fc10ba1a4 100644
--- a/C/prim_absmi_insts.h
+++ b/C/prim_absmi_insts.h
@@ -8,7 +8,6 @@
{
#endif /* INDENT_CODE */
-
Op(p_plus_vv, xxx);
BEGD(d0);
BEGD(d1);
@@ -23,17 +22,10 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = MkIntegerTerm(IntOfTerm(d0) + IntOfTerm(d1));
- }
- else {
+ } else {
saveregs();
d0 = p_plus(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
XREG(PREG->y_u.xxx.x) = d0;
PREG = NEXTOP(PREG, xxx);
@@ -41,17 +33,13 @@
BEGP(pt0);
deref_body(d0, pt0, plus_vv_unk, plus_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is _+B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, plus_vv_nvar_unk, plus_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A+B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -63,33 +51,23 @@
d0 = XREG(PREG->y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, plus_vc_unk);
- plus_vc_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntegerTerm(IntOfTerm(d0) + d1);
- }
- else {
- saveregs();
- d0 = p_plus(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ plus_vc_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntegerTerm(IntOfTerm(d0) + d1);
+ } else {
+ saveregs();
+ d0 = p_plus(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, plus_vc_unk, plus_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A + " Int_FORMAT, PREG->y_u.xxn.c);
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -109,38 +87,27 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = MkIntegerTerm(IntOfTerm(d0) + IntOfTerm(d1));
- }
- else {
+ } else {
saveregs();
d0 = p_plus(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, plus_y_vv_unk, plus_y_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A+B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, plus_y_vv_nvar_unk, plus_y_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A+B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -152,36 +119,26 @@
d0 = XREG(PREG->y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, plus_y_vc_unk);
- plus_y_vc_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntegerTerm(IntOfTerm(d0) + d1);
- }
- else {
- saveregs();
- d0 = p_plus(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ plus_y_vc_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntegerTerm(IntOfTerm(d0) + d1);
+ } else {
+ saveregs();
+ d0 = p_plus(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, plus_y_vc_unk, plus_y_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A + " Int_FORMAT, PREG->y_u.yxn.c);
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -201,17 +158,10 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = MkIntegerTerm(IntOfTerm(d0) - IntOfTerm(d1));
- }
- else {
+ } else {
saveregs();
d0 = p_minus(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
XREG(PREG->y_u.xxx.x) = d0;
PREG = NEXTOP(PREG, xxx);
@@ -219,17 +169,13 @@
BEGP(pt0);
deref_body(d0, pt0, minus_vv_unk, minus_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A-B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, minus_vv_nvar_unk, minus_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A-B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -241,33 +187,23 @@
d0 = XREG(PREG->y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, minus_cv_unk);
- minus_cv_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntegerTerm(d1 - IntOfTerm(d0));
- }
- else {
- saveregs();
- d0 = p_minus(MkIntegerTerm(d1),Yap_Eval(d0) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ minus_cv_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntegerTerm(d1 - IntOfTerm(d0));
+ } else {
+ saveregs();
+ d0 = p_minus(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
+ setregs();
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, minus_cv_unk, minus_cv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "-A", PREG->y_u.xxn.c);
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -287,38 +223,27 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = MkIntegerTerm(IntOfTerm(d0) - IntOfTerm(d1));
- }
- else {
+ } else {
saveregs();
d0 = p_minus(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, minus_y_vv_unk, minus_y_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A-B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, minus_y_vv_nvar_unk, minus_y_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A-B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -330,36 +255,26 @@
d0 = XREG(PREG->y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, minus_y_cv_unk);
- minus_y_cv_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntegerTerm(d1 - IntOfTerm(d0));
- }
- else {
- saveregs();
- d0 = p_minus(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ minus_y_cv_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntegerTerm(d1 - IntOfTerm(d0));
+ } else {
+ saveregs();
+ d0 = p_minus(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
+ setregs();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, minus_y_cv_unk, minus_y_cv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "-A", PREG->y_u.yxn.c);
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -379,17 +294,9 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = times_int(IntOfTerm(d0), IntOfTerm(d1) PASS_REGS);
- }
- else {
+ } else {
saveregs();
d0 = p_times(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
XREG(PREG->y_u.xxx.x) = d0;
PREG = NEXTOP(PREG, xxx);
@@ -397,17 +304,13 @@
BEGP(pt0);
deref_body(d0, pt0, times_vv_unk, times_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A*B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, times_vv_nvar_unk, times_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A*B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -419,33 +322,23 @@
d0 = XREG(PREG->y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, times_vc_unk);
- times_vc_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- d0 = times_int(IntOfTerm(d0), d1 PASS_REGS);
- }
- else {
- saveregs();
- d0 = p_times(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ times_vc_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = times_int(IntOfTerm(d0), d1 PASS_REGS);
+ } else {
+ saveregs();
+ d0 = p_times(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, times_vc_unk, times_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A* " Int_FORMAT, PREG->y_u.xxn.c);
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -465,38 +358,27 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = times_int(IntOfTerm(d0), IntOfTerm(d1) PASS_REGS);
- }
- else {
+ } else {
saveregs();
d0 = p_times(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, times_y_vv_unk, times_y_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A*B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, times_y_vv_nvar_unk, times_y_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A*B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -508,36 +390,26 @@
d0 = XREG(PREG->y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, times_y_vc_unk);
- times_y_vc_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- d0 = times_int(IntOfTerm(d0), d1 PASS_REGS);
- }
- else {
- saveregs();
- d0 = p_times(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ times_y_vc_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = times_int(IntOfTerm(d0), d1 PASS_REGS);
+ } else {
+ saveregs();
+ d0 = p_times(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, times_y_vc_unk, times_y_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A* " Int_FORMAT, PREG->y_u.yxn.c);
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -558,23 +430,13 @@
if (IsIntTerm(d0) && IsIntTerm(d1)) {
Int div = IntOfTerm(d1);
if (div == 0) {
- saveregs();
- Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2");
- setregs();
- FAIL();
+ Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR,d1);
}
d0 = MkIntTerm(IntOfTerm(d0) / div);
- }
- else {
+ } else {
saveregs();
d0 = p_div(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
XREG(PREG->y_u.xxx.x) = d0;
PREG = NEXTOP(PREG, xxx);
@@ -582,17 +444,13 @@
BEGP(pt0);
deref_body(d0, pt0, div_vv_unk, div_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, div_vv_nvar_unk, div_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -604,33 +462,23 @@
d0 = XREG(PREG->y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, div_vc_unk);
- div_vc_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntTerm(IntOfTerm(d0) / d1);
- }
- else {
- saveregs();
- d0 = p_div(Yap_Eval(d0),MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ div_vc_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntTerm(IntOfTerm(d0) / d1);
+ } else {
+ saveregs();
+ d0 = p_div(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, div_vc_unk, div_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -641,39 +489,27 @@
d0 = XREG(PREG->y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, div_cv_unk);
- div_cv_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- Int div = IntOfTerm(d0);
- if (div == 0){
- saveregs();
- Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2");
- setregs();
- FAIL();
- }
- d0 = MkIntegerTerm(d1 / div);
- }
- else {
- saveregs();
- d0 = p_div(MkIntegerTerm(d1),Yap_Eval(d0) PASS_REGS);
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
+ div_cv_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ Int div = IntOfTerm(d0);
+ if (div == 0) {
+ Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR,d0);
+ FAIL();
}
+ d0 = MkIntegerTerm(d1 / div);
+ } else {
+ saveregs();
+ d0 = p_div(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, div_cv_unk, div_cv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "// A", PREG->y_u.xxn.c);
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -694,44 +530,31 @@
if (IsIntTerm(d0) && IsIntTerm(d1)) {
Int div = IntOfTerm(d1);
if (div == 0) {
- saveregs();
- Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2");
- setregs();
+ Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR, d0);
FAIL();
}
d0 = MkIntTerm(IntOfTerm(d0) / div);
- }
- else {
+ } else {
saveregs();
d0 = p_div(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, div_y_vv_unk, div_y_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, div_y_vv_nvar_unk, div_y_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -743,36 +566,26 @@
d0 = XREG(PREG->y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, div_y_vc_unk);
- div_y_vc_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntTerm(IntOfTerm(d0)/d1);
- }
- else {
- saveregs();
- d0 = p_div(Yap_Eval(d0),MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ div_y_vc_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntTerm(IntOfTerm(d0) / d1);
+ } else {
+ saveregs();
+ d0 = p_div(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, div_y_vc_unk, div_y_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A//B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -783,49 +596,36 @@
d0 = XREG(PREG->y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, div_y_cv_unk);
- div_y_cv_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- Int div = IntOfTerm(d0);
- if (div == 0) {
- saveregs();
- Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2");
- setregs();
- FAIL();
- }
- d0 = MkIntegerTerm(d1 / div);
- }
- else {
- saveregs();
- d0 = p_div(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
+ div_y_cv_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ Int div = IntOfTerm(d0);
+ if (div == 0) {
+ Yap_AsmError(EVALUATION_ERROR_ZERO_DIVISOR,d0);
+ FAIL();
}
+ d0 = MkIntegerTerm(d1 / div);
+ } else {
+ saveregs();
+ d0 = p_div(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
+ setregs();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, div_y_cv_unk, div_y_cv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "// A", PREG->y_u.yxn.c);
- setregs();
+ Yap_AbsmiError(INSTANTIATION_ERROR);
FAIL();
ENDP(pt0);
ENDD(d0);
ENDOp();
-
Op(p_and_vv, xxx);
BEGD(d0);
BEGD(d1);
@@ -840,17 +640,10 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = MkIntegerTerm(IntOfTerm(d0) & IntOfTerm(d1));
- }
- else {
+ } else {
saveregs();
d0 = p_and(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
XREG(PREG->y_u.xxx.x) = d0;
PREG = NEXTOP(PREG, xxx);
@@ -858,17 +651,13 @@
BEGP(pt0);
deref_body(d0, pt0, and_vv_unk, and_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, and_vv_nvar_unk, and_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -880,33 +669,23 @@
d0 = XREG(PREG->y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, and_vc_unk);
- and_vc_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntegerTerm(IntOfTerm(d0) & d1);
- }
- else {
- saveregs();
- d0 = p_and(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ and_vc_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntegerTerm(IntOfTerm(d0) & d1);
+ } else {
+ saveregs();
+ d0 = p_and(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, and_vc_unk, and_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A /\\ " Int_FORMAT , PREG->y_u.xxn.c);
- setregs();
+ Yap_AbsmiError(INSTANTIATION_ERROR);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -926,38 +705,27 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = MkIntegerTerm(IntOfTerm(d0) & IntOfTerm(d1));
- }
- else {
+ } else {
saveregs();
d0 = p_and(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, and_y_vv_unk, and_y_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, and_y_vv_nvar_unk, and_y_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -969,42 +737,31 @@
d0 = XREG(PREG->y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, and_y_vc_unk);
- and_y_vc_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntegerTerm(IntOfTerm(d0) & d1);
- }
- else {
- saveregs();
- d0 = p_and(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ and_y_vc_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntegerTerm(IntOfTerm(d0) & d1);
+ } else {
+ saveregs();
+ d0 = p_and(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, and_y_vc_unk, and_y_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A /\\ " Int_FORMAT , PREG->y_u.yxn.c);
- setregs();
+ Yap_AbsmiError(INSTANTIATION_ERROR);
FAIL();
ENDP(pt0);
ENDD(d0);
ENDOp();
-
Op(p_or_vv, xxx);
BEGD(d0);
BEGD(d1);
@@ -1019,17 +776,10 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = MkIntegerTerm(IntOfTerm(d0) | IntOfTerm(d1));
- }
- else {
+ } else {
saveregs();
d0 = p_or(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
XREG(PREG->y_u.xxx.x) = d0;
PREG = NEXTOP(PREG, xxx);
@@ -1037,17 +787,13 @@
BEGP(pt0);
deref_body(d0, pt0, or_vv_unk, or_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, or_vv_nvar_unk, or_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -1059,32 +805,22 @@
d0 = XREG(PREG->y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, or_vc_unk);
- or_vc_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntegerTerm(IntOfTerm(d0) | d1);
- }
- else {
- saveregs();
- d0 = p_or(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ or_vc_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntegerTerm(IntOfTerm(d0) | d1);
+ } else {
+ saveregs();
+ d0 = p_or(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, or_vc_unk, or_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A \\/ " Int_FORMAT , PREG->y_u.xxn.c);
- setregs();
+ Yap_AbsmiError(INSTANTIATION_ERROR);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -1104,38 +840,27 @@
/* d0 and d1 are where I want them */
if (IsIntTerm(d0) && IsIntTerm(d1)) {
d0 = MkIntegerTerm(IntOfTerm(d0) | IntOfTerm(d1));
- }
- else {
+ } else {
saveregs();
d0 = p_or(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
}
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, or_y_vv_unk, or_y_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, or_y_vv_nvar_unk, or_y_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -1147,36 +872,26 @@
d0 = XREG(PREG->y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, or_y_vc_unk);
- or_y_vc_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntegerTerm(IntOfTerm(d0) | d1);
- }
- else {
- saveregs();
- d0 = p_or(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ or_y_vc_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntegerTerm(IntOfTerm(d0) | d1);
+ } else {
+ saveregs();
+ d0 = p_or(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, or_y_vc_unk, or_y_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A \\/ " Int_FORMAT , PREG->y_u.yxn.c);
- setregs();
+ Yap_AbsmiError(INSTANTIATION_ERROR);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -1199,36 +914,25 @@
if (i2 < 0)
d0 = MkIntegerTerm(SLR(IntOfTerm(d0), -i2));
else
- d0 = do_sll(IntOfTerm(d0),i2 PASS_REGS);
- }
- else {
+ d0 = do_sll(IntOfTerm(d0), i2 PASS_REGS);
+ } else {
saveregs();
d0 = p_sll(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
}
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
XREG(PREG->y_u.xxx.x) = d0;
PREG = NEXTOP(PREG, xxx);
GONext();
BEGP(pt0);
deref_body(d0, pt0, sll_vv_unk, sll_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A<y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, sll_vc_unk);
- sll_vc_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- d0 = do_sll(IntOfTerm(d0), (Int)d1 PASS_REGS);
- }
- else {
- saveregs();
- d0 = p_sll(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- }
- }
- if (d0 == 0L) {
+ sll_vc_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = do_sll(IntOfTerm(d0), (Int)d1 PASS_REGS);
+ } else {
saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ d0 = p_sll(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
setregs();
- FAIL();
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, sll_vc_unk, sll_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A<y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, sll_cv_unk);
- sll_cv_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- Int i2 = IntOfTerm(d0);
- if (i2 < 0)
- d0 = MkIntegerTerm(SLR(d1, -i2));
- else
- d0 = do_sll(d1,i2 PASS_REGS);
- }
- else {
- saveregs();
- d0 = p_sll(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
- setregs();
- }
- }
- if (d0 == 0L) {
+ sll_cv_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ Int i2 = IntOfTerm(d0);
+ if (i2 < 0)
+ d0 = MkIntegerTerm(SLR(d1, -i2));
+ else
+ d0 = do_sll(d1, i2 PASS_REGS);
+ } else {
saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ d0 = p_sll(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
setregs();
- FAIL();
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, sll_cv_unk, sll_cv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A<y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, sll_y_vv_unk, sll_y_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A<y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, sll_y_vc_unk);
- sll_y_vc_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- d0 = do_sll(IntOfTerm(d0), Yap_Eval(d1) PASS_REGS);
- }
- else {
- saveregs();
- d0 = p_sll(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- }
- }
- if (d0 == 0L) {
+ sll_y_vc_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = do_sll(IntOfTerm(d0), Yap_Eval(d1) PASS_REGS);
+ } else {
saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ d0 = p_sll(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
setregs();
- FAIL();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, sll_y_vc_unk, sll_y_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A<y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, sll_y_cv_unk);
- sll_y_cv_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- Int i2 = IntOfTerm(d0);
- if (i2 < 0)
- d0 = MkIntegerTerm(SLR(d1, -i2));
- else
- d0 = do_sll(d1,i2 PASS_REGS);
- }
- else {
- saveregs();
- d0 = p_sll(MkIntegerTerm(d1), Yap_Eval(0) PASS_REGS);
- setregs();
- }
- }
- if (d0 == 0L) {
+ sll_y_cv_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ Int i2 = IntOfTerm(d0);
+ if (i2 < 0)
+ d0 = MkIntegerTerm(SLR(d1, -i2));
+ else
+ d0 = do_sll(d1, i2 PASS_REGS);
+ } else {
saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ d0 = p_sll(MkIntegerTerm(d1), Yap_Eval(0) PASS_REGS);
setregs();
- FAIL();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, sll_y_cv_unk, sll_y_cv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A<y_u.xxx.x) = d0;
PREG = NEXTOP(PREG, xxx);
GONext();
BEGP(pt0);
deref_body(d0, pt0, slr_vv_unk, slr_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, slr_vv_nvar_unk, slr_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -1512,33 +1153,23 @@
d0 = XREG(PREG->y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, slr_vc_unk);
- slr_vc_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntTerm(SLR(IntOfTerm(d0), d1));
- }
- else {
- saveregs();
- d0 = p_slr(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ slr_vc_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntTerm(SLR(IntOfTerm(d0), d1));
+ } else {
+ saveregs();
+ d0 = p_slr(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, slr_vc_unk, slr_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -1549,37 +1180,27 @@
d0 = XREG(PREG->y_u.xxn.xi);
/* first check pt1 */
deref_head(d0, slr_cv_unk);
- slr_cv_nvar:
- {
- Int d1 = PREG->y_u.xxn.c;
- if (IsIntTerm(d0)) {
- Int i2 = IntOfTerm(d0);
- if (i2 < 0)
- d0 = do_sll(d1, -i2 PASS_REGS);
- else
- d0 = MkIntegerTerm(SLR(d1, i2));
- }
- else {
- saveregs();
- d0 = p_slr(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
- setregs();
- }
- }
- if (d0 == 0L) {
+ slr_cv_nvar : {
+ Int d1 = PREG->y_u.xxn.c;
+ if (IsIntTerm(d0)) {
+ Int i2 = IntOfTerm(d0);
+ if (i2 < 0)
+ d0 = do_sll(d1, -i2 PASS_REGS);
+ else
+ d0 = MkIntegerTerm(SLR(d1, i2));
+ } else {
saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ d0 = p_slr(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
setregs();
- FAIL();
}
+ }
XREG(PREG->y_u.xxn.x) = d0;
PREG = NEXTOP(PREG, xxn);
GONext();
BEGP(pt0);
deref_body(d0, pt0, slr_cv_unk, slr_cv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -1603,38 +1224,27 @@
d0 = do_sll(IntOfTerm(d0), -i2 PASS_REGS);
else
d0 = MkIntTerm(SLR(IntOfTerm(d0), i2));
- }
- else {
+ } else {
saveregs();
d0 = p_slr(Yap_Eval(d0), Yap_Eval(d1) PASS_REGS);
setregs();
}
BEGP(pt0);
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
pt0 = YREG + PREG->y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, slr_y_vv_unk, slr_y_vv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
BEGP(pt0);
deref_body(d1, pt0, slr_y_vv_nvar_unk, slr_y_vv_nvar_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
FAIL();
ENDP(pt0);
ENDD(d1);
@@ -1646,36 +1256,26 @@
d0 = XREG(PREG->y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, slr_y_vc_unk);
- slr_y_vc_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- d0 = MkIntTerm(SLR(IntOfTerm(d0), d1));
- }
- else {
- saveregs();
- d0 = p_slr(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
- setregs();
- if (d0 == 0L) {
- saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
- setregs();
- FAIL();
- }
- }
+ slr_y_vc_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ d0 = MkIntTerm(SLR(IntOfTerm(d0), d1));
+ } else {
+ saveregs();
+ d0 = p_slr(Yap_Eval(d0), MkIntegerTerm(d1) PASS_REGS);
+ setregs();
}
+ }
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, slr_y_vc_unk, slr_y_vc_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt0);
ENDD(d0);
ENDOp();
@@ -1685,40 +1285,34 @@
d0 = XREG(PREG->y_u.yxn.xi);
/* first check pt1 */
deref_head(d0, slr_y_cv_unk);
- slr_y_cv_nvar:
- {
- Int d1 = PREG->y_u.yxn.c;
- if (IsIntTerm(d0)) {
- Int i2 = IntOfTerm(d0);
- if (i2 < 0)
- d0 = do_sll(d1, -i2 PASS_REGS);
- else
- d0 = MkIntegerTerm(SLR(d1, i2));
- }
- else {
- saveregs();
- d0 = p_slr(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
- setregs();
- }
- }
- if (d0 == 0L) {
+ slr_y_cv_nvar : {
+ Int d1 = PREG->y_u.yxn.c;
+ if (IsIntTerm(d0)) {
+ Int i2 = IntOfTerm(d0);
+ if (i2 < 0)
+ d0 = do_sll(d1, -i2 PASS_REGS);
+ else
+ d0 = MkIntegerTerm(SLR(d1, i2));
+ } else {
saveregs();
- Yap_Error(LOCAL_Error_TYPE, LOCAL_Error_Term, LOCAL_ErrorMessage);
+ d0 = p_slr(MkIntegerTerm(d1), Yap_Eval(d0) PASS_REGS);
setregs();
+ }
+ }
+ if (d0 == 0L) {
+ Yap_AsmError(LOCAL_Error_TYPE,d0);
FAIL();
}
BEGP(pt0);
pt0 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt0,d0);
+ INITIALIZE_PERMVAR(pt0, d0);
ENDP(pt0);
GONext();
BEGP(pt0);
deref_body(d0, pt0, slr_y_cv_unk, slr_y_cv_nvar);
- saveregs();
- Yap_NilError(INSTANTIATION_ERROR, "X is A>>B");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
FAIL();
ENDP(pt0);
ENDD(d0);
@@ -1782,13 +1376,12 @@
}
}
}
- exec_bin_cmp_xx:
- {
- CmpPredicate f = PREG->y_u.plxxs.p->cs.d_code;
- saveregs();
- d0 = (CELL) (f) (d0,d1);
- setregs();
- }
+ exec_bin_cmp_xx : {
+ CmpPredicate f = PREG->y_u.plxxs.p->cs.d_code;
+ saveregs();
+ d0 = (CELL)(f)(d0, d1);
+ setregs();
+ }
if (PREG == FAILCODE) {
JMPNext();
}
@@ -1857,13 +1450,12 @@
}
}
}
- exec_bin_cmp_yx:
- {
- CmpPredicate f = PREG->y_u.plxys.p->cs.d_code;
- saveregs();
- d0 = (CELL) (f) (d0,d1);
- setregs();
- }
+ exec_bin_cmp_yx : {
+ CmpPredicate f = PREG->y_u.plxys.p->cs.d_code;
+ saveregs();
+ d0 = (CELL)(f)(d0, d1);
+ setregs();
+ }
if (!d0 || PREG == FAILCODE) {
if (PREG != FAILCODE)
PREG = PREG->y_u.plxys.f;
@@ -1930,13 +1522,12 @@
}
}
}
- exec_bin_cmp_xy:
- {
- CmpPredicate f = PREG->y_u.plxys.p->cs.d_code;
- saveregs();
- d0 = (CELL) (f) (d0,d1);
- setregs();
- }
+ exec_bin_cmp_xy : {
+ CmpPredicate f = PREG->y_u.plxys.p->cs.d_code;
+ saveregs();
+ d0 = (CELL)(f)(d0, d1);
+ setregs();
+ }
if (!d0 || PREG == FAILCODE) {
if (PREG != FAILCODE)
PREG = PREG->y_u.plxys.f;
@@ -2006,13 +1597,12 @@
}
}
}
- exec_bin_cmp_yy:
- {
- CmpPredicate f = PREG->y_u.plyys.p->cs.d_code;
- saveregs();
- d0 = (CELL) (f) (d0,d1);
- setregs();
- }
+ exec_bin_cmp_yy : {
+ CmpPredicate f = PREG->y_u.plyys.p->cs.d_code;
+ saveregs();
+ d0 = (CELL)(f)(d0, d1);
+ setregs();
+ }
if (!d0 || PREG == FAILCODE) {
if (PREG != FAILCODE)
PREG = PREG->y_u.plyys.f;
@@ -2049,8 +1639,10 @@
Op(p_dif, l);
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace)
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorDiff,0)),XREGS+1);
-#endif /* LOW_LEVEL_TRACE */
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorDiff, 0)),
+ XREGS + 1);
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
BEGD(d1);
d0 = ARG1;
@@ -2091,7 +1683,7 @@
* be trailed
*/
HBREG = HR;
- B = (choiceptr) HR;
+ B = (choiceptr)HR;
B->cp_h = HR;
SET_BB(B);
save_hb();
@@ -2117,8 +1709,8 @@
if (IsVarTerm(d1)) {
#if defined(YAPOR_SBA) && defined(YAPOR)
/* clean up the trail when we backtrack */
- if (Unsigned((Int)(d1)-(Int)(H_FZ)) >
- Unsigned((Int)(B_FZ)-(Int)(H_FZ))) {
+ if (Unsigned((Int)(d1) - (Int)(H_FZ)) >
+ Unsigned((Int)(B_FZ) - (Int)(H_FZ))) {
RESET_VARIABLE(STACK_TO_SBA(d1));
} else
#endif
@@ -2127,9 +1719,9 @@
#ifdef MULTI_ASSIGNMENT_VARIABLES
} else /* if (IsApplTerm(d1)) */ {
CELL *pt = RepAppl(d1);
- /* AbsAppl means */
- /* multi-assignment variable */
- /* so the next cell is the old value */
+/* AbsAppl means */
+/* multi-assignment variable */
+/* so the next cell is the old value */
#ifdef FROZEN_STACKS
pt[0] = TrailVal(--TR);
#else
@@ -2177,8 +1769,10 @@
#endif
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace)
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorSame,0)),XREGS+1);
-#endif /* LOW_LEVEL_TRACE */
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorSame, 0)),
+ XREGS + 1);
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
BEGD(d1);
d0 = ARG1;
@@ -2200,7 +1794,7 @@
}
BEGD(d2);
always_save_pc();
- d2 = iequ_complex(RepPair(d0)-1, RepPair(d0)+1,RepPair(d1)-1);
+ d2 = iequ_complex(RepPair(d0) - 1, RepPair(d0) + 1, RepPair(d1) - 1);
if (d2 == false) {
PREG = PREG->y_u.l.l;
GONext();
@@ -2248,7 +1842,8 @@
PREG = PREG->y_u.l.l;
GONext();
}
- if (strcmp((char *)(RepAppl(d0)+2),(char *)(RepAppl(d1)+2)) == 0) {
+ if (strcmp((char *)(RepAppl(d0) + 2), (char *)(RepAppl(d1) + 2)) ==
+ 0) {
PREG = NEXTOP(PREG, l);
GONext();
}
@@ -2261,7 +1856,7 @@
PREG = PREG->y_u.l.l;
GONext();
}
- if (Yap_gmp_tcmp_big_big(d0,d1) == 0) {
+ if (Yap_gmp_tcmp_big_big(d0, d1) == 0) {
PREG = NEXTOP(PREG, l);
GONext();
}
@@ -2291,7 +1886,8 @@
}
always_save_pc();
BEGD(d2);
- d2 = iequ_complex(RepAppl(d0), RepAppl(d0)+ArityOfFunctor(f0), RepAppl(d1));
+ d2 = iequ_complex(RepAppl(d0), RepAppl(d0) + ArityOfFunctor(f0),
+ RepAppl(d1));
if (d2 == false) {
PREG = PREG->y_u.l.l;
GONext();
@@ -2342,7 +1938,7 @@
ENDD(d0);
#ifdef COROUTINING
- /* Problem: have I got an environment or not? */
+ /* Problem: have I got an environment or not? */
NoStackEq:
PROCESS_INT(interrupt_eq, do_eq);
#endif
@@ -2350,16 +1946,16 @@
ENDOp();
#endif /* INLINE_BIG_COMPARISONS */
-
Op(p_arg_vv, xxx);
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
HR[0] = XREG(PREG->y_u.xxx.x1);
HR[1] = XREG(PREG->y_u.xxx.x2);
- RESET_VARIABLE(HR+2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorArg,0)),HR);
+ RESET_VARIABLE(HR + 2);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorArg, 0)), HR);
}
-#endif /* LOW_LEVEL_TRACE */
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
d0 = XREG(PREG->y_u.xxx.x1);
deref_head(d0, arg_arg1_unk);
@@ -2370,11 +1966,9 @@
else if (IsLongIntTerm(d0)) {
d0 = LongIntOfTerm(d0);
} else {
- if (IsBigIntTerm( d0 ))
+ if (IsBigIntTerm(d0))
FAIL();
- saveregs();
- Yap_Error(TYPE_ERROR_INTEGER,d0,"arg 1 of arg/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_INTEGER, d0);
FAIL();
}
@@ -2389,18 +1983,15 @@
BEGP(pt0);
pt0 = RepAppl(d1);
d1 = *pt0;
- if (IsExtensionFunctor((Functor) d1)) {
- saveregs();
- Yap_Error(TYPE_ERROR_COMPOUND, d1, "arg 2 of arg/3");
- setregs();
+ if (IsExtensionFunctor((Functor)d1)) {
+ Yap_AsmError(TYPE_ERROR_COMPOUND, AbsAppl(pt0));
FAIL();
}
- if ((Int)d0 <= 0 ||
- (Int)d0 > ArityOfFunctor((Functor) d1)) {
+ if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) {
/* don't complain here for Prolog compatibility
if ((Int)d0 <= 0) {
saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,
+Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
MkIntegerTerm(d0),"arg 1 of arg/3");
setregs();
}
@@ -2411,35 +2002,29 @@
PREG = NEXTOP(PREG, xxx);
GONext();
ENDP(pt0);
- }
- else if (IsPairTerm(d1)) {
+ } else if (IsPairTerm(d1)) {
BEGP(pt0);
pt0 = RepPair(d1);
if (d0 != 1 && d0 != 2) {
if ((Int)d0 < 0) {
- saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,
- MkIntegerTerm(d0),"arg 1 of arg/3");
- setregs();
+ Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d0) );
}
FAIL();
}
- XREG(PREG->y_u.xxx.x) = pt0[d0-1];
+ XREG(PREG->y_u.xxx.x) = pt0[d0 - 1];
PREG = NEXTOP(PREG, xxx);
GONext();
ENDP(pt0);
- }
- else {
- saveregs();
- Yap_Error(TYPE_ERROR_COMPOUND, d1, "arg 2 of arg/3");
- setregs();
+ } else {
+ Yap_AsmError(TYPE_ERROR_COMPOUND, d1);
FAIL();
}
BEGP(pt0);
deref_body(d1, pt0, arg_arg2_unk, arg_arg2_nvar);
saveregs();
- Yap_Error(INSTANTIATION_ERROR, d1,"arg 2 of arg/3");;
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
+ ;
setregs();
ENDP(pt0);
FAIL();
@@ -2448,7 +2033,8 @@
BEGP(pt0);
deref_body(d0, pt0, arg_arg1_unk, arg_arg1_nvar);
saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "arg 1 of arg/3");;
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
+ ;
setregs();
ENDP(pt0);
FAIL();
@@ -2460,13 +2046,14 @@
if (Yap_do_low_level_trace) {
CELL *Ho = HR;
Term t = MkIntegerTerm(PREG->y_u.xxn.c);
- HR[0] = t;
+ HR[0] = t;
HR[1] = XREG(PREG->y_u.xxn.xi);
- RESET_VARIABLE(HR+2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorArg,0)),HR);
+ RESET_VARIABLE(HR + 2);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorArg, 0)), HR);
HR = Ho;
}
-#endif /* LOW_LEVEL_TRACE */
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
d0 = PREG->y_u.xxn.c;
/* d0 now got the argument we want */
@@ -2480,18 +2067,15 @@
BEGP(pt0);
pt0 = RepAppl(d1);
d1 = *pt0;
- if (IsExtensionFunctor((Functor) d1)) {
- saveregs();
- Yap_Error(TYPE_ERROR_COMPOUND, d1, "arg 2 of arg/3");
- setregs();
+ if (IsExtensionFunctor((Functor)d1)) {
+ Yap_AsmError(TYPE_ERROR_COMPOUND,XREG(PREG->y_u.xxn.xi));
FAIL();
}
- if ((Int)d0 <= 0 ||
- (Int)d0 > ArityOfFunctor((Functor) d1)) {
+ if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) {
/* don't complain here for Prolog compatibility
if ((Int)d0 <= 0) {
saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,
+Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
MkIntegerTerm(d0),"arg 1 of arg/3");
setregs();
}
@@ -2502,36 +2086,28 @@
PREG = NEXTOP(PREG, xxn);
GONext();
ENDP(pt0);
- }
- else if (IsPairTerm(d1)) {
+ } else if (IsPairTerm(d1)) {
BEGP(pt0);
pt0 = RepPair(d1);
if (d0 != 1 && d0 != 2) {
if ((Int)d0 < 0) {
saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,
- MkIntegerTerm(d0),"arg 1 of arg/3");
- setregs();
+ Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, XREG(PREG->y_u.xxn.xi));
}
FAIL();
}
- XREG(PREG->y_u.xxn.x) = pt0[d0-1];
+ XREG(PREG->y_u.xxn.x) = pt0[d0 - 1];
PREG = NEXTOP(PREG, xxn);
GONext();
ENDP(pt0);
- }
- else {
- saveregs();
- Yap_Error(TYPE_ERROR_COMPOUND, d1, "arg 2 of arg/3");
- setregs();
+ } else {
+ Yap_AsmError(TYPE_ERROR_COMPOUND, XREG(PREG->y_u.xxn.xi));
FAIL();
}
BEGP(pt0);
deref_body(d1, pt0, arg_arg2_vc_unk, arg_arg2_vc_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d1,"arg 2 of arg/3");;
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR, XREG(PREG->y_u.xxn.xi));
ENDP(pt0);
FAIL();
ENDD(d1);
@@ -2545,10 +2121,11 @@
HR[0] = XREG(PREG->y_u.yxx.x1);
HR[1] = XREG(PREG->y_u.yxx.x2);
HR[2] = YREG[PREG->y_u.yxx.y];
- RESET_VARIABLE(HR+2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorArg,0)),HR);
+ RESET_VARIABLE(HR + 2);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorArg, 0)), HR);
}
-#endif /* LOW_LEVEL_TRACE */
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
d0 = XREG(PREG->y_u.yxx.x1);
deref_head(d0, arg_y_arg1_unk);
@@ -2559,11 +2136,9 @@
else if (IsLongIntTerm(d0)) {
d0 = LongIntOfTerm(d0);
} else {
- if (IsBigIntTerm( d0 ))
+ if (IsBigIntTerm(d0))
FAIL();
- saveregs();
- Yap_Error(TYPE_ERROR_INTEGER,d0,"arg 1 of arg/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_INTEGER, XREG(PREG->y_u.yxx.x1));
FAIL();
}
@@ -2578,18 +2153,15 @@
BEGP(pt0);
pt0 = RepAppl(d1);
d1 = *pt0;
- if (IsExtensionFunctor((Functor) d1)) {
- saveregs();
- Yap_Error(TYPE_ERROR_COMPOUND, d1, "arg 2 of arg/3");
- setregs();
+ if (IsExtensionFunctor((Functor)d1)) {
+ Yap_AsmError(TYPE_ERROR_COMPOUND,XREG(PREG->y_u.yxx.x2));
FAIL();
}
- if ((Int)d0 <= 0 ||
- (Int)d0 > ArityOfFunctor((Functor) d1)) {
+ if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) {
/* don't complain here for Prolog compatibility
if ((Int)d0 <= 0) {
saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,
+Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
MkIntegerTerm(d0),"arg 1 of arg/3");
saveregs();
}
@@ -2599,52 +2171,42 @@
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt1,pt0[d0]);
+ INITIALIZE_PERMVAR(pt1, pt0[d0]);
ENDP(pt1);
GONext();
ENDP(pt0);
- }
- else if (IsPairTerm(d1)) {
+ } else if (IsPairTerm(d1)) {
BEGP(pt0);
pt0 = RepPair(d1);
if (d0 != 1 && d0 != 2) {
if ((Int)d0 < 0) {
saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,
- MkIntegerTerm(d0),"arg 1 of arg/3");
- setregs();
+ Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, YREG[PREG->y_u.yxx.y]);
}
FAIL();
}
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxx.y;
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt1,pt0[d0-1]);
+ INITIALIZE_PERMVAR(pt1, pt0[d0 - 1]);
GONext();
ENDP(pt1);
ENDP(pt0);
- }
- else {
- saveregs();
- Yap_Error(TYPE_ERROR_COMPOUND, d1, "arg 2 of arg/3");
- setregs();
+ } else {
+ Yap_AsmError(TYPE_ERROR_COMPOUND, d1);
FAIL();
}
BEGP(pt0);
deref_body(d1, pt0, arg_y_arg2_unk, arg_y_arg2_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d1,"arg 2 of arg/3");;
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt0);
FAIL();
ENDD(d1);
BEGP(pt0);
deref_body(d0, pt0, arg_y_arg1_unk, arg_y_arg1_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "arg 1 of arg/3");;
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt0);
FAIL();
ENDD(d0);
@@ -2655,14 +2217,15 @@
if (Yap_do_low_level_trace) {
CELL *Ho = HR;
Term t = MkIntegerTerm(PREG->y_u.yxn.c);
- HR[0] = t;
+ HR[0] = t;
HR[1] = XREG(PREG->y_u.yxn.xi);
HR[2] = YREG[PREG->y_u.yxn.y];
- RESET_VARIABLE(HR+2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorArg,0)),HR);
+ RESET_VARIABLE(HR + 2);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorArg, 0)), HR);
HR = Ho;
}
-#endif /* LOW_LEVEL_TRACE */
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
d0 = PREG->y_u.yxn.c;
/* d0 now got the argument we want */
@@ -2676,20 +2239,14 @@
BEGP(pt0);
pt0 = RepAppl(d1);
d1 = *pt0;
- if (IsExtensionFunctor((Functor) d1)) {
- saveregs();
- Yap_Error(TYPE_ERROR_COMPOUND, d1, "arg 2 of arg/3");
- setregs();
- FAIL();
+ if (IsExtensionFunctor((Functor)d1)) {
+ Yap_AsmError(TYPE_ERROR_COMPOUND, XREG(PREG->y_u.yxn.xi));
+ FAIL();
}
- if ((Int)d0 <= 0 ||
- (Int)d0 > ArityOfFunctor((Functor) d1)) {
+ if ((Int)d0 <= 0 || (Int)d0 > ArityOfFunctor((Functor)d1)) {
/* don't complain here for Prolog compatibility
if ((Int)d0 <= 0) {
- saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,
- MkIntegerTerm(d0),"arg 1 of arg/3");
- setregs();
+Yap_AsmError( DOMAIN_ERROR_NOT_LESS_THAN_ZERO );
}
*/
FAIL();
@@ -2697,43 +2254,35 @@
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt1,pt0[d0]);
+ INITIALIZE_PERMVAR(pt1, pt0[d0]);
ENDP(pt1);
GONext();
ENDP(pt0);
- }
- else if (IsPairTerm(d1)) {
+ } else if (IsPairTerm(d1)) {
BEGP(pt0);
pt0 = RepPair(d1);
if (d0 != 1 && d0 != 2) {
if ((Int)d0 < 0) {
saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,
- MkIntegerTerm(d0),"arg 1 of arg/3");
- setregs();
+ Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, YREG[PREG->y_u.yxn.y]);
}
FAIL();
}
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxn.y;
PREG = NEXTOP(PREG, yxn);
- INITIALIZE_PERMVAR(pt1,pt0[d0-1]);
+ INITIALIZE_PERMVAR(pt1, pt0[d0 - 1]);
ENDP(pt1);
GONext();
ENDP(pt0);
- }
- else {
- saveregs();
- Yap_Error(TYPE_ERROR_COMPOUND, d1, "arg 2 of arg/3");
- setregs();
+ } else {
+ Yap_AsmError(TYPE_ERROR_COMPOUND,YREG[PREG->y_u.yxn.y]);
FAIL();
}
BEGP(pt0);
deref_body(d1, pt0, arg_y_arg2_vc_unk, arg_y_arg2_vc_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d1,"arg 2 of arg/3");;
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt0);
FAIL();
ENDD(d1);
@@ -2742,17 +2291,19 @@
ENDOp();
Op(p_func2s_vv, xxx);
- /* A1 is a variable */
+ /* A1 is a variable */
restart_func2s:
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
RESET_VARIABLE(HR);
HR[1] = XREG(PREG->y_u.xxx.x1);
HR[2] = XREG(PREG->y_u.xxx.x2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
}
-#endif /* LOW_LEVEL_TRACE */
- /* We have to build the structure */
+#endif /* LOW_LEVEL_TRACE */
+ /* We have to build the structure */
BEGD(d0);
d0 = XREG(PREG->y_u.xxx.x1);
deref_head(d0, func2s_unk);
@@ -2768,55 +2319,51 @@
else {
saveregs();
if (IsBigIntTerm(d1)) {
- Yap_Error(RESOURCE_ERROR_STACK, d1, "functor/3");
+ setregs();
+ Yap_AsmError(RESOURCE_ERROR_STACK,d1);
} else {
- Yap_Error(TYPE_ERROR_INTEGER, d1, "functor/3");
+ setregs();
+ Yap_AsmError(TYPE_ERROR_INTEGER,d1);
}
- setregs();
FAIL();
}
if (!IsAtomicTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL();
}
/* We made it!!!!! we got in d0 the name, in d1 the arity and
* in pt0 the variable to bind it to. */
if (d0 == TermDot && d1 == 2) {
RESET_VARIABLE(HR);
- RESET_VARIABLE(HR+1);
+ RESET_VARIABLE(HR + 1);
d0 = AbsPair(HR);
HR += 2;
/* else if arity is 0 just pass d0 through */
/* Ding, ding, we made it */
XREG(PREG->y_u.xxx.x) = d0;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxx),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxx), Osbpp), l);
GONext();
- }
- else if ((Int)d1 > 0) {
+ } else if ((Int)d1 > 0) {
/* now let's build a compound term */
if (!IsAtomTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL();
}
BEGP(pt1);
if (!IsAtomTerm(d0)) {
FAIL();
- }
- else
- d0 = (CELL) Yap_MkFunctor(AtomOfTerm(d0), (Int) d1);
+ } else
+ d0 = (CELL)Yap_MkFunctor(AtomOfTerm(d0), (Int)d1);
pt1 = HR;
*pt1++ = d0;
d0 = AbsAppl(HR);
- if (pt1+d1 > ENV || pt1+d1 > (CELL *)B) {
+ if (pt1 + d1 > ENV || pt1 + d1 > (CELL *)B) {
/* make sure we have something to show for our trouble */
saveregs();
- if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,xxx),Osbpp))) {
- Yap_NilError(RESOURCE_ERROR_STACK,LOCAL_ErrorMessage);
- setregs();
+ if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
+ NEXTOP(NEXTOP(PREG, xxx), Osbpp))) {
+ setregs();
+ Yap_AsmError(RESOURCE_ERROR_STACK, d1 );
JMPNext();
} else {
setregs();
@@ -2833,24 +2380,19 @@
/* else if arity is 0 just pass d0 through */
/* Ding, ding, we made it */
XREG(PREG->y_u.xxx.x) = d0;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxx),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxx), Osbpp), l);
GONext();
- } else if ((Int)d1 == 0) {
+ } else if ((Int)d1 == 0) {
XREG(PREG->y_u.xxx.x) = d0;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxx),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxx), Osbpp), l);
GONext();
- } else {
- saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,MkIntegerTerm(d1),"functor/3");
- setregs();
- FAIL();
+ } else {
+ Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d1));
}
BEGP(pt1);
deref_body(d1, pt1, func2s_unk2, func2s_nvar2);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d1, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1);
/* Oops, third argument was unbound */
FAIL();
@@ -2858,9 +2400,7 @@
BEGP(pt1);
deref_body(d0, pt1, func2s_unk, func2s_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1);
/* Oops, second argument was unbound too */
FAIL();
@@ -2868,16 +2408,18 @@
ENDOp();
Op(p_func2s_cv, xxc);
- /* A1 is a variable */
+ /* A1 is a variable */
restart_func2s_cv:
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
RESET_VARIABLE(HR);
HR[1] = PREG->y_u.xxc.c;
HR[2] = XREG(PREG->y_u.xxc.xi);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
}
-#endif /* LOW_LEVEL_TRACE */
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
/* We have to build the structure */
d0 = PREG->y_u.xxc.c;
@@ -2892,48 +2434,47 @@
else {
saveregs();
if (IsBigIntTerm(d1)) {
- Yap_Error(RESOURCE_ERROR_STACK, d1, "functor/3");
+ setregs();
+ Yap_AsmError(RESOURCE_ERROR_STACK, d1);
} else {
- Yap_Error(TYPE_ERROR_INTEGER,d1,"functor/3");
+ setregs();
+ Yap_AsmError(TYPE_ERROR_INTEGER, d1);
}
- setregs();
FAIL();
}
/* We made it!!!!! we got in d0 the name, in d1 the arity and
* in pt0 the variable to bind it to. */
if (d0 == TermDot && d1 == 2) {
RESET_VARIABLE(HR);
- RESET_VARIABLE(HR+1);
+ RESET_VARIABLE(HR + 1);
d0 = AbsPair(HR);
HR += 2;
/* else if arity is 0 just pass d0 through */
/* Ding, ding, we made it */
XREG(PREG->y_u.xxc.x) = d0;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxc),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxc), Osbpp), l);
GONext();
} else if ((Int)d1 > 0) {
/* now let's build a compound term */
if (!IsAtomTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL();
}
BEGP(pt1);
if (!IsAtomTerm(d0)) {
FAIL();
- }
- else
- d0 = (CELL) Yap_MkFunctor(AtomOfTerm(d0), (Int) d1);
+ } else
+ d0 = (CELL)Yap_MkFunctor(AtomOfTerm(d0), (Int)d1);
pt1 = HR;
*pt1++ = d0;
d0 = AbsAppl(HR);
- if (pt1+d1 > ENV || pt1+d1 > (CELL *)B) {
+ if (pt1 + d1 > ENV || pt1 + d1 > (CELL *)B) {
/* make sure we have something to show for our trouble */
saveregs();
- if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,xxc),Osbpp))) {
- Yap_NilError(RESOURCE_ERROR_STACK,LOCAL_ErrorMessage);
- setregs();
+ if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
+ NEXTOP(NEXTOP(PREG, xxc), Osbpp))) {
+ setregs();
+ Yap_AsmError(RESOURCE_ERROR_STACK, d1);
JMPNext();
} else {
setregs();
@@ -2950,24 +2491,19 @@
/* else if arity is 0 just pass d0 through */
/* Ding, ding, we made it */
XREG(PREG->y_u.xxc.x) = d0;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxc),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxc), Osbpp), l);
GONext();
- } else if (d1 == 0) {
+ } else if (d1 == 0) {
XREG(PREG->y_u.xxc.x) = d0;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxc),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxc), Osbpp), l);
GONext();
- } else {
- saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,MkIntegerTerm(d1),"functor/3");
- setregs();
- FAIL();
+ } else {
+ Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,d1);
}
BEGP(pt1);
deref_body(d1, pt1, func2s_unk2_cv, func2s_nvar2_cv);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d1, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1);
/* Oops, third argument was unbound */
FAIL();
@@ -2976,7 +2512,7 @@
ENDOp();
Op(p_func2s_vc, xxn);
- /* A1 is a variable */
+ /* A1 is a variable */
restart_func2s_vc:
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
@@ -2987,11 +2523,13 @@
RESET_VARIABLE(HR);
HR[1] = XREG(PREG->y_u.xxn.xi);
HR[2] = ti;
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
HR = hi;
}
-#endif /* LOW_LEVEL_TRACE */
- /* We have to build the structure */
+#endif /* LOW_LEVEL_TRACE */
+ /* We have to build the structure */
BEGD(d0);
d0 = XREG(PREG->y_u.xxn.xi);
deref_head(d0, func2s_unk_vc);
@@ -2999,51 +2537,46 @@
BEGD(d1);
d1 = PREG->y_u.xxn.c;
if (!IsAtomicTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL();
}
/* We made it!!!!! we got in d0 the name, in d1 the arity and
* in pt0 the variable to bind it to. */
if (d0 == TermDot && d1 == 2) {
RESET_VARIABLE(HR);
- RESET_VARIABLE(HR+1);
+ RESET_VARIABLE(HR + 1);
d0 = AbsPair(HR);
HR += 2;
/* else if arity is 0 just pass d0 through */
/* Ding, ding, we made it */
XREG(PREG->y_u.xxn.x) = d0;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxn),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxn), Osbpp), l);
GONext();
}
/* now let's build a compound term */
if (d1 == 0) {
XREG(PREG->y_u.xxn.x) = d0;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxn),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxn), Osbpp), l);
GONext();
}
if (!IsAtomTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL();
}
BEGP(pt1);
if (!IsAtomTerm(d0)) {
FAIL();
- }
- else
- d0 = (CELL) Yap_MkFunctor(AtomOfTerm(d0), (Int) d1);
+ } else
+ d0 = (CELL)Yap_MkFunctor(AtomOfTerm(d0), (Int)d1);
pt1 = HR;
*pt1++ = d0;
d0 = AbsAppl(HR);
- if (pt1+d1 > ENV || pt1+d1 > (CELL *)B) {
+ if (pt1 + d1 > ENV || pt1 + d1 > (CELL *)B) {
/* make sure we have something to show for our trouble */
saveregs();
- if (!Yap_gc(0, YREG, NEXTOP(NEXTOP(PREG,xxn),Osbpp))) {
- Yap_NilError(RESOURCE_ERROR_STACK,LOCAL_ErrorMessage);
- setregs();
+ if (!Yap_gc(0, YREG, NEXTOP(NEXTOP(PREG, xxn), Osbpp))) {
+ setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
JMPNext();
} else {
setregs();
@@ -3061,14 +2594,12 @@
/* else if arity is 0 just pass d0 through */
/* Ding, ding, we made it */
XREG(PREG->y_u.xxn.x) = d0;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxn),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, xxn), Osbpp), l);
GONext();
BEGP(pt1);
deref_body(d0, pt1, func2s_unk_vc, func2s_nvar_vc);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1);
/* Oops, second argument was unbound too */
FAIL();
@@ -3076,17 +2607,19 @@
ENDOp();
Op(p_func2s_y_vv, yxx);
- /* A1 is a variable */
+ /* A1 is a variable */
restart_func2s_y:
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
RESET_VARIABLE(HR);
HR[1] = XREG(PREG->y_u.yxx.x1);
HR[2] = XREG(PREG->y_u.yxx.x2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
}
-#endif /* LOW_LEVEL_TRACE */
- /* We have to build the structure */
+#endif /* LOW_LEVEL_TRACE */
+ /* We have to build the structure */
BEGD(d0);
d0 = XREG(PREG->y_u.yxx.x1);
deref_head(d0, func2s_y_unk);
@@ -3102,55 +2635,52 @@
else {
saveregs();
if (IsBigIntTerm(d1)) {
- Yap_Error(RESOURCE_ERROR_STACK, d1, "functor/3");
+ setregs();
+ Yap_AsmError(RESOURCE_ERROR_STACK, d1);
} else {
- Yap_Error(TYPE_ERROR_INTEGER,d1,"functor/3");
+ setregs();
+ Yap_AsmError(TYPE_ERROR_INTEGER, d1);
}
- setregs();
FAIL();
}
if (!IsAtomicTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL();
}
/* We made it!!!!! we got in d0 the name, in d1 the arity and
* in pt0 the variable to bind it to. */
if (d0 == TermDot && d1 == 2) {
RESET_VARIABLE(HR);
- RESET_VARIABLE(HR+1);
+ RESET_VARIABLE(HR + 1);
d0 = AbsPair(HR);
HR += 2;
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxx.y;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxx),Osbpp),l);
- INITIALIZE_PERMVAR(pt1,d0);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxx), Osbpp), l);
+ INITIALIZE_PERMVAR(pt1, d0);
ENDP(pt1);
GONext();
} else if ((Int)d1 > 0) {
/* now let's build a compound term */
if (!IsAtomTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM, d0);
FAIL();
}
BEGP(pt1);
if (!IsAtomTerm(d0)) {
FAIL();
- }
- else
- d0 = (CELL) Yap_MkFunctor(AtomOfTerm(d0), (Int) d1);
+ } else
+ d0 = (CELL)Yap_MkFunctor(AtomOfTerm(d0), (Int)d1);
pt1 = HR;
*pt1++ = d0;
d0 = AbsAppl(HR);
- if (pt1+d1 > ENV || pt1+d1 > (CELL *)B) {
+ if (pt1 + d1 > ENV || pt1 + d1 > (CELL *)B) {
/* make sure we have something to show for our trouble */
saveregs();
- if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxx),Osbpp))) {
- Yap_NilError(RESOURCE_ERROR_STACK,LOCAL_ErrorMessage);
+ if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
+ NEXTOP(NEXTOP(PREG, yxx), Osbpp))) {
setregs();
+ Yap_AsmError(RESOURCE_ERROR_STACK, d1);
JMPNext();
} else {
setregs();
@@ -3168,29 +2698,24 @@
/* Ding, ding, we made it */
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxx.y;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxx),Osbpp),l);
- INITIALIZE_PERMVAR(pt1,d0);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxx), Osbpp), l);
+ INITIALIZE_PERMVAR(pt1, d0);
ENDP(pt1);
GONext();
- } else if (d1 == 0) {
+ } else if (d1 == 0) {
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxx.y;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxx),Osbpp),l);
- INITIALIZE_PERMVAR(pt1,d0);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxx), Osbpp), l);
+ INITIALIZE_PERMVAR(pt1, d0);
ENDP(pt1);
GONext();
- } else {
- saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,MkIntegerTerm(d1),"functor/3");
- setregs();
- FAIL();
+ } else {
+ Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d1));
}
BEGP(pt1);
deref_body(d1, pt1, func2s_y_unk2, func2s_y_nvar2);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d1, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1);
/* Oops, third argument was unbound */
FAIL();
@@ -3198,9 +2723,7 @@
BEGP(pt1);
deref_body(d0, pt1, func2s_y_unk, func2s_y_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1);
/* Oops, second argument was unbound too */
FAIL();
@@ -3208,17 +2731,19 @@
ENDOp();
Op(p_func2s_y_cv, yxc);
- /* A1 is a variable */
+ /* A1 is a variable */
restart_func2s_y_cv:
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
RESET_VARIABLE(HR);
HR[1] = PREG->y_u.yxc.c;
HR[2] = XREG(PREG->y_u.yxc.xi);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
}
-#endif /* LOW_LEVEL_TRACE */
- /* We have to build the structure */
+#endif /* LOW_LEVEL_TRACE */
+ /* We have to build the structure */
BEGD(d0);
d0 = PREG->y_u.yxc.c;
/* we do, let's get the third argument */
@@ -3230,54 +2755,49 @@
if (IsIntegerTerm(d1)) {
d1 = IntegerOfTerm(d1);
} else {
- saveregs();
if (IsBigIntTerm(d1)) {
- Yap_Error(RESOURCE_ERROR_STACK, d1, "functor/3");
+ Yap_AsmError(RESOURCE_ERROR_STACK, d1);
} else {
- Yap_Error(TYPE_ERROR_INTEGER,d1,"functor/3");
+ Yap_AsmError(TYPE_ERROR_INTEGER, d1);
}
- setregs();
FAIL();
}
/* We made it!!!!! we got in d0 the name, in d1 the arity and
* in pt0 the variable to bind it to. */
if (d0 == TermDot && d1 == 2) {
RESET_VARIABLE(HR);
- RESET_VARIABLE(HR+1);
+ RESET_VARIABLE(HR + 1);
d0 = AbsPair(HR);
HR += 2;
/* else if arity is 0 just pass d0 through */
/* Ding, ding, we made it */
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxc.y;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxc),Osbpp),l);
- INITIALIZE_PERMVAR(pt1,d0);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxc), Osbpp), l);
+ INITIALIZE_PERMVAR(pt1, d0);
ENDP(pt1);
GONext();
- }
- else if ((Int)d1 > 0) {
+ } else if ((Int)d1 > 0) {
/* now let's build a compound term */
if (!IsAtomTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL();
}
if (!IsAtomTerm(d0)) {
FAIL();
- }
- else
- d0 = (CELL) Yap_MkFunctor(AtomOfTerm(d0), (Int) d1);
+ } else
+ d0 = (CELL)Yap_MkFunctor(AtomOfTerm(d0), (Int)d1);
BEGP(pt1);
pt1 = HR;
*pt1++ = d0;
d0 = AbsAppl(HR);
- if (pt1+d1 > ENV || pt1+d1 > (CELL *)B) {
+ if (pt1 + d1 > ENV || pt1 + d1 > (CELL *)B) {
/* make sure we have something to show for our trouble */
saveregs();
- if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxc),Osbpp))) {
- Yap_NilError(RESOURCE_ERROR_STACK,LOCAL_ErrorMessage);
+ if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
+ NEXTOP(NEXTOP(PREG, yxc), Osbpp))) {
setregs();
+ Yap_AsmError(RESOURCE_ERROR_STACK, d1);
JMPNext();
} else {
setregs();
@@ -3295,29 +2815,24 @@
/* Ding, ding, we made it */
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxc.y;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxc),Osbpp),l);
- INITIALIZE_PERMVAR(pt1,d0);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxc), Osbpp), l);
+ INITIALIZE_PERMVAR(pt1, d0);
ENDP(pt1);
GONext();
- } else if (d1 == 0) {
+ } else if (d1 == 0) {
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxc.y;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxc),Osbpp),l);
- INITIALIZE_PERMVAR(pt1,d0);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxc), Osbpp), l);
+ INITIALIZE_PERMVAR(pt1, d0);
ENDP(pt1);
GONext();
- } else {
- saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,MkIntegerTerm(d1),"functor/3");
- setregs();
- FAIL();
+ } else {
+ Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d1));
}
BEGP(pt1);
deref_body(d1, pt1, func2s_y_unk_cv, func2s_y_nvar_cv);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d1, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1);
/* Oops, third argument was unbound */
FAIL();
@@ -3326,7 +2841,7 @@
ENDOp();
Op(p_func2s_y_vc, yxn);
- /* A1 is a variable */
+ /* A1 is a variable */
restart_func2s_y_vc:
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
@@ -3337,11 +2852,13 @@
RESET_VARIABLE(HR);
HR[1] = XREG(PREG->y_u.yxn.xi);
HR[2] = ti;
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
HR = hi;
}
-#endif /* LOW_LEVEL_TRACE */
- /* We have to build the structure */
+#endif /* LOW_LEVEL_TRACE */
+ /* We have to build the structure */
BEGD(d0);
d0 = XREG(PREG->y_u.yxn.xi);
deref_head(d0, func2s_y_unk_vc);
@@ -3349,63 +2866,57 @@
BEGD(d1);
d1 = PREG->y_u.yxn.c;
if (!IsAtomicTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL();
}
/* We made it!!!!! we got in d0 the name, in d1 the arity and
* in pt0 the variable to bind it to. */
if (d0 == TermDot && d1 == 2) {
RESET_VARIABLE(HR);
- RESET_VARIABLE(HR+1);
+ RESET_VARIABLE(HR + 1);
d0 = AbsPair(HR);
HR += 2;
/* else if arity is 0 just pass d0 through */
/* Ding, ding, we made it */
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxn.y;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxn),Osbpp),l);
- INITIALIZE_PERMVAR(pt1,d0);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxn), Osbpp), l);
+ INITIALIZE_PERMVAR(pt1, d0);
ENDP(pt1);
GONext();
}
if (d1 == 0) {
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxn.y;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxn),Osbpp),l);
- INITIALIZE_PERMVAR(pt1,d0);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxn), Osbpp), l);
+ INITIALIZE_PERMVAR(pt1, d0);
ENDP(pt1);
GONext();
}
if (!IsAtomTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL();
}
/* now let's build a compound term */
if (!IsAtomTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL();
}
BEGP(pt1);
if (!IsAtomTerm(d0)) {
FAIL();
- }
- else
- d0 = (CELL) Yap_MkFunctor(AtomOfTerm(d0), (Int) d1);
+ } else
+ d0 = (CELL)Yap_MkFunctor(AtomOfTerm(d0), (Int)d1);
pt1 = HR;
*pt1++ = d0;
d0 = AbsAppl(HR);
- if (pt1+d1 > ENV || pt1+d1 > (CELL *)B) {
+ if (pt1 + d1 > ENV || pt1 + d1 > (CELL *)B) {
/* make sure we have something to show for our trouble */
saveregs();
- if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxn),Osbpp))) {
- Yap_NilError(RESOURCE_ERROR_STACK,LOCAL_ErrorMessage);
- setregs();
+ if (!Yap_gcl((1 + d1) * sizeof(CELL), 0, YREG,
+ NEXTOP(NEXTOP(PREG, yxn), Osbpp))) {
+ setregs();
+ Yap_AsmError(RESOURCE_ERROR_STACK, d1);
JMPNext();
} else {
setregs();
@@ -3423,17 +2934,15 @@
/* Ding, ding, we made it */
BEGP(pt1);
pt1 = YREG + PREG->y_u.yxn.y;
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxn),Osbpp),l);
- INITIALIZE_PERMVAR(pt1,d0);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, yxn), Osbpp), l);
+ INITIALIZE_PERMVAR(pt1, d0);
ENDP(pt1);
ENDD(d1);
GONext();
BEGP(pt1);
deref_body(d0, pt1, func2s_y_unk_vc, func2s_y_nvar_vc);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1);
/* Oops, second argument was unbound too */
FAIL();
@@ -3444,11 +2953,13 @@
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
HR[0] = XREG(PREG->y_u.xxx.x);
- RESET_VARIABLE(HR+1);
- RESET_VARIABLE(HR+2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ RESET_VARIABLE(HR + 1);
+ RESET_VARIABLE(HR + 2);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
}
-#endif /* LOW_LEVEL_TRACE */
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
d0 = XREG(PREG->y_u.xxx.x);
deref_head(d0, func2f_xx_unk);
@@ -3479,9 +2990,7 @@
BEGP(pt1);
deref_body(d0, pt1, func2f_xx_unk, func2f_xx_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1);
/* Oops, second argument was unbound too */
FAIL();
@@ -3492,18 +3001,20 @@
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
HR[0] = XREG(PREG->y_u.xxy.x);
- RESET_VARIABLE(HR+1);
- RESET_VARIABLE(HR+2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ RESET_VARIABLE(HR + 1);
+ RESET_VARIABLE(HR + 2);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
}
-#endif /* LOW_LEVEL_TRACE */
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
d0 = XREG(PREG->y_u.xxy.x);
deref_head(d0, func2f_xy_unk);
func2f_xy_nvar:
if (IsApplTerm(d0)) {
Functor d1 = FunctorOfTerm(d0);
- CELL *pt0 = YREG+PREG->y_u.xxy.y2;
+ CELL *pt0 = YREG + PREG->y_u.xxy.y2;
if (IsExtensionFunctor(d1)) {
XREG(PREG->y_u.xxy.x1) = d0;
PREG = NEXTOP(PREG, xxy);
@@ -3515,13 +3026,13 @@
INITIALIZE_PERMVAR(pt0, MkIntegerTerm(ArityOfFunctor(d1)));
GONext();
} else if (IsPairTerm(d0)) {
- CELL *pt0 = YREG+PREG->y_u.xxy.y2;
+ CELL *pt0 = YREG + PREG->y_u.xxy.y2;
XREG(PREG->y_u.xxy.x1) = TermDot;
PREG = NEXTOP(PREG, xxy);
INITIALIZE_PERMVAR(pt0, MkIntTerm(2));
GONext();
} else {
- CELL *pt0 = YREG+PREG->y_u.xxy.y2;
+ CELL *pt0 = YREG + PREG->y_u.xxy.y2;
XREG(PREG->y_u.xxy.x1) = d0;
PREG = NEXTOP(PREG, xxy);
INITIALIZE_PERMVAR(pt0, MkIntTerm(0));
@@ -3530,9 +3041,7 @@
BEGP(pt1);
deref_body(d0, pt1, func2f_xy_unk, func2f_xy_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1);
/* Oops, second argument was unbound too */
FAIL();
@@ -3543,18 +3052,20 @@
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
HR[0] = XREG(PREG->y_u.yxx.x2);
- RESET_VARIABLE(HR+1);
- RESET_VARIABLE(HR+2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ RESET_VARIABLE(HR + 1);
+ RESET_VARIABLE(HR + 2);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
}
-#endif /* LOW_LEVEL_TRACE */
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
d0 = XREG(PREG->y_u.yxx.x2);
deref_head(d0, func2f_yx_unk);
func2f_yx_nvar:
if (IsApplTerm(d0)) {
Functor d1 = FunctorOfTerm(d0);
- CELL *pt0 = YREG+PREG->y_u.yxx.y;
+ CELL *pt0 = YREG + PREG->y_u.yxx.y;
if (IsExtensionFunctor(d1)) {
XREG(PREG->y_u.yxx.x1) = MkIntTerm(0);
PREG = NEXTOP(PREG, yxx);
@@ -3563,16 +3074,16 @@
}
XREG(PREG->y_u.yxx.x1) = MkIntegerTerm(ArityOfFunctor(d1));
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0, MkAtomTerm(NameOfFunctor(d1)));
+ INITIALIZE_PERMVAR(pt0, MkAtomTerm(NameOfFunctor(d1)));
GONext();
} else if (IsPairTerm(d0)) {
- CELL *pt0 = YREG+PREG->y_u.yxx.y;
+ CELL *pt0 = YREG + PREG->y_u.yxx.y;
XREG(PREG->y_u.yxx.x1) = MkIntTerm(2);
PREG = NEXTOP(PREG, yxx);
- INITIALIZE_PERMVAR(pt0 ,TermDot);
+ INITIALIZE_PERMVAR(pt0, TermDot);
GONext();
} else {
- CELL *pt0 = YREG+PREG->y_u.yxx.y;
+ CELL *pt0 = YREG + PREG->y_u.yxx.y;
XREG(PREG->y_u.yxx.x1) = MkIntTerm(0);
PREG = NEXTOP(PREG, yxx);
INITIALIZE_PERMVAR(pt0, d0);
@@ -3581,9 +3092,7 @@
BEGP(pt1);
deref_body(d0, pt1, func2f_yx_unk, func2f_yx_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1);
/* Oops, second argument was unbound too */
FAIL();
@@ -3594,22 +3103,24 @@
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
HR[0] = XREG(PREG->y_u.yyx.x);
- RESET_VARIABLE(HR+1);
- RESET_VARIABLE(HR+2);
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),HR);
+ RESET_VARIABLE(HR + 1);
+ RESET_VARIABLE(HR + 2);
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ HR);
}
-#endif /* LOW_LEVEL_TRACE */
+#endif /* LOW_LEVEL_TRACE */
BEGD(d0);
d0 = XREG(PREG->y_u.yyx.x);
deref_head(d0, func2f_yy_unk);
func2f_yy_nvar:
if (IsApplTerm(d0)) {
Functor d1 = FunctorOfTerm(d0);
- CELL *pt0 = YREG+PREG->y_u.yyx.y1;
- CELL *pt1 = YREG+PREG->y_u.yyx.y2;
+ CELL *pt0 = YREG + PREG->y_u.yyx.y1;
+ CELL *pt1 = YREG + PREG->y_u.yyx.y2;
if (IsExtensionFunctor(d1)) {
PREG = NEXTOP(PREG, yyx);
- INITIALIZE_PERMVAR(pt0, d0);
+ INITIALIZE_PERMVAR(pt0, d0);
INITIALIZE_PERMVAR(pt1, MkIntTerm(0));
GONext();
}
@@ -3618,15 +3129,15 @@
INITIALIZE_PERMVAR(pt1, MkIntegerTerm(ArityOfFunctor(d1)));
GONext();
} else if (IsPairTerm(d0)) {
- CELL *pt0 = YREG+PREG->y_u.yyx.y1;
- CELL *pt1 = YREG+PREG->y_u.yyx.y2;
+ CELL *pt0 = YREG + PREG->y_u.yyx.y1;
+ CELL *pt1 = YREG + PREG->y_u.yyx.y2;
PREG = NEXTOP(PREG, yyx);
INITIALIZE_PERMVAR(pt0, TermDot);
INITIALIZE_PERMVAR(pt1, MkIntTerm(2));
GONext();
} else {
- CELL *pt0 = YREG+PREG->y_u.yyx.y1;
- CELL *pt1 = YREG+PREG->y_u.yyx.y2;
+ CELL *pt0 = YREG + PREG->y_u.yyx.y1;
+ CELL *pt1 = YREG + PREG->y_u.yyx.y2;
PREG = NEXTOP(PREG, yyx);
INITIALIZE_PERMVAR(pt0, d0);
INITIALIZE_PERMVAR(pt1, MkIntTerm(0));
@@ -3635,9 +3146,7 @@
BEGP(pt1);
deref_body(d0, pt1, func2f_yy_unk, func2f_yy_nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1);
/* Oops, second argument was unbound too */
FAIL();
@@ -3647,8 +3156,10 @@
Op(p_functor, e);
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace)
- low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor,0)),XREGS+1);
-#endif /* LOW_LEVEL_TRACE */
+ low_level_trace(enter_pred,
+ RepPredProp(Yap_GetPredPropByFunc(FunctorFunctor, 0)),
+ XREGS + 1);
+#endif /* LOW_LEVEL_TRACE */
restart_functor:
BEGD(d0);
d0 = ARG1;
@@ -3658,21 +3169,19 @@
BEGD(d1);
if (IsApplTerm(d0)) {
d1 = *RepAppl(d0);
- if (IsExtensionFunctor((Functor) d1)) {
- if (d1 <= (CELL)FunctorDouble && d1 >= (CELL)FunctorLongInt ) {
+ if (IsExtensionFunctor((Functor)d1)) {
+ if (d1 <= (CELL)FunctorDouble && d1 >= (CELL)FunctorLongInt) {
d1 = MkIntTerm(0);
} else
FAIL();
} else {
- d0 = MkAtomTerm(NameOfFunctor((Functor) d1));
- d1 = MkIntTerm(ArityOfFunctor((Functor) d1));
+ d0 = MkAtomTerm(NameOfFunctor((Functor)d1));
+ d1 = MkIntTerm(ArityOfFunctor((Functor)d1));
}
- }
- else if (IsPairTerm(d0)) {
+ } else if (IsPairTerm(d0)) {
d0 = TermDot;
d1 = MkIntTerm(2);
- }
- else {
+ } else {
d1 = MkIntTerm(0);
}
/* d1 and d0 now have the two arguments */
@@ -3687,7 +3196,8 @@
if (d0 != d1) {
FAIL();
}
- /* I have to this here so that I don't have a jump to a closing bracket */
+ /* I have to this here so that I don't have a jump to a closing bracket
+ */
d0 = arity;
goto func_bind_x3;
@@ -3695,7 +3205,8 @@
deref_body(d1, pt0, func_nvar_unk, func_nvar_nvar);
/* A2 is a variable, go and bind it */
YapBind(pt0, d0);
- /* I have to this here so that I don't have a jump to a closing bracket */
+ /* I have to this here so that I don't have a jump to a closing bracket
+ */
d0 = arity;
ENDP(pt0);
func_bind_x3:
@@ -3708,20 +3219,18 @@
FAIL();
}
/* Done */
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, e),Osbmp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, e), Osbmp), l);
GONext();
BEGP(pt0);
deref_body(d1, pt0, func_nvar3_unk, func_nvar3_nvar);
/* A3 is a variable, go and bind it */
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, e),Osbmp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, e), Osbmp), l);
YapBind(pt0, d0);
/* Done */
GONext();
-
ENDP(pt0);
-
}
ENDD(d1);
@@ -3741,78 +3250,65 @@
if (IsIntTerm(d1))
d1 = IntOfTerm(d1);
else {
- saveregs();
- Yap_Error(TYPE_ERROR_INTEGER,ARG3,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_INTEGER, d1);
FAIL();
}
if (!IsAtomicTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
+ Yap_AsmError(TYPE_ERROR_ATOM,d0);
FAIL();
- } /* We made it!!!!! we got in d0 the name, in d1 the arity and
- * in pt0 the variable to bind it to. */
+ } /* We made it!!!!! we got in d0 the name, in d1 the arity and
+ * in pt0 the variable to bind it to. */
if (d0 == TermDot && d1 == 2) {
RESET_VARIABLE(HR);
- RESET_VARIABLE(HR+1);
+ RESET_VARIABLE(HR + 1);
d0 = AbsPair(HR);
HR += 2;
- }
- else if ((Int)d1 > 0) {
+ } else if ((Int)d1 > 0) {
/* now let's build a compound term */
- if (!IsAtomTerm(d0)) {
- saveregs();
- Yap_Error(TYPE_ERROR_ATOM,d0,"functor/3");
- setregs();
- FAIL();
- }
- BEGP(pt1);
- if (!IsAtomTerm(d0)) {
- FAIL();
- }
- else
- d0 = (CELL) Yap_MkFunctor(AtomOfTerm(d0), (Int) d1);
- pt1 = HR;
- *pt1++ = d0;
- d0 = AbsAppl(HR);
- if (pt1+d1 > ENV || pt1+d1 > (CELL *)B) {
- /* make sure we have something to show for our trouble */
- saveregs();
- if (!Yap_gcl((1+d1)*sizeof(CELL), 3, YREG, NEXTOP(NEXTOP(PREG,e),Osbmp))) {
- Yap_NilError(RESOURCE_ERROR_STACK,LOCAL_ErrorMessage);
- setregs();
- JMPNext();
- } else {
- setregs();
- }
- goto restart_functor; /* */
- }
- while ((Int)d1--) {
- RESET_VARIABLE(pt1);
- pt1++;
- }
- /* done building the term */
- HR = pt1;
- ENDP(pt1);
- } else if ((Int)d1 < 0) {
- saveregs();
- Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,MkIntegerTerm(d1),"functor/3");
- setregs();
- FAIL();
+ if (!IsAtomTerm(d0)) {
+ Yap_AsmError(TYPE_ERROR_ATOM,d0);
+ FAIL();
+ }
+ BEGP(pt1);
+ if (!IsAtomTerm(d0)) {
+ FAIL();
+ } else
+ d0 = (CELL)Yap_MkFunctor(AtomOfTerm(d0), (Int)d1);
+ pt1 = HR;
+ *pt1++ = d0;
+ d0 = AbsAppl(HR);
+ if (pt1 + d1 > ENV || pt1 + d1 > (CELL *)B) {
+ /* make sure we have something to show for our trouble */
+ saveregs();
+ if (!Yap_gcl((1 + d1) * sizeof(CELL), 3, YREG,
+ NEXTOP(NEXTOP(PREG, e), Osbmp))) {
+ setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
+ } else {
+ setregs();
+ }
+ goto restart_functor; /* */
+ }
+ while ((Int)d1--) {
+ RESET_VARIABLE(pt1);
+ pt1++;
+ }
+ /* done building the term */
+ HR = pt1;
+ ENDP(pt1);
+ } else if ((Int)d1 < 0) {
+ Yap_AsmError(DOMAIN_ERROR_NOT_LESS_THAN_ZERO, MkIntegerTerm(d1));
+ FAIL();
}
/* else if arity is 0 just pass d0 through */
/* Ding, ding, we made it */
- PREG = NEXTOP(NEXTOP(NEXTOP(PREG, e),Osbpp),l);
+ PREG = NEXTOP(NEXTOP(NEXTOP(PREG, e), Osbpp), l);
YapBind(pt0, d0);
GONext();
-
BEGP(pt1);
deref_body(d1, pt1, func_var_3unk, func_var_3nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d1, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d1);
ENDP(pt1);
/* Oops, third argument was unbound */
FAIL();
@@ -3820,13 +3316,10 @@
BEGP(pt1);
deref_body(d0, pt1, func_var_2unk, func_var_2nvar);
- saveregs();
- Yap_Error(INSTANTIATION_ERROR, d0, "functor/3");
- setregs();
+ Yap_AsmError(INSTANTIATION_ERROR,d0);
ENDP(pt1);
/* Oops, second argument was unbound too */
FAIL();
ENDP(pt0);
ENDD(d0);
ENDOp();
-
diff --git a/C/qlyr.c b/C/qlyr.c
index 61c83a48a..4fbf46662 100755
--- a/C/qlyr.c
+++ b/C/qlyr.c
@@ -688,22 +688,7 @@ static void ReadHash(FILE *stream) {
Atom at;
qlf_tag_t tg = read_tag(stream);
- if (tg == QLY_ATOM_WIDE) {
- wchar_t *rep = (wchar_t *)AllocTempSpace();
- UInt len;
-
- len = read_UInt(stream);
- if (!EnoughTempSpace(len))
- QLYR_ERROR(OUT_OF_TEMP_SPACE);
- read_bytes(stream, rep, (len + 1) * sizeof(wchar_t));
- while (!(at = Yap_LookupWideAtom(rep))) {
- if (!Yap_growheap(FALSE, 0, NULL)) {
- exit(1);
- }
- }
- if (at == NIL)
- QLYR_ERROR(OUT_OF_ATOM_SPACE);
- } else if (tg == QLY_ATOM) {
+ if (tg == QLY_ATOM) {
char *rep = (char *)AllocTempSpace();
UInt len;
diff --git a/C/qlyw.c b/C/qlyw.c
index 153a75289..b186a0e81 100755
--- a/C/qlyw.c
+++ b/C/qlyw.c
@@ -505,7 +505,6 @@ DBRefAdjust__ (DBRef dbt USES_REGS)
#define rehash(oldcode, NOfE, KindOfEntries)
-#define RestoreSWIHash()
static void RestoreFlags( UInt NFlags )
{
@@ -584,15 +583,9 @@ SaveHash(FILE *stream)
if (a->val) {
Atom at = a->val;
CHECK(save_UInt(stream, (UInt)at));
- if (IsWideAtom(at)) {
- CHECK(save_tag(stream, QLY_ATOM_WIDE));
- CHECK(save_UInt(stream, wcslen(RepAtom(at)->WStrOfAE)));
- CHECK(save_bytes(stream, at->WStrOfAE, (wcslen(at->WStrOfAE)+1)*sizeof(wchar_t)));
- } else {
CHECK(save_tag(stream, QLY_ATOM));
CHECK(save_UInt(stream, strlen((char *)RepAtom(at)->StrOfAE)));
CHECK(save_bytes(stream, (char *)at->StrOfAE, (strlen((char *)at->StrOfAE)+1)*sizeof(char)));
- }
}
}
save_tag(stream, QLY_START_FUNCTORS);
diff --git a/C/save.c b/C/save.c
index a30849ef2..5e3326316 100755
--- a/C/save.c
+++ b/C/save.c
@@ -165,9 +165,11 @@ static Int
do_SYSTEM_ERROR_INTERNAL(yap_error_number etype, const char *msg)
{
CACHE_REGS
+ LOCAL_ErrorMessage = malloc(MAX_ERROR_MSG_SIZE+1);
#if HAVE_SNPRINTF
#if HAVE_STRERROR
- snprintf(LOCAL_ErrorSay,MAX_ERROR_MSG_SIZE,"%s (%s when reading %s)", msg, strerror(errno), LOCAL_FileNameBuf);
+ snprintf(LOCAL_ErrorMessage,MAX_ERROR_MSG_SIZE,"%s (%s when reading %s)", msg,
+ strerror(errno), LOCAL_FileNameBuf);
#else
snprintf(LOCAL_ErrorSay,MAX_ERROR_MSG_SIZE,"%s, (system error %d when reading %s)",msg,errno,LOCAL_FileNameBuf);
#endif
@@ -178,7 +180,6 @@ do_SYSTEM_ERROR_INTERNAL(yap_error_number etype, const char *msg)
sprintf(LOCAL_ErrorSay,"%s, (system error %d when reading %s)",msg,errno,LOCAL_FileNameBuf);
#endif
#endif
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
LOCAL_Error_TYPE = etype;
return -1;
}
@@ -685,8 +686,7 @@ check_header(CELL *info, CELL *ATrail, CELL *AStack, CELL *AHeap USES_REGS)
}
}
if (strcmp(pp, msg) != 0) {
- LOCAL_ErrorMessage = LOCAL_ErrorSay;
- strncpy(LOCAL_ErrorMessage, "saved state ", MAX_ERROR_MSG_SIZE);
+ strncpy(LOCAL_ErrorMessage, "saved state ", MAX_ERROR_MSG_SIZE-1);
strncat(LOCAL_ErrorMessage, LOCAL_FileNameBuf, MAX_ERROR_MSG_SIZE-1);
strncat(LOCAL_ErrorMessage, " failed to match version ID", MAX_ERROR_MSG_SIZE-1);
LOCAL_Error_TYPE = SYSTEM_ERROR_SAVED_STATE;
diff --git a/C/scanner.c b/C/scanner.c
index 1f54342e0..122c35f82 100755
--- a/C/scanner.c
+++ b/C/scanner.c
@@ -435,7 +435,7 @@ writing, writing a BOM can be requested using the option
#define my_islower(C) (C >= 'a' && C <= 'z')
static Term float_send(char *, int);
-static Term get_num(int *, int *, struct stream_desc *, char *, UInt, int);
+static Term get_num(int *, int *, struct stream_desc *, int);
static void Yap_setCurrentSourceLocation(struct stream_desc *s) {
CACHE_REGS
@@ -457,6 +457,7 @@ static void Yap_setCurrentSourceLocation(struct stream_desc *s) {
char_kind_t Yap_chtype0[NUMBER_OF_CHARS + 1] = {
EF,
/* 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,
@@ -584,7 +585,7 @@ static TokEntry *AuxSpaceError__(TokEntry *p, TokEntry *l,
return l;
}
-static void * InitScannerMemory(void) {
+static void *InitScannerMemory(void) {
CACHE_REGS
LOCAL_ErrorMessage = NULL;
LOCAL_Error_Size = 0;
@@ -630,18 +631,6 @@ static char *AllocScannerMemory(unsigned int size) {
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) {
/* I assume memory has been initialized */
return AllocScannerMemory(size);
@@ -880,15 +869,34 @@ static int num_send_error_message(char s[]) {
return TermNil;
}
+#define number_overflow() \
+ { \
+ size_t nsz = min(max_size * 2, max_size); \
+ char *nbuf; \
+ \
+ if (buf == buf0) { \
+ nbuf = malloc(nsz); \
+ } else { \
+ nbuf = realloc(buf, nsz); \
+ } \
+ if (!nbuf) { \
+ return num_send_error_message("Number Too Long"); \
+ } else { \
+ left = nsz - max_size; \
+ max_size = nsz; \
+ buf = nbuf; \
+ } \
+ }
+
/* reads a number, either integer or float */
-static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
- UInt max_size, int sign) {
- char *sp = s;
+static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, int sign) {
int ch = *chp;
Int val = 0L, base = ch - '0';
int might_be_float = TRUE, has_overflow = FALSE;
const unsigned char *decimalpoint;
+ char buf0[256], *sp = buf0, *buf = buf0;
+ int max_size = 254, left = 254;
*sp++ = ch;
ch = getchr(inp_stream);
@@ -898,9 +906,8 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
*/
if (chtype(ch) == NU) {
*sp++ = ch;
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
base = 10 * base + ch - '0';
ch = getchr(inp_stream);
}
@@ -909,9 +916,8 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
return num_send_error_message("Admissible bases are 0..36");
}
might_be_float = FALSE;
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
*sp++ = ch;
ch = getchr(inp_stream);
if (base == 0) {
@@ -939,9 +945,8 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
int chval =
(chtype(ch) == NU ? ch - '0'
: (my_isupper(ch) ? ch - 'A' : ch - 'a') + 10);
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
*sp++ = ch;
val = oval * base + chval;
if (oval != (val - chval) / base) /* overflow */
@@ -951,9 +956,8 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
}
} else if (ch == 'x' && base == 0) {
might_be_float = FALSE;
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
*sp++ = ch;
ch = getchr(inp_stream);
while (my_isxdigit(ch, 'F', 'f')) {
@@ -961,9 +965,8 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
int chval =
(chtype(ch) == NU ? ch - '0'
: (my_isupper(ch) ? ch - 'A' : ch - 'a') + 10);
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
*sp++ = ch;
val = val * 16 + chval;
if (oval != (val - chval) / 16) /* overflow */
@@ -986,9 +989,8 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
while (chtype(ch) == NU) {
Int oval = val;
if (!(val == 0 && ch == '0') || has_overflow) {
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
*sp++ = ch;
}
if (ch - '0' >= base) {
@@ -1019,7 +1021,7 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
*chbuffp = '.';
*chp = ch;
if (has_overflow)
- return read_int_overflow(s, base, val, sign);
+ return read_int_overflow(buf, base, val, sign);
if (sign == -1)
return MkIntegerTerm(-val);
return MkIntegerTerm(val);
@@ -1034,30 +1036,26 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
/* translate . to current locale */
while ((dc = *dp++) != '\0') {
*sp++ = dc;
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
}
/* numbers after . */
if (chtype(ch) == NU) {
do {
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
*sp++ = ch;
} while (chtype(ch = getchr(inp_stream)) == NU);
}
}
if (ch == 'e' || ch == 'E') {
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
*sp++ = ch;
ch = getchr(inp_stream);
if (ch == '-') {
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
*sp++ = '-';
ch = getchr(inp_stream);
} else if (ch == '+') {
@@ -1066,34 +1064,33 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
if (chtype(ch) != NU) {
CACHE_REGS
if (has_dot)
- return float_send(s, sign);
+ return float_send(buf, sign);
return MkIntegerTerm(sign * val);
}
do {
- if (--max_size == 0) {
- return num_send_error_message("Number Too Long");
- }
+ if (--left == 0)
+ number_overflow();
*sp++ = ch;
} while (chtype(ch = getchr(inp_stream)) == NU);
}
*sp = '\0';
*chp = ch;
- return float_send(s, sign);
+ return float_send(buf, sign);
} else if (has_overflow) {
*sp = '\0';
/* skip base */
*chp = ch;
- if (s[0] == '0' && s[1] == 'x')
- return read_int_overflow(s + 2, 16, val, sign);
- else if (s[0] == '0' && s[1] == 'o')
- return read_int_overflow(s + 2, 8, val, sign);
- else if (s[0] == '0' && s[1] == 'b')
- return read_int_overflow(s + 2, 2, val, sign);
- if (s[1] == '\'')
- return read_int_overflow(s + 2, base, val, sign);
- if (s[2] == '\'')
- return read_int_overflow(s + 3, base, val, sign);
- return read_int_overflow(s, base, val, sign);
+ if (buf[0] == '0' && buf[1] == 'x')
+ return read_int_overflow(buf + 2, 16, val, sign);
+ else if (buf[0] == '0' && buf[1] == 'o')
+ return read_int_overflow(buf + 2, 8, val, sign);
+ else if (buf[0] == '0' && buf[1] == 'b')
+ return read_int_overflow(buf + 2, 2, val, sign);
+ if (buf[1] == '\'')
+ return read_int_overflow(buf + 2, base, val, sign);
+ if (buf[2] == '\'')
+ return read_int_overflow(buf + 3, base, val, sign);
+ return read_int_overflow(buf, base, val, sign);
} else {
CACHE_REGS
*chp = ch;
@@ -1103,13 +1100,12 @@ static Term get_num(int *chp, int *chbuffp, StreamDesc *inp_stream, char *s,
/* given a function getchr scan until we either find the number
or end of file */
-Term Yap_scan_num(StreamDesc *inp) {
+Term Yap_scan_num(StreamDesc *inp, bool error_on) {
CACHE_REGS
Term out;
int sign = 1;
int ch, cherr;
- char *ptr, *mp;
- int kind;
+ char *ptr;
void *old_tr = TR;
InitScannerMemory();
@@ -1119,10 +1115,12 @@ Term Yap_scan_num(StreamDesc *inp) {
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
return 0;
}
-#if HAVE_ISWBLANK
- while (iswblank( ch = getchr(inp) ));
+#if HAVE_ISWSPACE
+ while (iswspace(ch = getchr(inp)))
+ ;
#else
- while (isspace( ch = getchr(inp) ));
+ while (isspace(ch = getchr(inp)))
+ ;
#endif
TokEntry *tokptr = (TokEntry *)AllocScannerMemory(sizeof(TokEntry));
tokptr->TokPos = GetCurInpPos(inp);
@@ -1136,69 +1134,27 @@ Term Yap_scan_num(StreamDesc *inp) {
cherr = '\0';
if (ASP - HR < 1024) {
Yap_clean_tokenizer(old_tr, NULL, NULL);
- LOCAL_ErrorMessage = "Stack Overflow";
+ LOCAL_ErrorMessage = "Stack Overflow";
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
return 0;
}
- out = get_num(&ch, &cherr, inp, ptr, 4096, sign); /* */
- }
- if (LOCAL_ErrorMessage != NULL || ch != -1 || cherr) {
- CACHE_REGS
- char *s = ptr;
- int sign = 1;
-
+ out = get_num(&ch, &cherr, inp, sign); /* */
+ } else {
out = 0;
- if (s[0] == '+') {
- s++;
- }
- if (s[0] == '-') {
- s++;
- sign = -1;
- }
- if (strcmp(s, "inf") == 0) {
- if (sign > 0) {
- out = MkFloatTerm(INFINITY);
- } else {
- 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 = Unsigned(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;
- LOCAL_ErrorMessage = NULL;
- LOCAL_Error_Term = Yap_syntax_error(e, inp - GLOBAL_Stream);
- LOCAL_Error_TYPE = SYNTAX_ERROR;
- }
}
- PopScannerMemory(ptr, 4096);
- Yap_clean_tokenizer(old_tr, NULL, NULL);
+#if HAVE_ISWSPACE
+ while (iswspace(ch = getchr(inp)))
+ ;
+#else
+ while (isspace(ch = getchr(inp)))
+ ;
+#endif
+ if (LOCAL_ErrorMessage != NULL || ch != -1 || cherr) {
+ Yap_clean_tokenizer(old_tr, NULL, NULL);
+ if (error_on)
+ Yap_Error(SYNTAX_ERROR, ARG2, "converting number");
+ return 0;
+ }
return out;
}
@@ -1215,61 +1171,88 @@ Term Yap_scan_num(StreamDesc *inp) {
return l; \
}
-const char *Yap_tokRep(TokEntry *tokptr, encoding_t encoding) {
+Term Yap_tokRep(void *tokptre) {
CACHE_REGS
+ TokEntry *tokptr = tokptre;
Term info = tokptr->TokInfo;
- char *buf = LOCAL_FileNameBuf2;
- size_t length;
- UInt flags = 0;
switch (tokptr->Tok) {
case Name_tok:
- if (IsWideAtom((Atom)info)) {
- wchar_t *wc = RepAtom((Atom)info)->WStrOfAE;
- Term s = Yap_WCharsToString(wc PASS_REGS);
- return StringOfTerm(s);
+ if (!info) {
+ info = TermNil;
}
- return RepAtom((Atom)info)->StrOfAE;
+ return Yap_MkApplTerm(Yap_MkFunctor(AtomAtom, 1), 1, &info);
+ case QuasiQuotes_tok:
+ info = MkAtomTerm(Yap_LookupAtom(""));
+ return Yap_MkApplTerm(Yap_MkFunctor(AtomAtom, 1), 1, &info);
case Number_tok:
- return Yap_TermToString(info, &length, encoding, flags);
+ return Yap_MkApplTerm(Yap_MkFunctor(AtomAtom, 1), 1, &info);
+ break;
case Var_tok: {
+ Term t[2];
VarEntry *varinfo = (VarEntry *)info;
- varinfo->VarAdr = TermNil;
- return varinfo->VarRep;
+ 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 (char *)info;
- case WString_tok:
- case WBQString_tok: {
- wchar_t *op = (wchar_t *)info;
- wchar_t c;
- unsigned char *bp = (unsigned char *)buf;
- while ((c = *op++)) {
- bp += put_utf8(bp, c);
- }
- bp[0] = '\0';
- return buf;
- }
+ return Yap_MkApplTerm(Yap_MkFunctor(AtomString, 1), 1, &info);
case Error_tok:
- return "";
+ return MkAtomTerm(AtomError);
case eot_tok:
- return "";
- case Ponctuation_tok: {
- buf[1] = '\0';
- if ((info) == 'l') {
- buf[0] = '(';
- } else {
- buf[0] = (char)info;
- }
+ return MkAtomTerm(Yap_LookupAtom("EOT"));
+ case Ponctuation_tok:
+ if (info == Terml)
+ return TermBeginBracket;
+ else
+ return info;
}
- return buf;
+ 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:
+ if (info == Terml)
+ return "(";
+ case Error_tok:
+ case BQString_tok:
+ case String_tok:
+ case Name_tok:
+ return AtomOfTerm(info)->StrOfAE;
case QuasiQuotes_tok:
- case WQuasiQuotes_tok:
return "";
- default:
- return "??";
+ 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) {
@@ -1320,52 +1303,8 @@ static void mark_eof(struct stream_desc *inp_stream) {
inp_stream->status |= Push_Eof_Stream_f;
}
-static wchar_t *ch_to_wide(char *base, char *charp) {
- CACHE_REGS
- int n = charp - base, i;
- wchar_t *nb = (wchar_t *)base;
-
- if ((nb + n) + 1024 > (wchar_t *)AuxSp) {
- LOCAL_Error_TYPE = RESOURCE_ERROR_AUXILIARY_STACK;
- LOCAL_ErrorMessage =
- "Heap Overflow While Scanning: please increase code space (-h)";
- return NULL;
- }
- for (i = n; i > 0; i--) {
- nb[i - 1] = (unsigned char)base[i - 1];
- }
- return nb + n;
-}
-
#define add_ch_to_buff(ch) \
- if (wcharp) { \
- *wcharp++ = (ch); \
- if (wcharp >= (wchar_t *)AuxSp - 1024) \
- goto huge_var_error; \
- charp = (char *)wcharp; \
- } else { \
- if (ch > MAX_ISO_LATIN1 && !wcharp) { \
- /* does not fit in ISO-LATIN */ \
- wcharp = ch_to_wide(TokImage, charp); \
- if (!wcharp) \
- goto huge_var_error; \
- *wcharp++ = (ch); \
- charp = (char *)wcharp; \
- } else { \
- if (charp >= (char *)AuxSp - 1024) \
- goto huge_var_error; \
- *charp++ = ch; \
- } \
- }
-
-#define add_ch_to_utf8_buff(ch) \
- { \
- if ((ch & 0xff) == ch) { \
- *charp++ = ch; \
- } else { \
- charp = _PL__put_utf8(charp, chr); \
- } \
- }
+ { charp += put_utf8(charp, ch); }
TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
Term *tposp) {
@@ -1374,9 +1313,9 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
TokEntry *t, *l, *p;
enum TokenKinds kind;
int solo_flag = TRUE;
- int ch;
- wchar_t *wcharp;
+ int32_t ch, och;
struct qq_struct_t *cur_qq = NULL;
+ int sign = 1;
InitScannerMemory();
LOCAL_VarTable = NULL;
@@ -1392,11 +1331,10 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
LOCAL_StartLineCount = inp_stream->linecount;
LOCAL_StartLinePos = inp_stream->linepos;
do {
- wchar_t och, pch;
int quote, isvar;
- char *charp, *mp;
- unsigned int len;
- char *TokImage = NULL;
+ unsigned char *charp, *mp;
+ size_t len;
+ unsigned char *TokImage = NULL;
t = (TokEntry *)AllocScannerMemory(sizeof(TokEntry));
t->TokNext = NULL;
@@ -1418,14 +1356,11 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
case CC:
if (store_comments) {
- CHECK_SPACE();
open_comment(ch, inp_stream PASS_REGS);
continue_comment:
while ((ch = getchr(inp_stream)) != 10 && chtype(ch) != EF) {
- CHECK_SPACE();
extend_comment(ch PASS_REGS);
}
- CHECK_SPACE();
extend_comment(ch PASS_REGS);
if (chtype(ch) != EF) {
ch = getchr(inp_stream);
@@ -1446,7 +1381,6 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
while (chtype(ch) == BS) {
ch = getchr(inp_stream);
}
- CHECK_SPACE();
*tposp = Yap_StreamPosition(inp_stream - GLOBAL_Stream);
Yap_setCurrentSourceLocation(inp_stream);
}
@@ -1460,27 +1394,31 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
case UC:
case UL:
- case LC:
- och = ch;
+ case LC: {
+ int32_t och = ch;
ch = getchr(inp_stream);
+ size_t sz = 512;
+ TokImage = Malloc(sz PASS_REGS);
scan_name:
- TokImage = (char *)((AtomEntry *)(Yap_PreAllocCodeSpace()))->StrOfAE;
- charp = TokImage;
- wcharp = NULL;
+ charp = (unsigned char *)TokImage;
isvar = (chtype(och) != LC);
add_ch_to_buff(och);
for (; chtype(ch) <= NU; ch = getchr(inp_stream)) {
- if (charp == (char *)AuxSp - 1024) {
- huge_var_error:
- return AuxSpaceError(p, l, "Code Space Overflow due to huge atom");
- /* huge atom or variable, we are in trouble */
+ if (charp == TokImage + (sz - 1)) {
+ unsigned char *p0 = TokImage;
+ sz = min(sz * 2, sz + MBYTE);
+ TokImage = Realloc(p0, sz);
+ if (TokImage == NULL) {
+ return CodeSpaceError(t, p, l);
+ }
+ charp = TokImage - (charp - p0);
}
add_ch_to_buff(ch);
}
while (ch == '\'' && isvar &&
trueGlobalPrologFlag(VARIABLE_NAMES_MAY_END_WITH_QUOTES_FLAG)) {
- if (charp == (char *)AuxSp - 1024) {
- goto huge_var_error;
+ if (charp == (unsigned char *)AuxSp - 1024) {
+ return CodeSpaceError(t, p, l);
}
add_ch_to_buff(ch);
ch = getchr(inp_stream);
@@ -1489,42 +1427,37 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
if (!isvar) {
Atom ae;
/* don't do this in iso */
- if (wcharp) {
- ae = Yap_LookupWideAtom((wchar_t *)TokImage);
- } else {
- ae = Yap_LookupAtom(TokImage);
- }
+ ae = Yap_ULookupAtom(TokImage);
+ Free(TokImage);
if (ae == NIL) {
return CodeSpaceError(t, p, l);
}
- t->TokInfo = Unsigned(ae);
- Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
+ t->TokInfo = MkAtomTerm(ae);
if (ch == '(')
solo_flag = FALSE;
t->Tok = Ord(kind = Name_tok);
} else {
- VarEntry *ve = Yap_LookupVar(TokImage);
+ VarEntry *ve = Yap_LookupVar((const char *)TokImage);
+ Free(TokImage);
t->TokInfo = Unsigned(ve);
if (cur_qq) {
ve->refs++;
}
- Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
t->Tok = Ord(kind = Var_tok);
}
- break;
+
+ } break;
case NU: {
int cherr;
- int cha = ch;
- char *ptr;
+ int cha;
+ sign = 1;
+ scan_number:
+ cha = ch;
cherr = 0;
- if (!(ptr = AllocScannerMemory(4096))) {
- return TrailSpaceError(t, l);
- }
CHECK_SPACE();
- if ((t->TokInfo = get_num(&cha, &cherr, inp_stream, ptr, 4096, 1)) ==
- 0L) {
+ if ((t->TokInfo = get_num(&cha, &cherr, inp_stream, sign)) == 0L) {
if (p) {
p->Tok = eot_tok;
t->TokInfo = TermError;
@@ -1532,7 +1465,6 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
/* serious error now */
return l;
}
- PopScannerMemory(ptr, 4096);
ch = cha;
if (cherr) {
TokEntry *e;
@@ -1552,6 +1484,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
case 'e':
case 'E':
och = cherr;
+ TokImage = Malloc(1024 PASS_REGS);
goto scan_name;
break;
case '=':
@@ -1561,7 +1494,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
TokEntry *e2;
t->Tok = Ord(Var_tok);
- t->TokInfo = Unsigned(Yap_LookupVar("E"));
+ t->TokInfo = (Term)Yap_LookupVar("E");
t->TokPos = GetCurInpPos(inp_stream);
e2 = (TokEntry *)AllocScannerMemory(sizeof(TokEntry));
if (e2 == NULL) {
@@ -1584,10 +1517,17 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
{
TokEntry *e2;
+ if (chtype(ch) == NU) {
+ if (och == '-')
+ sign = -1;
+ else
+ sign = 1;
+ goto scan_number;
+ }
t->Tok = Name_tok;
if (ch == '(')
solo_flag = FALSE;
- t->TokInfo = Unsigned(AtomE);
+ t->TokInfo = MkAtomTerm(AtomE);
t->TokPos = GetCurInpPos(inp_stream);
e2 = (TokEntry *)AllocScannerMemory(sizeof(TokEntry));
if (e2 == NULL) {
@@ -1611,18 +1551,19 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
case QT:
case DC:
quoted_string:
- TokImage = (char *)((AtomEntry *)(Yap_PreAllocCodeSpace()))->StrOfAE;
+ TokImage = Malloc(1048);
charp = TokImage;
quote = ch;
len = 0;
ch = getchrq(inp_stream);
- wcharp = NULL;
+ size_t sz = 1024;
while (TRUE) {
- if (charp + 1024 > (char *)AuxSp) {
- LOCAL_Error_TYPE = RESOURCE_ERROR_AUXILIARY_STACK;
- LOCAL_ErrorMessage =
- "Heap Overflow While Scanning: please increase code space (-h)";
+ if (charp > TokImage + (sz - 1)) {
+ TokImage = Realloc(TokImage, min(sz * 2, sz + MBYTE));
+ if (TokImage == NULL) {
+ return CodeSpaceError(t, p, l);
+ }
break;
}
if (ch == 10 && trueGlobalPrologFlag(ISO_FLAG)) {
@@ -1630,7 +1571,9 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
LOCAL_ErrorMessage = "layout character \n inside quotes";
break;
}
-
+ if (ch == EOFCHAR) {
+ break;
+ }
if (ch == quote) {
ch = getchrq(inp_stream);
if (ch != quote)
@@ -1646,75 +1589,46 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
if (scan_next) {
ch = getchrq(inp_stream);
}
- } else if (chtype(ch) == EF && ch <= MAX_ISO_LATIN1) {
- Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
- mark_eof(inp_stream);
- t->Tok = Ord(kind = eot_tok);
- t->TokInfo = TermEof;
- break;
} else {
add_ch_to_buff(ch);
ch = getchrq(inp_stream);
}
++len;
- if (charp > (char *)AuxSp - 1024) {
- /* Not enough space to read in the string. */
- return AuxSpaceError(
- t, l, "not enough space to read in string or quoted atom");
+ }
+ *charp = '\0';
+ if (quote == '"') {
+ t->TokInfo = Yap_CharsToTDQ((char *)TokImage, CurrentModule,
+ LOCAL_encoding PASS_REGS);
+ if (!(t->TokInfo)) {
+ return CodeSpaceError(t, p, l);
}
- }
- if (wcharp) {
- *wcharp = '\0';
+ Free(TokImage);
+ t->Tok = Ord(kind = String_tok);
+ } else if (quote == '`') {
+ t->TokInfo = Yap_CharsToTBQ((char *)TokImage, CurrentModule,
+ LOCAL_encoding PASS_REGS);
+ if (!(t->TokInfo)) {
+ return CodeSpaceError(t, p, l);
+ }
+ Free(TokImage);
+ t->Tok = Ord(kind = String_tok);
} else {
- *charp = '\0';
+ t->TokInfo = MkAtomTerm(Yap_ULookupAtom(TokImage));
+ if (!(t->TokInfo)) {
+ return CodeSpaceError(t, p, l);
+ }
+ Free(TokImage);
+ t->Tok = Ord(kind = Name_tok);
+ if (ch == '(')
+ solo_flag = false;
}
- if (quote == '"' ) {
- if (wcharp) {
- t->TokInfo = Yap_WCharsToTDQ((wchar_t *)TokImage,
- CurrentModule
- PASS_REGS);
- } else {
- t->TokInfo = Yap_CharsToTDQ(TokImage, CurrentModule, LOCAL_encoding
- PASS_REGS);
- }
- if (!(t->TokInfo)) {
- return CodeSpaceError(t, p, l);
- }
- Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
- t->Tok = Ord(kind = String_tok);
- } else if (quote == '`') {
- if (wcharp) {
- t->TokInfo = Yap_WCharsToTBQ((wchar_t *)TokImage,
- CurrentModule PASS_REGS);
- } else {
- t->TokInfo = Yap_CharsToTBQ(TokImage, CurrentModule,
- LOCAL_encoding
- PASS_REGS);
- }
- if (!(t->TokInfo)) {
- return CodeSpaceError(t, p, l);
- }
- Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
- t->Tok = Ord(kind = String_tok);
- } else {
- if (wcharp) {
- t->TokInfo = Unsigned(Yap_LookupWideAtom((wchar_t *)TokImage));
- } else {
- t->TokInfo = Unsigned(Yap_LookupAtom(TokImage));
- }
- if (!(t->TokInfo)) {
- return CodeSpaceError(t, p, l);
- }
- Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
- t->Tok = Ord(kind = Name_tok);
- if (ch == '(')
- solo_flag = false;
- }
- break;
+ break;
case BS:
if (ch == '\0') {
+ int pch;
t->Tok = Ord(kind = eot_tok);
+ pch = Yap_peek(inp_stream - GLOBAL_Stream);
if (chtype(pch) == EF) {
mark_eof(inp_stream);
t->TokInfo = TermEof;
@@ -1726,21 +1640,15 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
} else
ch = getchr(inp_stream);
break;
- case SY:
+ case SY: {
+ int pch;
if (ch == '.' && (pch = Yap_peek(inp_stream - GLOBAL_Stream)) &&
(chtype(pch) == BS || chtype(pch) == EF || pch == '%')) {
t->Tok = Ord(kind = eot_tok);
// consume...
if (pch == '%') {
- t->TokInfo = TermNewLine;
- 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;
}
@@ -1754,11 +1662,11 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
if (ch == '%') {
t->TokInfo = TermNewLine;
return l;
- }
+ }
if (chtype(ch) == EF) {
mark_eof(inp_stream);
- t->TokInfo = TermEof;
- } else {
+ t->TokInfo = TermEof;
+ } else {
t->TokInfo = TermNewLine;
}
return l;
@@ -1804,14 +1712,15 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
}
goto restart;
}
+ }
enter_symbol:
if (och == '.' && (chtype(ch) == BS || chtype(ch) == EF || ch == '%')) {
t->Tok = Ord(kind = eot_tok);
- if (ch == '%') {
+ if (ch == '%') {
t->TokInfo = TermNewLine;
return l;
}
- if (chtype(ch) == EF) {
+ if (chtype(ch) == EF) {
mark_eof(inp_stream);
t->TokInfo = TermEof;
} else {
@@ -1820,31 +1729,29 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
return l;
} else {
Atom ae;
-
- TokImage = (char *)((AtomEntry *)(Yap_PreAllocCodeSpace()))->StrOfAE;
+ sz = 1024;
+ TokImage = Malloc(sz);
charp = TokImage;
- wcharp = NULL;
add_ch_to_buff(och);
for (; chtype(ch) == SY; ch = getchr(inp_stream)) {
- if (charp == (char *)AuxSp - 1024) {
- goto huge_var_error;
+ if (charp >= TokImage + (sz - 10)) {
+ sz = min(sz * 2, sz + MBYTE);
+ TokImage = Realloc(TokImage, sz);
+ if (!TokImage)
+ return CodeSpaceError(t, p, l);
}
add_ch_to_buff(ch);
}
add_ch_to_buff('\0');
- if (wcharp) {
- ae = Yap_LookupWideAtom((wchar_t *)TokImage);
- } else {
- ae = Yap_LookupAtom(TokImage);
- }
+ ae = Yap_ULookupAtom(TokImage);
if (ae == NIL) {
return CodeSpaceError(t, p, l);
}
- t->TokInfo = Unsigned(ae);
+ t->TokInfo = MkAtomTerm(ae);
if (t->TokInfo == (CELL)NIL) {
return CodeSpaceError(t, p, l);
}
- Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
+ Free(TokImage);
t->Tok = Ord(kind = Name_tok);
if (ch == '(')
solo_flag = false;
@@ -1854,11 +1761,11 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
break;
case SL: {
- char chs[2];
+ unsigned char chs[2];
chs[0] = ch;
chs[1] = '\0';
ch = getchr(inp_stream);
- t->TokInfo = Unsigned(Yap_LookupAtom(chs));
+ t->TokInfo = MkAtomTerm(Yap_ULookupAtom(chs));
t->Tok = Ord(kind = Name_tok);
if (ch == '(')
solo_flag = FALSE;
@@ -1867,19 +1774,25 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
case BK:
och = ch;
ch = getchr(inp_stream);
- t->TokInfo = och;
+ {
+ unsigned char chs[10];
+ TokImage = charp = chs;
+ add_ch_to_buff(och);
+ charp[0] = '\0';
+ t->TokInfo = MkAtomTerm(Yap_ULookupAtom(chs));
+ }
if (och == '(') {
while (chtype(ch) == BS) {
ch = getchr(inp_stream);
- };
+ }
if (ch == ')') {
- t->TokInfo = Unsigned(AtomEmptyBrackets);
+ t->TokInfo = TermEmptyBrackets;
t->Tok = Ord(kind = Name_tok);
ch = getchr(inp_stream);
solo_flag = FALSE;
break;
} else if (!solo_flag) {
- t->TokInfo = 'l';
+ t->TokInfo = Terml;
solo_flag = TRUE;
}
} else if (och == '[') {
@@ -1887,7 +1800,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
ch = getchr(inp_stream);
};
if (ch == ']') {
- t->TokInfo = Unsigned(AtomNil);
+ t->TokInfo = TermNil;
t->Tok = Ord(kind = Name_tok);
ch = getchr(inp_stream);
solo_flag = FALSE;
@@ -1931,7 +1844,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
ch = getchr(inp_stream);
};
if (ch == '}') {
- t->TokInfo = Unsigned(AtomBraces);
+ t->TokInfo = TermBraces;
t->Tok = Ord(kind = Name_tok);
ch = getchr(inp_stream);
solo_flag = FALSE;
@@ -1960,12 +1873,11 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
qq->mid.charno = inp_stream->charcount - 1;
t->Tok = Ord(kind = QuasiQuotes_tok);
ch = getchr(inp_stream);
-
- TokImage = Yap_PreAllocCodeSpace();
+ sz = 1024;
+ TokImage = Malloc(sz);
if (!TokImage) {
LOCAL_ErrorMessage =
"not enough heap space to read in a quasi quoted atom";
- Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
t->Tok = Ord(kind = eot_tok);
t->TokInfo = TermError;
return l;
@@ -1974,35 +1886,34 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
quote = ch;
len = 0;
ch = getchrq(inp_stream);
- wcharp = NULL;
while (TRUE) {
if (ch == '|') {
ch = getchrq(inp_stream);
if (ch != '}') {
} else {
- charp = (char *)put_utf8((unsigned char *)charp, och);
- charp = (char *)put_utf8((unsigned char *)charp, ch);
+ charp += put_utf8((unsigned char *)charp, och);
+ charp += put_utf8((unsigned char *)charp, ch);
/* we're done */
break;
}
} else if (chtype(ch) == EF) {
- Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
+ Free(TokImage);
mark_eof(inp_stream);
t->Tok = Ord(kind = eot_tok);
t->TokInfo = TermOutOfHeapError;
break;
} else {
- charp = (char *)put_utf8((unsigned char *)charp, ch);
+ charp += put_utf8(charp, ch);
ch = getchrq(inp_stream);
}
- if (charp > (char *)AuxSp - 1024) {
+ if (charp > (unsigned char *)AuxSp - 1024) {
/* Not enough space to read in the string. */
return AuxSpaceError(
t, l, "not enough space to read in string or quoted atom");
}
}
- len = charp - TokImage;
+ len = charp - (unsigned char *)TokImage;
mp = malloc(len + 1);
if (mp == NULL) {
LOCAL_ErrorMessage = "not enough heap space to read in quasi quote";
@@ -2011,7 +1922,7 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
t->TokInfo = TermOutOfHeapError;
return l;
}
- strncpy(mp, TokImage, len + 1);
+ strncpy((char *)mp, (const char *)TokImage, len + 1);
qq->text = (unsigned char *)mp;
Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage);
if (inp_stream->status & Seekable_Stream_f) {
@@ -2046,13 +1957,6 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
t->Tok = Ord(kind = eot_tok);
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) {
/* insert an error token to inform the system of what happened */
TokEntry *e = (TokEntry *)AllocScannerMemory(sizeof(TokEntry));
@@ -2072,12 +1976,10 @@ TokEntry *Yap_tokenizer(struct stream_desc *inp_stream, bool store_comments,
return (l);
}
-int vsc_count;
-
void Yap_clean_tokenizer(TokEntry *tokstart, VarEntry *vartable,
VarEntry *anonvartable) {
CACHE_REGS
- struct scanner_extra_alloc *ptr = LOCAL_ScannerExtraBlocks;
+ struct scanner_extra_alloc *ptr = LOCAL_ScannerExtraBlocks;
while (ptr) {
struct scanner_extra_alloc *next = ptr->next;
free(ptr);
diff --git a/C/signals.c b/C/signals.c
index 9fe5c8d60..cdc3f36cd 100755
--- a/C/signals.c
+++ b/C/signals.c
@@ -25,18 +25,18 @@ static char SccsId[] = "%W% %G%";
#include
#endif
#if _WIN32
-#include
#include
+#include
#endif
-#include "Yatom.h"
#include "YapHeap.h"
+#include "Yatom.h"
#include "eval.h"
#include "yapio.h"
#ifdef TABLING
#include "tab.macros.h"
#endif /* TABLING */
-#include
#include
+#include
#if HAVE_STRING_H
#include
#endif
@@ -63,7 +63,11 @@ static yap_signals InteractSIGINT(int ch) {
#endif
switch (ch) {
case 'a':
- /* abort computation */
+/* abort computation */
+#if PUSH_REGS
+// restore_absmi_regs(&Yap_standard_regs);
+#endif
+ siglongjmp(LOCAL_RestartEnv, 4);
return YAP_ABORT_SIGNAL;
case 'b':
/* continue */
@@ -183,35 +187,32 @@ inline static bool get_signal(yap_signals sig USES_REGS) {
#endif
}
-bool Yap_DisableInterrupts(int wid)
-{
+bool Yap_DisableInterrupts(int wid) {
LOCAL_InterruptsDisabled = true;
YAPEnterCriticalSection();
return true;
}
-bool Yap_EnableInterrupts(int wid)
-{
+bool Yap_EnableInterrupts(int wid) {
LOCAL_InterruptsDisabled = false;
YAPLeaveCriticalSection();
return true;
}
-
/**
Function called to handle delayed interrupts.
*/
-int Yap_HandleInterrupts(void) {
+bool Yap_HandleSIGINT(void) {
CACHE_REGS
yap_signals sig;
- if (get_signal(YAP_INT_SIGNAL PASS_REGS)) {
+ do {
if ((sig = ProcessSIGINT()) != YAP_NO_SIGNAL)
do_signal(worker_id, sig PASS_REGS);
LOCAL_PrologMode &= ~InterruptMode;
- return 1;
- }
- return 0;
+ return true;
+ } while (get_signal(YAP_INT_SIGNAL PASS_REGS));
+ return false;
}
static Int p_creep(USES_REGS1) {
diff --git a/C/stack.c b/C/stack.c
index 21a5ef335..e8a6ec09e 100644
--- a/C/stack.c
+++ b/C/stack.c
@@ -1074,40 +1074,40 @@ bool set_clause_info(yamop *codeptr, PredEntry *pp) {
Term ts[2];
void *begin;
if (pp->ArityOfPE == 0) {
- LOCAL_ActiveError.prologPredName = (Atom)pp->FunctorOfPred;
- LOCAL_ActiveError.prologPredArity = 0;
+ LOCAL_ActiveError->prologPredName = (Atom)pp->FunctorOfPred;
+ LOCAL_ActiveError->prologPredArity = 0;
} else {
- LOCAL_ActiveError.prologPredName = NameOfFunctor(pp->FunctorOfPred);
- LOCAL_ActiveError.prologPredArity = pp->ArityOfPE;
+ LOCAL_ActiveError->prologPredName = NameOfFunctor(pp->FunctorOfPred);
+ LOCAL_ActiveError->prologPredArity = pp->ArityOfPE;
}
- LOCAL_ActiveError.prologPredModule =
+ LOCAL_ActiveError->prologPredModule =
(pp->ModuleOfPred ? pp->ModuleOfPred : TermProlog);
- LOCAL_ActiveError.prologPredFile = pp->src.OwnerFile;
+ LOCAL_ActiveError->prologPredFile = pp->src.OwnerFile;
if (codeptr->opc == UNDEF_OPCODE) {
- LOCAL_ActiveError.prologPredFirstLine = 0;
- LOCAL_ActiveError.prologPredLine = 0;
- LOCAL_ActiveError.prologPredLastLine = 0;
+ LOCAL_ActiveError->prologPredFirstLine = 0;
+ LOCAL_ActiveError->prologPredLine = 0;
+ LOCAL_ActiveError->prologPredLastLine = 0;
return true;
} else if (pp->cs.p_code.NOfClauses) {
- if ((LOCAL_ActiveError.prologPredCl =
+ if ((LOCAL_ActiveError->prologPredCl =
find_code_in_clause(pp, codeptr, &begin, NULL)) <= 0) {
- LOCAL_ActiveError.prologPredLine = 0;
+ LOCAL_ActiveError->prologPredLine = 0;
} else {
- LOCAL_ActiveError.prologPredLine = IntegerOfTerm(clause_loc(begin, pp));
+ LOCAL_ActiveError->prologPredLine = IntegerOfTerm(clause_loc(begin, pp));
}
if (pp->PredFlags & LogUpdatePredFlag) {
- LOCAL_ActiveError.prologPredFirstLine = IntegerOfTerm(
+ LOCAL_ActiveError->prologPredFirstLine = IntegerOfTerm(
ts[0] = clause_loc(
ClauseCodeToLogUpdClause(pp->cs.p_code.FirstClause), pp));
- LOCAL_ActiveError.prologPredLastLine = IntegerOfTerm(
+ LOCAL_ActiveError->prologPredLastLine = IntegerOfTerm(
ts[1] = clause_loc(ClauseCodeToLogUpdClause(pp->cs.p_code.LastClause),
pp));
} else {
- LOCAL_ActiveError.prologPredFirstLine = IntegerOfTerm(
+ LOCAL_ActiveError->prologPredFirstLine = IntegerOfTerm(
ts[0] = clause_loc(
ClauseCodeToStaticClause(pp->cs.p_code.FirstClause), pp));
- LOCAL_ActiveError.prologPredLastLine = IntegerOfTerm(
+ LOCAL_ActiveError->prologPredLastLine = IntegerOfTerm(
ts[1] = clause_loc(ClauseCodeToStaticClause(pp->cs.p_code.LastClause),
pp));
}
diff --git a/C/stdpreds.c b/C/stdpreds.c
index c912c0147..e62665634 100755
--- a/C/stdpreds.c
+++ b/C/stdpreds.c
@@ -1099,24 +1099,25 @@ void Yap_show_statistics(void) {
#endif
frag = (100.0 * (heap_space_taken - HeapUsed)) / heap_space_taken;
- fprintf(stderr, "Code Space: %ld (%ld bytes needed, %ld bytes used, "
+ fprintf(stderr, "Code Space: " UInt_FORMAT " (" UInt_FORMAT
+ " bytes needed, " UInt_FORMAT " bytes used, "
"fragmentation %.3f%%).\n",
- (unsigned long int)(Unsigned(H0) - Unsigned(Yap_HeapBase)),
- (unsigned long int)(Unsigned(HeapTop) - Unsigned(Yap_HeapBase)),
- (unsigned long int)(HeapUsed), frag);
- fprintf(stderr, "Stack Space: %ld (%ld for Global, %ld for local).\n",
- (unsigned long int)(sizeof(CELL) * (LCL0 - H0)),
- (unsigned long int)(sizeof(CELL) * (HR - H0)),
- (unsigned long int)(sizeof(CELL) * (LCL0 - ASP)));
- fprintf(stderr, "Trail Space: %ld (%ld used).\n",
- (unsigned long int)(sizeof(tr_fr_ptr) * (Unsigned(LOCAL_TrailTop) -
- Unsigned(LOCAL_TrailBase))),
- (unsigned long int)(sizeof(tr_fr_ptr) *
- (Unsigned(TR) - Unsigned(LOCAL_TrailBase))));
- fprintf(stderr, "Runtime: %lds.\n", (unsigned long int)(runtime(PASS_REGS1)));
- fprintf(stderr, "Cputime: %lds.\n", (unsigned long int)(Yap_cputime()));
+ Unsigned(H0) - Unsigned(Yap_HeapBase),
+ Unsigned(HeapTop) - Unsigned(Yap_HeapBase), Unsigned(HeapUsed), frag);
+ fprintf(stderr, "Stack Space: " UInt_FORMAT " (" UInt_FORMAT
+ " for Global, " UInt_FORMAT " for local).\n",
+ Unsigned(sizeof(CELL) * (LCL0 - H0)),
+ Unsigned(sizeof(CELL) * (HR - H0)),
+ Unsigned(sizeof(CELL) * (LCL0 - ASP)));
+ fprintf(
+ stderr, "Trail Space: " UInt_FORMAT " (" UInt_FORMAT " used).\n",
+ Unsigned(sizeof(tr_fr_ptr) *
+ (Unsigned(LOCAL_TrailTop) - Unsigned(LOCAL_TrailBase))),
+ Unsigned(sizeof(tr_fr_ptr) * (Unsigned(TR) - Unsigned(LOCAL_TrailBase))));
+ fprintf(stderr, "Runtime: " UInt_FORMAT "\n", runtime(PASS_REGS1));
+ fprintf(stderr, "Cputime: " UInt_FORMAT "\n", Yap_cputime());
- fprintf(stderr, "Walltime: " UInt_F ".\n", (UInt)(Yap_walltime() / 1000));
+ fprintf(stderr, "Walltime: %" PRIu64 ".\n", Yap_walltime() / (UInt)1000);
}
static Int p_statistics_heap_max(USES_REGS1) {
diff --git a/C/text.c b/C/text.c
index 08e523b03..648ca6c2a 100644
--- a/C/text.c
+++ b/C/text.c
@@ -35,77 +35,138 @@ inline static size_t min_size(size_t i, size_t j) { return (i < j ? i : j); }
#define NAN (0.0 / 0.0)
#endif
-#define MAX_PATHNAME 2048
+#define MAX_PATHNAME 2048
+struct mblock {
+ struct mblock *prev, *next;
+ int lvl;
+ size_t sz;
+};
typedef struct TextBuffer_manager {
void *buf, *ptr;
size_t sz;
- struct TextBuffer_manager *prev;
+ struct mblock *first[16];
+ struct mblock *last[16];
int lvl;
} text_buffer_t;
-int lvl;
+int push_text_stack(USES_REGS1) { return LOCAL_TextBuffer->lvl++; }
-/**
- * TextBuffer is allocated as a chain of blocks, They area
- * recovered at the end if the translation.
- */
-INLINE_ONLY inline int init_alloc(int line) {
- // printf("l=%d\n",lvl);
- if (lvl )
- return;
- while (LOCAL_TextBuffer->prev ) {
- struct TextBuffer_manager *old = LOCAL_TextBuffer;
- LOCAL_TextBuffer = LOCAL_TextBuffer->prev;
- free(old);
+int pop_text_stack(int i) {
+ int lvl = LOCAL_TextBuffer->lvl;
+ while (lvl > i) {
+ struct mblock *p = LOCAL_TextBuffer->first[lvl];
+ while (p) {
+ struct mblock *np = p->next;
+ free(p);
+ p = np;
+ }
+ LOCAL_TextBuffer->first[lvl] = NULL;
+ LOCAL_TextBuffer->last[lvl] = NULL;
+ lvl--;
}
- LOCAL_TextBuffer->sz = (YAP_FILENAME_MAX + 1);
- LOCAL_TextBuffer->buf = LOCAL_TextBuffer->ptr = (void *)(LOCAL_TextBuffer + 1 );
- return lvl++;
-}
-
-INLINE_ONLY inline int mark_stack(void) {
-return lvl; }
-
-INLINE_ONLY inline void restore_stack(int i ) {lvl = i;} \
-INLINE_ONLY inline void unprotect_stack(int i) {
-lvl = i;}
-
-static void *Malloc(size_t sz USES_REGS) {
- sz = ALIGN_BY_TYPE(sz, CELL);
- void *o = LOCAL_TextBuffer->ptr;
- if ((char*)LOCAL_TextBuffer->ptr+sz>(char*)LOCAL_TextBuffer->buf + LOCAL_TextBuffer->sz) {
- size_t nsz = max(sz*4/3,YAP_FILENAME_MAX + 1);
- struct TextBuffer_manager *new = malloc(sizeof(struct TextBuffer_manager)+nsz);
- new->prev = LOCAL_TextBuffer;
- new->buf = (struct TextBuffer_manager *)new+1;
- new->ptr = new->buf + sz;
- new->sz = nsz;
- LOCAL_TextBuffer= new;
- return new->buf;
- }
- LOCAL_TextBuffer->ptr += sz;
- return o;
+ LOCAL_TextBuffer->lvl = lvl;
+ return lvl;
}
- void *Yap_InitTextAllocator( void )
-{
- struct TextBuffer_manager *new = malloc(sizeof(struct TextBuffer_manager)\
- +MAX_PATHNAME*2 );
- new->prev = NULL;
- new->ptr = new->buf = (struct TextBuffer_manager *)new+1;
- new->sz = MAX_PATHNAME*2;
- LOCAL_TextBuffer = new;
- new->lvl = 0;
- return new;
+void *protected_pop_text_stack(int i, void *protected, bool tmp,
+ size_t sz USES_REGS) {
+ void *out = protected;
+ int lvl = LOCAL_TextBuffer->lvl;
+ while (lvl > i) {
+ struct mblock *p = LOCAL_TextBuffer->first[lvl];
+ while (p) {
+ struct mblock *np = p->next;
+ if (p + 1 == protected) {
+ if (tmp)
+ out = LOCAL_FileNameBuf;
+ else
+ out = p;
+ memcpy(out, protected, sz);
+ } else {
+ free(p);
+ }
+ p = np;
+ }
+ LOCAL_TextBuffer->first[lvl] = NULL;
+ LOCAL_TextBuffer->last[lvl] = NULL;
+ lvl--;
+ }
+ LOCAL_TextBuffer->lvl = lvl;
+ return out;
}
+// void pop_text_stack(int i) { LOCAL_TextBuffer->lvl = i; }
+void *Malloc(size_t sz USES_REGS) {
+ int lvl = LOCAL_TextBuffer->lvl;
+ if (sz == 0)
+ sz = 1024;
+ sz = ALIGN_BY_TYPE(sz + sizeof(struct mblock), CELL);
+ struct mblock *o = malloc(sz);
+ o->prev = LOCAL_TextBuffer->last[lvl];
+ if (o->prev) {
+ o->prev->next = o;
+ }
+ if (LOCAL_TextBuffer->first[lvl]) {
+ LOCAL_TextBuffer->last[lvl] = o;
+ } else {
+ LOCAL_TextBuffer->first[lvl] = LOCAL_TextBuffer->last[lvl] = o;
+ }
+ o->next = NULL;
+ o->sz = sz;
+ o->lvl = lvl;
+ return o + 1;
+}
+
+void *Realloc(void *pt, size_t sz USES_REGS) {
+ sz = ALIGN_BY_TYPE(sz + sizeof(struct mblock), CELL);
+ struct mblock *old = pt, *o;
+ old--;
+ int lvl = old->lvl;
+ o = realloc(old, sz);
+ if (o->prev)
+ o->prev->next = o;
+ if (o->next)
+ o->next->prev = o;
+ if (LOCAL_TextBuffer->first[lvl] == old) {
+ LOCAL_TextBuffer->first[lvl] = o;
+ }
+ if (LOCAL_TextBuffer->last[lvl] == old) {
+ LOCAL_TextBuffer->last[lvl] = o;
+ }
+ return o + 1;
+}
+
+void Free(void *pt USES_REGS) {
+ struct mblock *o = pt;
+ o--;
+ if (o->prev)
+ o->prev->next = o->next;
+ if (o->next)
+ o->next->prev = o->prev;
+ int lvl = o->lvl;
+ if (LOCAL_TextBuffer->first[lvl] == o) {
+ if (LOCAL_TextBuffer->last[lvl] == o) {
+ LOCAL_TextBuffer->first[lvl] = LOCAL_TextBuffer->last[lvl] = NULL;
+ }
+ LOCAL_TextBuffer->first[lvl] = o->next;
+ } else if (LOCAL_TextBuffer->last[lvl] == o) {
+ LOCAL_TextBuffer->last[lvl] = o->prev;
+ }
+ free(o);
+}
+
+void *Yap_InitTextAllocator(void) {
+ struct TextBuffer_manager *new = calloc(sizeof(struct TextBuffer_manager), 1);
+ return new;
+}
static size_t MaxTmp(USES_REGS1) {
- return ((char*)LOCAL_TextBuffer->buf + LOCAL_TextBuffer->sz) - (char*)LOCAL_TextBuffer->ptr;
+ return ((char *)LOCAL_TextBuffer->buf + LOCAL_TextBuffer->sz) -
+ (char *)LOCAL_TextBuffer->ptr;
}
static Term Globalize(Term v USES_REGS) {
@@ -170,15 +231,7 @@ static Int SkipListCodes(unsigned char **bufp, Term *l, Term **tailp,
(*atoms)++;
if (*atoms < length) {
*tailp = l;
- return -TYPE_ERROR_NUMBER;
- }
- if (IsWideAtom(AtomOfTerm(hd))) {
- int ch;
- if ((RepAtom(AtomOfTerm(hd))->WStrOfAE)[1] != '\0') {
- length = -REPRESENTATION_ERROR_CHARACTER;
- }
- ch = RepAtom(AtomOfTerm(hd))->WStrOfAE[0];
- *wide = true;
+ return -REPRESENTATION_ERROR_CHARACTER_CODE;
} else {
AtomEntry *ae = RepAtom(AtomOfTerm(hd));
if ((ae->StrOfAE)[1] != '\0') {
@@ -191,10 +244,10 @@ static Int SkipListCodes(unsigned char **bufp, Term *l, Term **tailp,
} else if (IsIntegerTerm(hd)) {
ch = IntegerOfTerm(hd);
if (*atoms)
- length = -TYPE_ERROR_ATOM;
+ length = -REPRESENTATION_ERROR_CHARACTER;
else if (ch < 0) {
*tailp = l;
- length = -DOMAIN_ERROR_NOT_LESS_THAN_ZERO;
+ length = -REPRESENTATION_ERROR_CHARACTER_CODE;
} else {
*wide |= ch > 0x80;
}
@@ -276,7 +329,6 @@ static unsigned char *to_buffer(unsigned char *buf, Term t, seq_tv_t *inp,
n = SkipListCodes(&bufc, &t, &r, atoms, widep, inp PASS_REGS);
if (n < 0) {
LOCAL_Error_TYPE = -n;
- LOCAL_Error_Term = *r;
return NULL;
}
*lenp = n;
@@ -350,7 +402,6 @@ unsigned char *Yap_readText(seq_tv_t *inp, size_t *lengp) {
YAP_STRING_BIG)) == inp->type) {
LOCAL_Error_TYPE = TYPE_ERROR_NUMBER;
}
- LOCAL_Error_Term = inp->val.t;
}
}
if (LOCAL_Error_TYPE != YAP_NO_ERROR)
@@ -360,37 +411,32 @@ unsigned char *Yap_readText(seq_tv_t *inp, size_t *lengp) {
// this is a term, extract to a buffer, and representation is wide
// Yap_DebugPlWriteln(inp->val.t);
Atom at = AtomOfTerm(inp->val.t);
- if (IsWideAtom(at)) {
- inp->val.w = at->WStrOfAE;
- return wchar2utf8(inp, lengp);
- } else {
- inp->val.c = at->StrOfAE;
- return latin2utf8(inp, lengp);
- }
+ if (lengp)
+ *lengp = strlen_utf8(at->UStrOfAE);
+ return at->UStrOfAE;
}
if (IsStringTerm(inp->val.t) && inp->type & YAP_STRING_STRING) {
// this is a term, extract to a buffer, and representation is wide
// Yap_DebugPlWriteln(inp->val.t);
+ if (lengp)
+ *lengp = strlen_utf8(UStringOfTerm(inp->val.t));
return (unsigned char *)UStringOfTerm(inp->val.t);
}
if (((inp->type & (YAP_STRING_CODES | YAP_STRING_ATOMS)) ==
(YAP_STRING_CODES | YAP_STRING_ATOMS)) &&
IsPairOrNilTerm(inp->val.t)) {
// Yap_DebugPlWriteln(inp->val.t);
- return inp->val.uc =
- Yap_ListToBuffer(s0, inp->val.t, inp, &wide, lengp PASS_REGS);
+ return Yap_ListToBuffer(s0, inp->val.t, inp, &wide, lengp PASS_REGS);
// this is a term, extract to a sfer, and representation is wide
}
if (inp->type & YAP_STRING_CODES && IsPairOrNilTerm(inp->val.t)) {
// Yap_DebugPlWriteln(inp->val.t);
- return inp->val.uc = Yap_ListOfCodesToBuffer(s0, inp->val.t, inp, &wide,
- lengp PASS_REGS);
+ return Yap_ListOfCodesToBuffer(s0, inp->val.t, inp, &wide, lengp PASS_REGS);
// this is a term, extract to a sfer, and representation is wide
}
if (inp->type & YAP_STRING_ATOMS && IsPairOrNilTerm(inp->val.t)) {
// Yap_DebugPlWriteln(inp->val.t);
- return inp->val.uc = Yap_ListOfAtomsToBuffer(s0, inp->val.t, inp, &wide,
- lengp PASS_REGS);
+ return Yap_ListOfAtomsToBuffer(s0, inp->val.t, inp, &wide, lengp PASS_REGS);
// this is a term, extract to a buffer, and representation is wide
}
if (inp->type & YAP_STRING_INT && IsIntegerTerm(inp->val.t)) {
@@ -406,22 +452,27 @@ unsigned char *Yap_readText(seq_tv_t *inp, size_t *lengp) {
AUX_ERROR(inp->val.t, 2 * MaxTmp(PASS_REGS1), s, char);
}
*lengp = strlen(s);
- Malloc(*lengp);
- return inp->val.uc = (unsigned char *)s;
+ return (unsigned char *)s;
}
if (inp->type & YAP_STRING_FLOAT && IsFloatTerm(inp->val.t)) {
char *s;
+ size_t sz = 1024;
// Yap_DebugPlWriteln(inp->val.t);
- if (s0)
+ if (s0) {
s = (char *)s0;
- else
- s = Malloc(0);
- AUX_ERROR(inp->val.t, MaxTmp(PASS_REGS1), s, char);
- if (!Yap_FormatFloat(FloatOfTerm(inp->val.t), &s, MaxTmp() - 1)) {
- AUX_ERROR(inp->val.t, 2 * MaxTmp(PASS_REGS1), s, char);
+ sz = strlen(s);
+ } else
+ s = Malloc(sz);
+ if (!s)
+ AUX_ERROR(inp->val.t, MaxTmp(PASS_REGS1), s, char);
+ while (!Yap_FormatFloat(FloatOfTerm(inp->val.t), &s, sz - 1)) {
+ if (s0) {
+ s = Malloc(sz = 1024);
+ s0 = NULL;
+ } else
+ s = Realloc(s, sz + 1024);
}
*lengp = strlen(s);
- Malloc(*lengp);
return inp->val.uc = (unsigned char *)s;
}
#if USE_GMP
@@ -526,19 +577,20 @@ static Term write_atoms(void *s0, seq_tv_t *out, size_t leng USES_REGS) {
unsigned char *s = s0, *lim = s + strnlen((char *)s, max);
unsigned char *cp = s;
- wchar_t w[2];
- w[1] = '\0';
+ unsigned char w[10], *wp = w;
LOCAL_TERM_ERROR(t, 2 * (lim - s));
while (cp < lim && *cp) {
utf8proc_int32_t chr;
CELL *cl;
- cp += get_utf8(cp, -1, &chr);
- if (chr == '\0')
+ s += get_utf8(s, 1, &chr);
+ if (chr == '\0') {
+ wp[0] = '\0';
break;
- w[0] = chr;
+ }
+ wp += put_utf8(w, chr);
cl = HR;
HR += 2;
- cl[0] = MkAtomTerm(Yap_LookupMaybeWideAtom(w));
+ cl[0] = MkAtomTerm(Yap_ULookupAtom(w));
cl[1] = AbsPair(HR);
sz++;
if (sz == max)
@@ -574,8 +626,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 *cp = s;
- wchar_t w[2];
- w[1] = '\0';
+
LOCAL_TERM_ERROR(t, 2 * (lim - s));
while (*cp) {
utf8proc_int32_t chr;
@@ -607,34 +658,18 @@ 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) {
- {
- unsigned char *s = s0;
- utf8proc_int32_t chr;
- while (*s && get_utf8(s, -1, &chr) == 1)
- s++;
- if (*s == '\0')
- return out->val.a = Yap_LookupAtom((char *)s0);
- s = s0;
- size_t l = strlen(s0);
- wchar_t *wbuf = Malloc(sizeof(wchar_t) * ((l + 1))), *wptr = wbuf;
- Atom at;
- if (!wbuf)
- return NULL;
- while (*s) {
- utf8proc_int32_t chr;
- int off = get_utf8(s, -1, &chr);
- if (off < 0) {
- s++;
- continue;
- }
- s++;
- *wptr++ = chr;
- }
- *wptr++ = '\0';
-
- at = Yap_LookupMaybeWideAtom(wbuf);
- out->val.a = at;
- return at;
+ unsigned char *s = s0;
+ int32_t ch;
+ if (leng == 0) {
+ return Yap_LookupAtom("");
+ }
+ if (strlen_utf8(s0) <= leng) {
+ return Yap_LookupAtom(s0);
+ } else {
+ size_t n = get_utf8(s, 1, &ch);
+ unsigned char *buf = Malloc(n + 1);
+ memcpy(buf, s0, n + 1);
+ return Yap_ULookupAtom(buf);
}
}
@@ -711,31 +746,34 @@ static size_t write_length(const unsigned char *s0, seq_tv_t *out,
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;
- int i = mark_stack();
- t = Yap_StringToNumberTerm((char *)s, &out->enc);
- restore_stack(i);
+ int i = push_text_stack();
+ t = Yap_StringToNumberTerm((char *)s, &out->enc, error_on);
+ pop_text_stack(i);
return t;
}
static Term string_to_term(void *s, seq_tv_t *out, size_t leng USES_REGS) {
Term o;
- int i = mark_stack();
- o = out->val.t =
- Yap_StringToTerm(s, strlen(s) + 1, &out->enc, GLOBAL_MaxPriority, NULL);
- restore_stack(i);
+ o = out->val.t = Yap_BufferToTerm(s, strlen(s) + 1, TermNil);
return o;
}
bool write_Text(unsigned char *inp, seq_tv_t *out, size_t leng USES_REGS) {
/* we know what the term is */
+ if (out->type == 0) {
+ return true;
+ }
+
if (out->type & YAP_STRING_TERM) {
if ((out->val.t = string_to_term(inp, out, leng PASS_REGS)) != 0L)
return out->val.t != 0;
}
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);
return true;
@@ -745,7 +783,7 @@ bool write_Text(unsigned char *inp, seq_tv_t *out, size_t leng USES_REGS) {
return false;
}
if (out->type & (YAP_STRING_ATOM)) {
- if (write_atom(inp, out, leng PASS_REGS) != NIL) {
+ if ((out->val.a = write_atom(inp, out, leng PASS_REGS)) != NIL) {
Atom at = out->val.a;
if (at && (out->type & YAP_STRING_OUTPUT_TERM))
out->val.t = MkAtomTerm(at);
@@ -786,10 +824,10 @@ bool write_Text(unsigned char *inp, seq_tv_t *out, size_t leng USES_REGS) {
// Yap_DebugPlWriteln(out->val.t);
return out->val.a != NULL;
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);
return out->val.t != 0;
- default: {}
+ default: { return true; }
}
return false;
}
@@ -825,9 +863,8 @@ bool Yap_CVT_Text(seq_tv_t *inp, seq_tv_t *out USES_REGS) {
bool rc;
size_t leng;
- int l = init_alloc(__LINE__);
/*
- f//printf(stderr, "[ %d ", n++) ;
+ f//printfmark(stderr, "[ %d ", n++) ;
if (inp->type & (YAP_STRING_TERM|YAP_STRING_ATOM|YAP_STRING_ATOMS_CODES
|YAP_STRING_STRING))
//Yap_DebugPlWriteln(inp->val.t);
@@ -850,26 +887,22 @@ bool Yap_CVT_Text(seq_tv_t *inp, seq_tv_t *out USES_REGS) {
}
if (!buf) {
- unprotect_stack(0);
return 0L;
}
if (out->type & (YAP_STRING_UPCASE | YAP_STRING_DOWNCASE)) {
if (out->type & YAP_STRING_UPCASE) {
if (!upcase(buf, out)) {
- unprotect_stack(0);
return false;
}
}
if (out->type & YAP_STRING_DOWNCASE) {
if (!downcase(buf, out)) {
- unprotect_stack(0);
return false;
}
}
}
rc = write_Text(buf, out, leng PASS_REGS);
- unprotect_stack(l);
/* fprintf(stderr, " -> ");
if (!rc) fprintf(stderr, "NULL");
else if (out->type &
@@ -899,8 +932,8 @@ static int cmp_Text(const unsigned char *s1, const unsigned char *s2, int l) {
return 0;
}
-static unsigned char *concat(int n, unsigned char *sv[] USES_REGS) {
- char *buf;
+static unsigned char *concat(int n, void *sv[] USES_REGS) {
+ void *buf;
unsigned char *buf0;
size_t room = 0;
int i;
@@ -909,11 +942,14 @@ static unsigned char *concat(int n, unsigned char *sv[] USES_REGS) {
room += strlen((char *)sv[i]);
}
buf = Malloc(room + 1);
- buf0 = (unsigned char *)buf;
+ buf0 = buf;
for (i = 0; i < n; i++) {
- char *s = (char *)sv[i];
- buf = strcpy(buf, s);
- buf += strlen(s);
+#if _WIN32 || defined(__ANDROID__)
+ strcpy(buf, sv[i]);
+ buf = (char *)buf + strlen(buf);
+#else
+ buf = stpcpy(buf, sv[i]);
+#endif
}
return buf0;
}
@@ -935,14 +971,13 @@ static void *slice(size_t min, size_t max, unsigned char *buf USES_REGS) {
//
// Out must be an atom or a string
bool Yap_Concat_Text(int tot, seq_tv_t inp[], seq_tv_t *out USES_REGS) {
- unsigned char **bufv;
+ void **bufv;
unsigned char *buf;
- size_t leng;
int i;
- int l = init_alloc(__LINE__);
+ size_t leng;
+
bufv = Malloc(tot * sizeof(unsigned char *));
if (!bufv) {
- unprotect_stack(0);
return NULL;
}
for (i = 0; i < tot; i++) {
@@ -950,14 +985,12 @@ bool Yap_Concat_Text(int tot, seq_tv_t inp[], seq_tv_t *out USES_REGS) {
unsigned char *nbuf = Yap_readText(inp + i, &leng PASS_REGS);
if (!nbuf) {
- unprotect_stack(0);
return NULL;
}
bufv[i] = nbuf;
}
buf = concat(tot, bufv PASS_REGS);
- bool rc = write_Text(buf, out, leng PASS_REGS);
- unprotect_stack(l);
+ bool rc = write_Text(buf, out, strlen_utf8(buf) PASS_REGS);
return rc;
}
@@ -965,12 +998,11 @@ bool Yap_Concat_Text(int tot, seq_tv_t inp[], seq_tv_t *out USES_REGS) {
bool Yap_Splice_Text(int n, size_t cuts[], seq_tv_t *inp,
seq_tv_t outv[] USES_REGS) {
unsigned char *buf;
- int l = init_alloc(__LINE__);
+ size_t l;
+
inp->type |= YAP_STRING_IN_TMP;
buf = Yap_readText(inp, &l PASS_REGS);
if (!buf) {
- unprotect_stack(0);
-
return false;
}
if (!cuts) {
@@ -981,11 +1013,9 @@ bool Yap_Splice_Text(int n, size_t cuts[], seq_tv_t *inp,
if (outv[0].val.t) {
buf0 = Yap_readText(outv, &l0 PASS_REGS);
if (!buf0) {
- unprotect_stack(0);
return false;
}
if (cmp_Text(buf, buf0, l0) != 0) {
- unprotect_stack(0);
return false;
}
l1 = l - l0;
@@ -993,26 +1023,21 @@ bool Yap_Splice_Text(int n, size_t cuts[], seq_tv_t *inp,
buf1 = slice(l0, l, buf PASS_REGS);
bool rc = write_Text(buf1, outv + 1, l1 PASS_REGS);
if (!rc) {
- unprotect_stack(0);
return false;
}
- unprotect_stack(l);
return rc;
} else /* if (outv[1].val.t) */ {
buf1 = Yap_readText(outv + 1, &l1 PASS_REGS);
if (!buf1) {
- unprotect_stack(0);
return false;
}
l0 = l - l1;
if (cmp_Text(skip_utf8((const unsigned char *)buf, l0), buf1, l1) !=
0) {
- unprotect_stack(0);
return false;
}
buf0 = slice(0, l0, buf PASS_REGS);
bool rc = write_Text(buf0, outv, l0 PASS_REGS);
- unprotect_stack((rc ? 0 : l + 0));
return rc;
}
}
@@ -1023,20 +1048,20 @@ bool Yap_Splice_Text(int n, size_t cuts[], seq_tv_t *inp,
next = 0;
else
next = cuts[i - 1];
+ if (i > 0 && cuts[i] == 0)
+ break;
void *bufi = slice(next, cuts[i], buf PASS_REGS);
if (!write_Text(bufi, outv + i, cuts[i] - next PASS_REGS)) {
- unprotect_stack(0);
return false;
}
}
- unprotect_stack(l);
return true;
}
/**
* Function to convert a generic text term (string, atom, list of codes, list
-of
+of<
atoms) into a buff
er.
*
@@ -1055,10 +1080,7 @@ const char *Yap_TextTermToText(Term t, char *buf, size_t len, encoding_t enc) {
inp.val.t = t;
if (IsAtomTerm(t) && t != TermNil) {
inp.type = YAP_STRING_ATOM;
- if (IsWideAtom(AtomOfTerm(t)))
- inp.enc = ENC_WCHAR;
- else
- inp.enc = ENC_ISO_LATIN1;
+ inp.enc = ENC_ISO_UTF8;
} else if (IsStringTerm(t)) {
inp.type = YAP_STRING_STRING;
inp.enc = ENC_ISO_UTF8;
@@ -1090,7 +1112,7 @@ const char *Yap_TextTermToText(Term t, char *buf, size_t len, encoding_t enc) {
const char *Yap_PredIndicatorToUTF8String(PredEntry *ap) {
CACHE_REGS
Atom at;
- arity_t arity;
+ arity_t arity = 0;
Functor f;
char *s, *smax, *s0;
s = s0 = malloc(1024);
diff --git a/C/utilpreds.c b/C/utilpreds.c
index c6a1166e4..e537d93a9 100644
--- a/C/utilpreds.c
+++ b/C/utilpreds.c
@@ -799,22 +799,12 @@ Atom export_atom(Atom at, char **hpp, char *buf, size_t len)
ptr = (char *)AdjustSize((CELL*)ptr, buf);
p0 = ptr;
- if (IsWideAtom(at)) {
- wchar_t *wptr = (wchar_t *)ptr;
- *wptr++ = -1;
- sz = wcslen(RepAtom(at)->WStrOfAE);
- if (sizeof(wchar_t)*(sz+1) >= len)
- return (Atom)NULL;
- wcsncpy(wptr, RepAtom(at)->WStrOfAE, len);
- *hpp = (char *)(wptr+(sz+1));
- } else {
- *ptr++ = 0;
+ *ptr++ = 0;
sz = strlen(RepAtom(at)->StrOfAE);
- if (sz + 1 + sizeof(wchar_t) >= len)
+ if (sz + 1 >= len)
return (Atom)NULL;
strcpy(ptr, RepAtom(at)->StrOfAE);
*hpp = ptr+(sz+1);
- }
return (Atom)(p0-buf);
}
@@ -1179,10 +1169,8 @@ addAtom(Atom t, char *buf)
if (!*s) {
return Yap_LookupAtom(s+1);
- } else {
- wchar_t *w = (wchar_t *)s;
- return Yap_LookupWideAtom(w+1);
}
+ return NULL;
}
static UInt
@@ -3386,19 +3374,6 @@ addAtomToHash(CELL *st, Atom at)
{
unsigned int len;
- if (IsWideAtom(at)) {
- wchar_t *c = RepAtom(at)->WStrOfAE;
- int ulen = wcslen(c);
- len = ulen*sizeof(wchar_t);
- if (len % CellSize == 0) {
- len /= CellSize;
- } else {
- len /= CellSize;
- len++;
- }
- st[len-1] = 0L;
- wcsncpy((wchar_t *)st, c, ulen);
- } else {
char *c = RepAtom(at)->StrOfAE;
int ulen = strlen(c);
/* fix hashing over empty atom */
@@ -3413,7 +3388,6 @@ addAtomToHash(CELL *st, Atom at)
}
st[len-1] = 0L;
strncpy((char *)st, c, ulen);
- }
return st+len;
}
diff --git a/C/write.c b/C/write.c
index 04325ed0d..91064bdd7 100644
--- a/C/write.c
+++ b/C/write.c
@@ -187,12 +187,6 @@ inline static void wrputs(char *s, StreamDesc *stream) {
wrputc(c, stream);
}
-static void wrputws(wchar_t *s, wrf stream) /* writes a string */
-{
- while (*s)
- wrputc(*s++, stream);
-}
-
#ifdef USE_GMP
static char *ensure_space(size_t sz) {
@@ -571,9 +565,12 @@ static void write_string(const unsigned char *s,
qt = '"';
wrputc(qt, stream);
do {
- ptr += get_utf8(ptr, -1, &chr);
+ int delta;
+ ptr += (delta = get_utf8(ptr, -1, &chr) );
+
if (chr == '\0')
break;
+ if (delta == 0) {chr = *ptr++; }
write_quoted(chr, qt, stream);
} while (TRUE);
wrputc(qt, stream);
@@ -589,22 +586,7 @@ static void putAtom(Atom atom, int Quote_illegal, struct write_globs *wglb) {
wrputblob(RepAtom(atom), Quote_illegal, wglb);
return;
}
- if (IsWideAtom(atom)) {
- wchar_t *ws = RepAtom(atom)->WStrOfAE;
-
- if (Quote_illegal) {
- wrputc('\'', stream);
- while (*ws) {
- wchar_t ch = *ws++;
- write_quoted(ch, '\'', stream);
- }
- wrputc('\'', stream);
- } else {
- wrputws(ws, stream);
- }
- return;
- }
- s = (unsigned char *)RepAtom(atom)->StrOfAE;
+ s = RepAtom(atom)->UStrOfAE;
/* #define CRYPT_FOR_STEVE 1*/
#ifdef CRYPT_FOR_STEVE
if (Yap_GetValue(AtomCryptAtoms) != TermNil &&
@@ -624,7 +606,8 @@ static void putAtom(Atom atom, int Quote_illegal, struct write_globs *wglb) {
if (Quote_illegal && !legalAtom(s)) {
wrputc('\'', stream);
while (*s) {
- wchar_t ch = *s++;
+ int32_t ch;
+ s += get_utf8(s, 1, &ch);
write_quoted(ch, '\'', stream);
}
wrputc('\'', stream);
@@ -1032,7 +1015,7 @@ static void writeTerm(Term t, int p, int depth, int rinfixarg,
}
} else if (!wglb->Ignore_ops &&
(Arity == 1 ||
- ((atom == AtomEmptyBrackets || atom == AtomEmptyCurlyBrackets ||
+ ((atom == AtomEmptyBrackets || atom == AtomCurly ||
atom == AtomEmptySquareBrackets) &&
Yap_IsListTerm(ArgOfTerm(1, t)))) &&
Yap_IsPosfixOp(atom, &op, &lp)) {
@@ -1067,7 +1050,7 @@ static void writeTerm(Term t, int p, int depth, int rinfixarg,
wrputc('(', wglb->stream);
} else if (atom == AtomEmptySquareBrackets) {
wrputc('[', wglb->stream);
- } else if (atom == AtomEmptyCurlyBrackets) {
+ } else if (atom == AtomCurly) {
wrputc('{', wglb->stream);
}
lastw = separator;
@@ -1076,7 +1059,7 @@ static void writeTerm(Term t, int p, int depth, int rinfixarg,
wrputc(')', wglb->stream);
} else if (atom == AtomEmptySquareBrackets) {
wrputc(']', wglb->stream);
- } else if (atom == AtomEmptyCurlyBrackets) {
+ } else if (atom == AtomCurly) {
wrputc('}', wglb->stream);
}
lastw = separator;
diff --git a/C/yap-args.c b/C/yap-args.c
index 27af5bdce..7ec1cc274 100755
--- a/C/yap-args.c
+++ b/C/yap-args.c
@@ -369,8 +369,7 @@ X_API YAP_file_type_t YAP_parse_yap_arguments(int argc, char *argv[],
p++;
}
} else {
- YAP_SetOutputMessage();
-
+ YAP_SetOutputMessage();
}
break;
#endif
@@ -446,13 +445,13 @@ X_API YAP_file_type_t YAP_parse_yap_arguments(int argc, char *argv[],
break;
case 'n':
if (!strcmp("nosignals", p)) {
- iap->PrologShouldHandleInterrupts = FALSE;
+ iap->PrologCannotHandleInterrupts = true;
break;
}
break;
case '-':
if (!strcmp("-nosignals", p)) {
- iap->PrologShouldHandleInterrupts = FALSE;
+ iap->PrologCannotHandleInterrupts = true;
break;
} else if (!strncmp("-home=", p, strlen("-home="))) {
GLOBAL_Home = p + strlen("-home=");
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ebfd177ff..0887f25b7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,3 @@
-# Sets the minimum version of CMake required to build the native
-# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.
# Sets the minimum version of CMake required to build the native
@@ -8,15 +6,20 @@
project( YAP )
+if (ANDROID)
+ set(YAP_APP_DIR "${CMAKE_SOURCE_DIR}/../..")
+ cmake_policy(VERSION 3.4)
+
+else ()
cmake_minimum_required(VERSION 2.8)
-
-# cmake_policy(VERSION 3.4)
-
+include(CMakeToolsHelpers OPTIONAL)
+endif()
set(
- CMAKE_MODULE_PATH
- "${CMAKE_SOURCE_DIR}"
- "${CMAKE_SOURCE_DIR}/cmake")
+ CMAKE_MODULE_PATH
+ "${CMAKE_SOURCE_DIR}"
+ "${CMAKE_SOURCE_DIR}/cmake"
+ )
include(CheckIncludeFiles)
include(CheckLibraryExists)
@@ -28,11 +31,28 @@ include(MacroOptionalFindPackage)
include(MacroLogFeature)
include(FindPackageHandleStandardArgs)
include (GNUInstallDirs)
+
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK.
+#cross-compilation support
+# Search packages for host system instead of packages for target system
+# in case of cross compilation these macro should be defined by toolchain file
+if(NOT COMMAND find_host_package)
+ macro(find_host_package)
+ find_package(${ARGN})
+ endmacro()
+endif()
+if(NOT COMMAND find_host_program)
+ macro(find_host_program)
+ find_program(${ARGN})
+ endmacro()
+endif()
+
+option(BUILD_SHARED_LIBS "Build shared library" ON)
+set (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
include(Prelims NO_POLICY_SCOPE)
@@ -40,10 +60,15 @@ include(Sources NO_POLICY_SCOPE)
include(Model NO_POLICY_SCOPE)
-include_directories ( utf8proc packages/myddas packages/myddas/sqlite3 )
+include_directories ( utf8proc packages/myddas packages/myddas/sqlite3/src)
+
if (ANDROID)
- include_directories ( packages/myddas/sqlite3/Android/jni/sqlite/nativehelper packages/myddas/sqlite3/Android/jni/sqlite )
-endif (ANDROID)
+ include_directories (
+ packages/myddas/sqlite3/src/Android/jni/sqlite
+ packages/myddas/sqlite3/src/Android/jni/sqlite/nativehelper
+ )
+ endif (ANDROID)
+
add_definitions(-DUSE_MYDDAS=1 -DMYDDAS_SQLITE3=1)
if (MYSQL_FOUND)
@@ -58,39 +83,21 @@ if (MYSQL_POSTGRES)
add_definitions(= -DMYDDAS_POSTGRES=1)
endif()
-if (ANDROID)
- #
- # SWIG_FOUND - set to true if SWIG is found
- # SWIG_DIR - t he directory where swig is installed
- # SWIG_EXECUTABLE - the path to the swig executable
- # SWIG_VERSION - the version number of the swig executable
- #
-
- #
-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}
- 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}
- )
+ if (ANDROID)
ADD_SUBDIRECTORY(os)
ADD_SUBDIRECTORY(OPTYap)
ADD_SUBDIRECTORY(packages/myddas)
- ADD_SUBDIRECTORY(library/random)
- ADD_SUBDIRECTORY(library/system)
ADD_SUBDIRECTORY(utf8proc)
ADD_SUBDIRECTORY(CXX)
+
+set (SWIG_FILES ${CMAKE_SOURCE_DIR}/../generated/jni/yap_wrap.cpp )
+
else ()
set(YLIBS
+ $
$
$
$
@@ -103,21 +110,24 @@ else ()
endif ()
if (WIN32)
- list (APPEND YLIBS $)
+ list (APPEND YLIBS $)
+endif()
+
+
+add_component (core
+ ${ENGINE_SOURCES}
+ ${SWIG_FILES}
+ ${C_INTERFACE_SOURCES}
+ ${STATIC_SOURCES}
+ ${ALL_SOURCES}
+ )
- endif()
add_library( # Sets the name of the library.
libYap
# Sets the library as a shared library.
SHARED
-
- ${ENGINE_SOURCES}
- ${SWIG_CXX}
- ${C_INTERFACE_SOURCES}
- ${STATIC_SOURCES}
- ${ALL_SOURCES}
${YLIBS}
${WINDLLS}
)
@@ -131,7 +141,7 @@ endif (USE_READLINE)
if (ANDROID)
- add_dependencies(libYap plmyddas)
+ add_dependencies(libYap plmyddas )
target_link_libraries(libYap android log)
diff --git a/CXX/yapa.hh b/CXX/yapa.hh
index e1b955817..212d40492 100644
--- a/CXX/yapa.hh
+++ b/CXX/yapa.hh
@@ -23,8 +23,6 @@ enum PropTag {
MUTEX_TAG = MutexProperty, // 0xFFF6,
/// A typed array, may be in-db or in-stack deped
ARRAY_TAG = ArrayProperty, // 0xFFF7,
- /// atom does not fit ISO-LATIN-1
- WIDE_TAG = WideAtomProperty, // 0xFFF8,
/// module
MODULE_TAG = ModProperty, // 0xFFFA,
/// the original SICStus blackboard
@@ -59,14 +57,14 @@ class YAPAtom {
/// construct new YAPAtom from Atom
YAPAtom( Atom at ) { a = at; }
public:
- /// construct new YAPAtom from string
- YAPAtom( const char * s) { a = Yap_LookupAtom( s ); }
+ /// construct new YAPAtom from UTF-8 string
+ 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
-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
YAPAtom( const char * s, size_t len) { a = Yap_LookupAtomWithLength( s, len ); }
- /// construct new YAPAtom from max-length wide string
- YAPAtom( const wchar_t * s, size_t len) { a = Yap_LookupMaybeWideAtomWithLength( s, len ); }
/// get name of atom
const char *getName(void);
/// get name of (other way)
diff --git a/CXX/yapdb.hh b/CXX/yapdb.hh
index f80ae3fd4..d7b6e1c3d 100644
--- a/CXX/yapdb.hh
+++ b/CXX/yapdb.hh
@@ -97,7 +97,7 @@ public:
/// Note: Python confuses the 3 constructors,
/// use YAPFunctorFromWideString
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(){};
/// Getter: extract name of functor as an atom
@@ -137,8 +137,10 @@ protected:
CACHE_REGS
BACKUP_MACHINE_REGS();
Term *modp = NULL;
-
- out = Yap_StringToTerm(s0, strlen(s0) + 1, &LOCAL_encoding, 1200, &names);
+names = MkVarTerm ();
+ const unsigned char *us = (const unsigned char *)s0;
+ out =
+ Yap_BufferToTermWithPrioBindings(us, strlen(s0), TermNil, 1200, names);
// extern char *s0;
// fprintf(stderr,"ap=%p arity=%d text=%s", ap, ap->ArityOfPE, s);
// Yap_DebugPlWrite(out);
@@ -217,13 +219,15 @@ public:
/// char */module constructor for predicates.
///
inline YAPPredicate(const char *at, uintptr_t arity) {
- ap = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_LookupAtom(at), arity), CurrentModule));
+ ap = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_LookupAtom(at), arity),
+ CurrentModule));
};
/// char */module constructor for predicates.
///
inline YAPPredicate(const char *at, uintptr_t arity, YAPTerm mod) {
- ap = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_LookupAtom(at), arity), mod.t));
+ ap = RepPredProp(
+ PredPropByFunc(Yap_MkFunctor(Yap_LookupAtom(at), arity), mod.t));
};
/// char */module constructor for predicates.
@@ -266,8 +270,8 @@ public:
*/
class YAPPrologPredicate : public YAPPredicate {
public:
- YAPPrologPredicate(YAPTerm t) : YAPPredicate(t) {};
- YAPPrologPredicate(const char *s, arity_t arity): YAPPredicate(s, arity) {};
+ YAPPrologPredicate(YAPTerm t) : YAPPredicate(t){};
+ YAPPrologPredicate(const char *s, arity_t arity) : YAPPredicate(s, arity){};
/// add a new clause
void *assertClause(YAPTerm clause, bool last = true,
YAPTerm source = YAPTerm());
diff --git a/CXX/yapi.cpp b/CXX/yapi.cpp
index 5b0ed2072..69c70bc8b 100644
--- a/CXX/yapi.cpp
+++ b/CXX/yapi.cpp
@@ -162,6 +162,8 @@ YAPApplTerm::YAPApplTerm(YAPFunctor f, YAPTerm ts[]) : YAPTerm() {
RECOVER_H();
}
+#if 0
+
YAPApplTerm::YAPApplTerm(const char *f, std::vector ts) : YAPTerm() {
BACKUP_H();
arity_t arity = ts.size();
@@ -179,29 +181,32 @@ YAPApplTerm::YAPApplTerm(YAPFunctor f) : YAPTerm() {
mk(Yap_MkNewApplTerm(f.f, arity));
RECOVER_H();
}
+ #endif
+
YAPFunctor YAPApplTerm::getFunctor() { return YAPFunctor(FunctorOfTerm(gt())); }
-YAPTerm &YAPTerm::operator[](arity_t i) {
+Term &YAPTerm::operator[](arity_t i) {
BACKUP_MACHINE_REGS();
Term t0 = gt();
Term tf = 0;
if (IsApplTerm(t0)) {
- Functor f = FunctorOfTerm(t0);
- if (IsExtensionFunctor(f))
- return *new YAPTerm();
- tf = ArgOfTerm(i + 1, t0);
+ // Functor f = FunctorOfTerm(t0);
+ // if (IsExtensionFunctor(f))
+ // return 0;
+ RECOVER_MACHINE_REGS();
+ return RepAppl(t0)[(i + 1)];
} else if (IsPairTerm(t0)) {
if (i == 0)
tf = HeadOfTerm(t0);
else if (i == 1)
tf = TailOfTerm(t0);
+ RECOVER_MACHINE_REGS();
+ return RepPair(tf)[i];
}
- RECOVER_MACHINE_REGS();
- return *new YAPTerm(tf);
}
-YAPTerm &YAPListTerm::operator[](arity_t i) {
+Term &YAPListTerm::operator[](arity_t i) {
BACKUP_MACHINE_REGS();
Term t0 = gt();
Term tf = 0;
@@ -215,7 +220,7 @@ YAPTerm &YAPListTerm::operator[](arity_t i) {
}
}
RECOVER_MACHINE_REGS();
- return *new YAPTerm(tf);
+ return RepPair(tf)[i];
}
YAPPairTerm::YAPPairTerm(YAPTerm th, YAPTerm tl) : YAPTerm() {
@@ -231,11 +236,6 @@ YAPPairTerm::YAPPairTerm() : YAPTerm() {
RECOVER_H();
}
-Term YAPTerm::gt() { CACHE_REGS return Yap_GetFromSlot(t); }
-
-void YAPTerm::mk(Term t0) { CACHE_REGS t= Yap_InitSlot(t0); }
-
-
YAP_tag_t YAPTerm::tag() {
Term tt = gt();
if (IsVarTerm(tt)) {
@@ -280,24 +280,24 @@ YAP_tag_t YAPTerm::tag() {
}
}
-YAPTerm YAPTerm::deepCopy() {
+Term YAPTerm::deepCopy() {
yhandle_t tn;
BACKUP_MACHINE_REGS();
tn = Yap_CopyTerm(gt());
RECOVER_MACHINE_REGS();
- return *new YAPTerm(tn);
+ return (tn);
}
-YAPListTerm YAPListTerm::dup() {
+Term YAPListTerm::dup() {
yhandle_t tn;
BACKUP_MACHINE_REGS();
tn = Yap_CopyTerm(gt());
RECOVER_MACHINE_REGS();
- return *new YAPListTerm(tn);
+ return tn;
}
intptr_t YAPTerm::numberVars(intptr_t i0, bool skip_singletons) {
@@ -309,77 +309,7 @@ intptr_t YAPTerm::numberVars(intptr_t i0, bool skip_singletons) {
return i;
}
-bool YAPTerm::exactlyEqual(YAPTerm t1) {
- bool out;
- BACKUP_MACHINE_REGS();
-
- out = Yap_eq(gt(), t1.term());
-
- RECOVER_MACHINE_REGS();
- return out;
-}
-
-bool YAPTerm::unify(YAPTerm t1) {
- intptr_t out;
- BACKUP_MACHINE_REGS();
-
- out = Yap_unify(gt(), t1.term());
-
- RECOVER_MACHINE_REGS();
- return out;
-}
-
-bool YAPTerm::unifiable(YAPTerm t1) {
- intptr_t out;
- BACKUP_MACHINE_REGS();
-
- out = Yap_Unifiable(gt(), t1.term());
-
- RECOVER_MACHINE_REGS();
- return out;
-}
-
-bool YAPTerm::variant(YAPTerm t1) {
- intptr_t out;
- BACKUP_MACHINE_REGS();
-
- out = Yap_Variant(gt(), t1.term());
-
- RECOVER_MACHINE_REGS();
- return out;
-}
-
-intptr_t YAPTerm::hashTerm(size_t sz, size_t depth, bool variant) {
- intptr_t out;
-
- BACKUP_MACHINE_REGS();
-
- out = Yap_TermHash(gt(), sz, depth, variant);
-
- RECOVER_MACHINE_REGS();
- return out;
-}
-
-const char *YAPTerm::text() {
- CACHE_REGS
- size_t length = 0;
- encoding_t enc = LOCAL_encoding;
- char *os;
-
- BACKUP_MACHINE_REGS();
- if (!(os = Yap_TermToString(Yap_GetFromSlot(t), &length, enc,
- Handle_vars_f))) {
- RECOVER_MACHINE_REGS();
- return 0;
- }
- RECOVER_MACHINE_REGS();
- length = strlen(os) + 1;
- char *sm = (char *)malloc(length + 1);
- strcpy(sm, os);
- return sm;
-}
-
-const char *YAPQuery::text() { return goal.text(); }
+const char *YAPQuery::text() { return YAPTerm(goal).text(); }
YAPIntegerTerm::YAPIntegerTerm(intptr_t i) {
CACHE_REGS Term tn = MkIntegerTerm(i);
@@ -402,42 +332,16 @@ YAPTerm::YAPTerm(void *ptr) {
mk(MkIntegerTerm((Int)ptr));
}
-YAPTerm YAPListTerm::car() {
+Term YAPListTerm::car() {
Term to = gt();
if (IsPairTerm(to))
- return YAPTerm(HeadOfTerm(to));
+ return (HeadOfTerm(to));
else {
Yap_Error(TYPE_ERROR_LIST, to, "");
throw YAPError();
}
}
-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) {
CACHE_REGS
BACKUP_H();
@@ -462,40 +366,34 @@ YAPVarTerm::YAPVarTerm() {
mk(MkVarTerm());
}
-const char *YAPAtom::getName(void) {
- return Yap_AtomToUTF8Text( a, nullptr );
-}
+const char *YAPAtom::getName(void) { return Yap_AtomToUTF8Text(a, nullptr); }
-
-
-
- void YAPQuery::openQuery() {
- CACHE_REGS
- arity_t arity = ap->ArityOfPE;
- if (arity) {
- Term *ts;
- Term t = goal.term();
- if (IsPairTerm(t)) {
- ts = RepPair(t);
- } else {
- ts = RepAppl(t) + 1;
- }
- for (arity_t i = 0; i < arity; i++) {
- XREGS[i + 1] = ts[i];
- }
- }
- // oq = LOCAL_execution;
- // LOCAL_execution = this;
- q_open = true;
- q_state = 0;
- q_flags = true; // PL_Q_PASS_EXCEPTION;
-
- q_p = P;
- q_cp = CP;
- // make sure this is safe
- q_handles = Yap_StartSlots();
+void YAPQuery::openQuery() {
+ CACHE_REGS
+ arity_t arity = ap->ArityOfPE;
+ if (arity) {
+ Term *ts;
+ Term t = goal;
+ if (IsPairTerm(t)) {
+ ts = RepPair(t);
+ } else {
+ ts = RepAppl(t) + 1;
}
+ for (arity_t i = 0; i < arity; i++) {
+ XREGS[i + 1] = ts[i];
+ }
+ }
+ // oq = LOCAL_execution;
+ // LOCAL_execution = this;
+ q_open = true;
+ q_state = 0;
+ q_flags = true; // PL_Q_PASS_EXCEPTION;
+ q_p = P;
+ q_cp = CP;
+ // make sure this is safe
+ q_handles = Yap_StartSlots();
+}
bool YAPEngine::call(YAPPredicate ap, YAPTerm ts[]) {
CACHE_REGS
@@ -505,8 +403,9 @@ bool YAPEngine::call(YAPPredicate ap, YAPTerm ts[]) {
YAP_dogoalinfo q;
Term terr;
jmp_buf q_env;
+
for (arity_t i = 0; i < arity; i++)
- Yap_XREGS[i + 1] = ts[i].term();
+ XREGS[i + 1] = ts[i].term();
q.CurSlot = Yap_StartSlots();
q.p = P;
q.cp = CP;
@@ -519,20 +418,13 @@ bool YAPEngine::call(YAPPredicate ap, YAPTerm ts[]) {
}
return false;
}
- // don't forget, on success these l);
-if (!result) {
- YAP_LeaveGoal(false, &q);
- } else {
- YAP_LeaveGoal(FALSE, &q);
- }
+ // don't forget, on success these bindings will still be there);
+ YAP_LeaveGoal(false, &q);
RECOVER_MACHINE_REGS();
return result;
}
-bool YAPEngine::goalt(YAPTerm Yt) {
- return Yt.term();
- }
-
+bool YAPEngine::goalt(YAPTerm Yt) { return Yt.term(); }
bool YAPEngine::goal(Term t) {
CACHE_REGS
@@ -566,7 +458,6 @@ bool YAPEngine::goal(Term t) {
// don't forget, on success these guys may create slots
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "exec ");
-
result = (bool)YAP_EnterGoal(ap, nullptr, &q);
if ((terr = Yap_GetException())) {
YAP_LeaveGoal(false, &q);
@@ -586,43 +477,47 @@ bool YAPEngine::goal(Term t) {
void YAPEngine::release() {
BACKUP_MACHINE_REGS();
- YAP_LeaveGoal(FALSE, &q);
+ YAP_LeaveGoal(FALSE, &q);
RECOVER_MACHINE_REGS();
- }
+}
Term YAPEngine::fun(Term t) {
CACHE_REGS
BACKUP_MACHINE_REGS();
Term tmod = CurrentModule, *ts = nullptr;
- PredEntry *ap ;
- arity_t arity = arity;
+ PredEntry *ap;
+ arity_t arity;
Functor f;
jmp_buf q_env;
Atom name;
-
BACKUP_MACHINE_REGS();
- if (IsApplTerm(t)) {
+ if (IsApplTerm(t)) {
ts = RepAppl(t) + 1;
f = (Functor)ts[-1];
- name = NameOfFunctor(f);
- arity =ArityOfFunctor(f);
+ name = NameOfFunctor(f);
+ arity = ArityOfFunctor(f);
for (arity_t i = 0; i < arity; i++)
XREGS[i + 1] = ts[i];
} else if (IsAtomTerm(t)) {
name = AtomOfTerm(t);
f = nullptr;
- } else if (IsAtomTerm(t)) {
+ arity = 0;
+ } else if (IsPairTerm(t)) {
XREGS[1] = ts[0];
XREGS[2] = ts[1];
+ arity = 2;
name = AtomDot;
f = FunctorDot;
- }
- XREGS[arity+1] = MkVarTerm();
- arity ++;
- f = Yap_MkFunctor(name,arity);
- ap = (PredEntry *)(PredPropByFunc(f,tmod));
- q.CurSlot = Yap_StartSlots();
+ } else {
+ Yap_Error(TYPE_ERROR_CALLABLE, t, 0);
+ return 0L;
+ }
+ XREGS[arity + 1] = MkVarTerm();
+ arity++;
+ f = Yap_MkFunctor(name, arity);
+ ap = (PredEntry *)(PredPropByFunc(f, tmod));
+ q.CurSlot = Yap_StartSlots();
q.p = P;
q.cp = CP;
// make sure this is safe
@@ -630,7 +525,7 @@ Term YAPEngine::fun(Term t) {
if (setjmp(q_env)) {
Term terr;
- if ((terr = Yap_PeekException())) {
+ if ((terr = Yap_PeekException())) {
YAP_LeaveGoal(false, &q);
Yap_CloseHandles(q.CurSlot);
throw YAPError();
@@ -639,23 +534,22 @@ Term YAPEngine::fun(Term t) {
}
// don't forget, on success these guys may create slots
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "exec ");
-
- if ((o = (Term)YAP_EnterGoal(ap, nullptr, &q))==0)
+
+ if ((o = (Term)YAP_EnterGoal(ap, nullptr, &q)) == 0)
return 0;
Term terr;
if ((terr = Yap_GetException())) {
YAP_LeaveGoal(false, &q);
- Yap_CloseHandles(q.CurSlot);
+ Yap_CloseHandles(q.CurSlot);
throw YAPError();
}
- __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "out %d", result);
+ __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "out %ld", o);
- Term result;
t = Yap_GetFromSlot(q.CurSlot);
Yap_CloseHandles(q.CurSlot);
if (!t) {
YAP_LeaveGoal(false, &q);
- result = 0;
+ t = 0;
}
RECOVER_MACHINE_REGS();
return t;
@@ -665,41 +559,43 @@ YAPQuery::YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm ts[])
: YAPPredicate(f, mod) {
/* ignore flags for now */
BACKUP_MACHINE_REGS();
- goal = YAPTerm(f, ts);
- vnames = YAPListTerm();
+ goal = YAPApplTerm(f, ts).gt();
+ names = TermNil;
openQuery();
RECOVER_MACHINE_REGS();
}
+#if 0
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm ts[]) : YAPPredicate(f) {
- /* ignore flags for now */
+ /* ignore flags for now */
BACKUP_MACHINE_REGS();
- goal = YAPTerm(f, ts);
- vnames = YAPListTerm();
+ goal = YAPApplTerm(f, ts).gt();
+ names = TermNil;
openQuery();
RECOVER_MACHINE_REGS();
}
+#endif
YAPQuery::YAPQuery(YAPPredicate p, YAPTerm ts[]) : YAPPredicate(p.ap) {
BACKUP_MACHINE_REGS();
- goal = YAPTerm(YAPFunctor(ap->FunctorOfPred), ts);
- vnames = YAPListTerm();
+ goal = YAPApplTerm(YAPFunctor(p.ap->FunctorOfPred), ts).term();
+ names = TermNil;
openQuery();
RECOVER_MACHINE_REGS();
}
-YAPListTerm YAPQuery::namedVars() {
+Term YAPQuery::namedVars() {
CACHE_REGS
- __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %s %d",
- vnames.text(), LOCAL_CurSlot);
- return vnames; // should be o
+ __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %s %ld",
+ names.text(), LOCAL_CurSlot);
+ return (names); // should be o
}
-YAPListTerm YAPQuery::namedVarsCopy() {
+Term YAPQuery::namedVarsCopy() {
CACHE_REGS
- __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %s %d",
- vnames.text(), LOCAL_CurSlot);
- return YAPListTerm(YAP_CopyTerm(vnames.term())); // should be o
+ __android_log_print(NDROID_LOG_INFO, "YAPDroid", "vnames %s %ld",
+ names.text(), LOCAL_CurSlot);
+ return (YAP_CopyTerm(names)); // should be o
}
bool YAPQuery::next() {
@@ -728,7 +624,7 @@ bool YAPQuery::next() {
result = (bool)YAP_RetryGoal(&q_h);
}
if (result) {
- __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %d %s %d",
+ __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %d %s %ld",
q_state, vnames.text(), LOCAL_CurSlot);
} else {
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "fail");
@@ -871,8 +767,7 @@ void YAPEngine::doInit(YAP_file_type_t BootMode) {
YAPEngine::YAPEngine(char *savedState, char *bootFile, size_t stackSize,
size_t trailSize, size_t maxStackSize, size_t maxTrailSize,
char *libDir, char *goal, char *topLevel, bool script,
- bool fastBoot,
- bool embedded,
+ bool fastBoot, bool embedded,
YAPCallback *cb)
: _callback(0) { // a single engine can be active
@@ -1000,12 +895,12 @@ void *YAPPrologPredicate::assertClause(YAPTerm cl, bool last, YAPTerm source) {
void *YAPPrologPredicate::assertFact(YAPTerm *cl, bool last) {
CACHE_REGS
- arity_t i;
+ arity_t i;
RECOVER_MACHINE_REGS();
Term tt = AbsAppl(HR);
*HR++ = (CELL)(ap->FunctorOfPred);
- for (i = 0; i < ap->ArityOfPE; i++,cl++)
- *HR++ = cl->gt();
+ for (i = 0; i < ap->ArityOfPE; i++, cl++)
+ *HR++ = cl->gt();
yamop *codeaddr = Yap_cclause(tt, ap->ArityOfPE, Yap_CurrentModule(),
tt); /* vsc: give the number of arguments
to cclause in case there is overflow */
@@ -1029,37 +924,37 @@ const char *YAPError::text() {
char buf[256];
std::string s = "";
- if (LOCAL_ActiveError.errorFunction) {
- s += LOCAL_ActiveError.errorFile;
+ if (LOCAL_ActiveError->errorFunction) {
+ s += LOCAL_ActiveError->errorFile;
s += ":";
- sprintf(buf, "%ld", (long int)LOCAL_ActiveError.errorLine);
+ sprintf(buf, "%ld", (long int)LOCAL_ActiveError->errorLine);
s += buf;
s += ":0 in C-code";
}
- if (LOCAL_ActiveError.prologPredLine) {
+ if (LOCAL_ActiveError->prologPredLine) {
s += "\n";
- s += LOCAL_ActiveError.prologPredFile->StrOfAE;
+ s += LOCAL_ActiveError->prologPredFile->StrOfAE;
s += ":";
- sprintf(buf, "%ld", (long int)LOCAL_ActiveError.prologPredLine);
- s += buf; // std::to_string(LOCAL_ActiveError.prologPredLine) ;
- // YAPIntegerTerm(LOCAL_ActiveError.prologPredLine).text();
+ sprintf(buf, "%ld", (long int)LOCAL_ActiveError->prologPredLine);
+ s += buf; // std::to_string(LOCAL_ActiveError->prologPredLine) ;
+ // YAPIntegerTerm(LOCAL_ActiveError->prologPredLine).text();
s += ":0 ";
- s += LOCAL_ActiveError.prologPredModule;
+ s += LOCAL_ActiveError->prologPredModule;
s += ":";
- s += (LOCAL_ActiveError.prologPredName)->StrOfAE;
+ s += (LOCAL_ActiveError->prologPredName)->StrOfAE;
s += "/";
- sprintf(buf, "%ld", (long int)LOCAL_ActiveError.prologPredArity);
- s += // std::to_string(LOCAL_ActiveError.prologPredArity);
+ sprintf(buf, "%ld", (long int)LOCAL_ActiveError->prologPredArity);
+ s += // std::to_string(LOCAL_ActiveError->prologPredArity);
buf;
}
s += " error ";
- if (LOCAL_ActiveError.classAsText != nullptr)
- s += LOCAL_ActiveError.classAsText->StrOfAE;
+ if (LOCAL_ActiveError->classAsText != nullptr)
+ s += LOCAL_ActiveError->classAsText->StrOfAE;
s += ".";
- s += LOCAL_ActiveError.errorAsText->StrOfAE;
+ s += LOCAL_ActiveError->errorAsText->StrOfAE;
s += ".\n";
- if (LOCAL_ActiveError.errorTerm) {
- Term t = Yap_PopTermFromDB(LOCAL_ActiveError.errorTerm);
+ if (LOCAL_ActiveError->errorTerm) {
+ Term t = Yap_PopTermFromDB(LOCAL_ActiveError->errorTerm);
if (t) {
s += "error term is: ";
s += YAPTerm(t).text();
@@ -1070,23 +965,21 @@ const char *YAPError::text() {
return s.c_str();
}
-void YAPEngine::reSet()
- {
+void YAPEngine::reSet() {
/* ignore flags for now */
BACKUP_MACHINE_REGS();
Yap_RebootHandles(worker_id);
- while (B->cp_b) B= B->cp_b;
- P = FAILCODE;
- Yap_exec_absmi(true, YAP_EXEC_ABSMI);
- /* recover stack space */
- HR = B->cp_h;
- TR = B->cp_tr;
+ while (B->cp_b)
+ B = B->cp_b;
+ P = FAILCODE;
+ Yap_exec_absmi(true, YAP_EXEC_ABSMI);
+ /* recover stack space */
+ HR = B->cp_h;
+ TR = B->cp_tr;
#ifdef DEPTH_LIMIT
- DEPTH = B->cp_depth;
+ DEPTH = B->cp_depth;
#endif /* DEPTH_LIMIT */
- YENV = ENV = B->cp_env;
+ YENV = ENV = B->cp_env;
RECOVER_MACHINE_REGS();
- }
-
-
+}
diff --git a/CXX/yapie.hh b/CXX/yapie.hh
index f85723bb9..1c425cc8e 100644
--- a/CXX/yapie.hh
+++ b/CXX/yapie.hh
@@ -15,17 +15,17 @@ public:
YAPError(){};
/// we just know the error number
/// exact error ID
- yap_error_number getID() { return LOCAL_ActiveError.errorNo; };
+ yap_error_number getID() { return LOCAL_ActiveError->errorNo; };
/// class of error
yap_error_class_number getErrorClass() {
- return Yap_errorClass(LOCAL_ActiveError.errorNo);
+ return Yap_errorClass(LOCAL_ActiveError->errorNo);
};
/// where in the code things happened;
- const char *getFile() { return LOCAL_ActiveError.errorFile; };
+ const char *getFile() { return LOCAL_ActiveError->errorFile; };
/// predicate things happened;
- Int getLine() { return LOCAL_ActiveError.errorLine; };
+ Int getLine() { return LOCAL_ActiveError->errorLine; };
/// the term that caused the bug
- // YAPTerm getCulprit(LOCAL_ActiveError.errorFile){};
+ // YAPTerm getCulprit(LOCAL_ActiveError->errorFile){};
/// text describing the Error
const char *text();
};
diff --git a/CXX/yapq.hh b/CXX/yapq.hh
index fc9ee6fed..d06392c80 100644
--- a/CXX/yapq.hh
+++ b/CXX/yapq.hh
@@ -22,10 +22,9 @@ class YAPQuery : public YAPPredicate {
int q_flags;
YAP_dogoalinfo q_h;
YAPQuery *oq;
- YAPListTerm vnames;
- YAPTerm goal;
+ Term names;
+ Term goal;
// temporaries
- Term tgoal, names;
void openQuery();
@@ -46,21 +45,19 @@ public:
///
/// It is given a functor, and an array of terms that must have at least
/// the same arity as the functor. Works within the current module.
- YAPQuery(YAPFunctor f, YAPTerm t[]);
+ //YAPQuery(YAPFunctor f, YAPTerm t[]);
/// string constructor without varnames
///
/// It is given a string, calls the parser and obtains a Prolog term that
/// should be a callable
/// goal.
- inline YAPQuery(const char *s) : YAPPredicate(s, tgoal, names) {
+ inline YAPQuery(const char *s) : YAPPredicate(s, goal, names) {
BACKUP_H();
- __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "got game %d",
+ __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "got game %ld",
LOCAL_CurSlot);
if (!ap)
return;
- goal = YAPTerm(tgoal);
- vnames = YAPListTerm(names);
- __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "%s", vnames.text());
+ __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "%s", vnames.text());
openQuery();
RECOVER_H();
};
@@ -69,8 +66,8 @@ public:
/// It is given an atom, and a Prolog term that should be a callable
/// goal, say `main`, `init`, `live`.
inline YAPQuery(YAPAtom g) : YAPPredicate(g) {
- goal = YAPAtomTerm(g);
- vnames = YAPListTerm();
+ goal = YAPAtomTerm(g).gt();
+ names = TermNil;
openQuery();
};
@@ -96,9 +93,9 @@ public:
/// finish the current query: undo all bindings.
void close();
/// query variables.
- YAPListTerm namedVars();
+ Term namedVars();
/// query variables, but copied out
- YAPListTerm namedVarsCopy();
+ Term namedVarsCopy();
/// convert a ref to a binding.
YAPTerm getTerm(yhandle_t t);
/// simple YAP Query;
diff --git a/CXX/yapt.hh b/CXX/yapt.hh
index 44f7b8b51..5a46dce13 100644
--- a/CXX/yapt.hh
+++ b/CXX/yapt.hh
@@ -2,9 +2,23 @@
#ifndef YAPT_HH
#define YAPT_HH 1
-extern "C" Term YAP_ReadBuffer(const char *s, Term *tp);
+#include "config.h"
+
+extern "C" {
+Term YAP_ReadBuffer(const char *s, Term *tp);
+#if defined(SWIGPYTHON) && 0
+#include
+extern Term pythonToYAP(PyObject *inp);
+#define YAPTerm _YAPTERM
+#elifndef HAVE_PYTHON_H
+typdef struct { int no_python; } PyObject;
+#else
+#include
+#endif
+};
class YAPError;
+
/**
* @brief Generic Prolog Term
*/
@@ -18,20 +32,41 @@ class YAPTerm {
friend class YAPListTerm;
protected:
- yhandle_t t; /// handle to term, equivalent to term_t
- void mk(Term t0); /// internal method to convert from term to handle
- Term gt(); /// get handle and obtain term
+ yhandle_t t; /// handle to term, equivalent to term_t
public:
- virtual ~YAPTerm(){ LOCAL_HandleBase[t] = TermFreeTerm;
- while ( LOCAL_HandleBase[LOCAL_CurSlot-1] == TermFreeTerm)
- LOCAL_CurSlot--;
- }
- YAPTerm(Term tn) {
- mk(tn);
- } /// private method to convert from Term (internal YAP representation) to
+ virtual ~YAPTerm() {
+ // fprintf(stderr,"-%d,%lx,%p ",t,LOCAL_HandleBase[t] ,HR);
+ // Yap_DebugPlWriteln(LOCAL_HandleBase[t]); }
+ // LOCAL_HandleBase[t] = TermFreeTerm;
+ // while ( LOCAL_HandleBase[LOCAL_CurSlot-1] == TermFreeTerm)
+ LOCAL_CurSlot--;
+ };
+
+ Term gt() {
+ CACHE_REGS
+ // fprintf(stderr,"?%d,%lx,%p\n",t,LOCAL_HandleBase[t], HR);
+ // Yap_DebugPlWriteln(LOCAL_HandleBase[t]);
+ return Yap_GetFromSlot(t);
+ };
+
+ void mk(Term t0) {
+ CACHE_REGS t = Yap_InitSlot(t0);
+ // fprintf(stderr,"+%d,%lx,%p,%p",t,t0,HR,ASP); Yap_DebugPlWriteln(t0);
+ };
+
+ YAPTerm(Term tn) { mk(tn); };
+ YAPTerm(PyObject *inp) {
+#ifdef SWIGPYTHON
+ Term tinp = pythonToYAP(inp);
+ t = Yap_InitSlot(tinp);
+#else
+ t = 0;
+#endif
+ }
+ /// private method to convert from Term (internal YAP representation) to
/// YAPTerm
// do nothing constructor
- YAPTerm() { mk(MkVarTerm()); }
+ YAPTerm() { mk(MkVarTerm()); };
// YAPTerm(yhandle_t i) { t = i; };
/// pointer to term
YAPTerm(void *ptr);
@@ -42,32 +77,73 @@ public:
}
/// construct a term out of an integer (if you know object type use
/// 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
/// YAPIntegerTerm)
- YAPTerm(double num) { mk(MkFloatTerm(num)); }
+ /// YAPTerm(double num) { mk(MkFloatTerm(num)); }
/// 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.
YAP_tag_t tag();
/// copy the term ( term copy )
- YAPTerm deepCopy();
+ Term deepCopy();
/// numbervars ( int start, bool process=false )
intptr_t numberVars(intptr_t start, bool skip_singletons = false);
inline Term term() {
return gt();
} /// from YAPTerm to Term (internal YAP representation)
+ inline void bind(Term b) { LOCAL_HandleBase[t] = b; }
+ inline void bind(YAPTerm *b) { LOCAL_HandleBase[t] = b->term(); }
+ /// from YAPTerm to Term (internal YAP representation)
/// fetch a sub-term
- YAPTerm &operator[](size_t n);
+ Term &operator[](size_t n);
// const YAPTerm *vars();
/// this term is == to t1
- virtual bool exactlyEqual(YAPTerm t1);
- virtual bool unify(YAPTerm t1); /// t = t1
- virtual bool unifiable(YAPTerm t1); /// we can unify t and t1
- virtual bool variant(
- YAPTerm t1); /// t =@= t1, the two terms are equal up to variable renaming
- virtual intptr_t hashTerm(size_t sz, size_t depth,
- bool variant); /// term hash,
+ virtual bool exactlyEqual(YAPTerm t1) {
+ bool out;
+ BACKUP_MACHINE_REGS();
+ out = Yap_eq(gt(), t1.term());
+ RECOVER_MACHINE_REGS();
+ return out;
+ };
+
+ /// t = t1
+ virtual bool unify(YAPTerm t1) {
+ intptr_t out;
+ BACKUP_MACHINE_REGS();
+ out = Yap_unify(gt(), t1.term());
+ RECOVER_MACHINE_REGS();
+ return out;
+ };
+
+ /// we can unify t and t1
+ virtual bool unifiable(YAPTerm t1) {
+ bool out;
+ BACKUP_MACHINE_REGS();
+ out = Yap_eq(gt(), t1.term());
+ RECOVER_MACHINE_REGS();
+ return out;
+ };
+
+ /// t =@= t1, the two terms are equal up to variable renamingvirtual bool
+ /// variant(
+ inline virtual YAP_Term variant(YAPTerm t1) {
+ intptr_t out;
+ BACKUP_MACHINE_REGS();
+ out = Yap_Variant(gt(), t1.term());
+ RECOVER_MACHINE_REGS();
+ return out;
+ };
+
+ virtual intptr_t hashTerm(size_t sz, size_t depth, bool variant) {
+ intptr_t out;
+
+ BACKUP_MACHINE_REGS();
+ out = Yap_TermHash(gt(), sz, depth, variant);
+ RECOVER_MACHINE_REGS();
+ return out;
+ };
+ /// term hash,
virtual bool isVar() { return IsVarTerm(gt()); } /// type check for unound
virtual bool isAtom() { return IsAtomTerm(gt()); } /// type check for atom
virtual bool isInteger() {
@@ -88,19 +164,19 @@ public:
virtual bool isList() { return Yap_IsListTerm(gt()); } /// term is a list
/// extract the argument i of the term, where i in 1...arity
- virtual YAPTerm getArg(arity_t i) {
+ virtual Term getArg(arity_t i) {
BACKUP_MACHINE_REGS();
+ Term tf = 0;
Term t0 = gt();
- YAPTerm tf;
if (IsApplTerm(t0))
- tf = YAPTerm(ArgOfTerm(i, t0));
+ tf = (ArgOfTerm(i, t0));
else if (IsPairTerm(t0)) {
if (i == 1)
- tf = YAPTerm(HeadOfTerm(t0));
+ tf = (HeadOfTerm(t0));
else if (i == 2)
- tf = YAPTerm(TailOfTerm(t0));
+ tf = (TailOfTerm(t0));
} else {
- tf = YAPTerm((Term)0);
+ tf = ((Term)0);
}
RECOVER_MACHINE_REGS();
return tf;
@@ -123,7 +199,24 @@ public:
}
/// return a string with a textual representation of the term
- virtual const char *text();
+ virtual const char *text(){
+ CACHE_REGS
+ size_t length = 0;
+ encoding_t enc = LOCAL_encoding;
+ char *os;
+
+ BACKUP_MACHINE_REGS();
+ if (!(os = Yap_TermToString(Yap_GetFromSlot(t), &length, enc,
+ Handle_vars_f))) {
+ RECOVER_MACHINE_REGS();
+ return 0;
+ }
+ RECOVER_MACHINE_REGS();
+ length = strlen(os) + 1;
+ char *sm = (char *)malloc(length + 1);
+ strcpy(sm, os);
+ return sm;
+};
/// return a handle to the term
inline yhandle_t handle() { return t; };
@@ -170,15 +263,15 @@ class YAPApplTerm : public YAPTerm {
public:
~YAPApplTerm() {}
- YAPApplTerm(YAPFunctor f, YAPTerm ts[]);
- YAPApplTerm(const char *s, std::vector ts);
- YAPApplTerm(YAPFunctor f);
+ YAPApplTerm(YAPFunctor f, YAPTerm ts[]);
+ //YAPApplTerm(const char *s, std::vector ts);
+ //YAPApplTerm(YAPFunctor f);
YAPFunctor getFunctor();
- YAPTerm getArg(arity_t i) {
+ Term getArg(arity_t i) {
BACKUP_MACHINE_REGS();
Term t0 = gt();
- YAPTerm tf;
- tf = YAPTerm(ArgOfTerm(i, t0));
+ Term tf;
+ tf = ArgOfTerm(i, t0);
RECOVER_MACHINE_REGS();
return tf;
};
@@ -209,8 +302,8 @@ class YAPPairTerm : public YAPTerm {
public:
YAPPairTerm(YAPTerm hd, YAPTerm tl);
YAPPairTerm();
- YAPTerm getHead() { return YAPTerm(HeadOfTerm(gt())); }
- YAPTerm getTail() { return YAPTerm(TailOfTerm(gt())); }
+ Term getHead() { return (HeadOfTerm(gt())); }
+ Term getTail() { return (TailOfTerm(gt())); }
};
/**
@@ -267,20 +360,20 @@ public:
return Yap_SkipList(&t1, &tailp);
}
/// Extract the nth element.
- YAPTerm &operator[](size_t n);
+ Term &operator[](size_t n);
/// Extract the first element of a list.
///
/// @param[in] the list
- YAPTerm car();
+ Term car();
/// Extract the tail elements of a list.
///
/// @param[in] the list
- YAPListTerm cdr() {
+ Term cdr() {
Term to = gt();
if (IsPairTerm(to))
- return YAPListTerm(TailOfTerm(to));
+ return (TailOfTerm(to));
else if (to == TermNil)
- return YAPListTerm();
+ return TermNil;
/* error */
Yap_Error(TYPE_ERROR_LIST, t, 0);
throw YAPError();
@@ -288,7 +381,7 @@ public:
/// copy a list.
///
/// @param[in] the list
- YAPListTerm dup();
+ Term dup();
/// Check if the list is empty.
///
@@ -325,8 +418,6 @@ class YAPAtomTerm : public YAPTerm {
// Constructor: receives a C-atom;
YAPAtomTerm(Atom a) { mk(MkAtomTerm(a)); }
YAPAtomTerm(Term t) : YAPTerm(t) { IsAtomTerm(t); }
- // Getter for Prolog atom
- Term getTerm() { return t; }
public:
// Constructor: receives an atom;
diff --git a/GIT b/GIT
deleted file mode 100644
index 6bd7e5185..000000000
--- a/GIT
+++ /dev/null
@@ -1,10 +0,0 @@
-
-You need at least git-1.6 to install the development version.
-
-Please proceed as follows for the main branch:
-
-git clone git://gitorious.org/yap-git/mainline.git yap
-cd yap-6
-git submodule init
-git submodule update
-
diff --git a/H/ATOMS b/H/ATOMS
index c5c3da9a2..c43c033f1 100644
--- a/H/ATOMS
+++ b/H/ATOMS
@@ -29,9 +29,14 @@ A Arrow N "->"
A AttributedModule N "attributes_module"
A DoubleArrow N "-->"
A Assert N ":-"
-A EmptyBrackets N "()"
+A BeginBracket N "("
+A EndBracket N ")"
+A BeginSquareBracket N "["
+A EndSquareBracket N "]"
+A BeginCurlyBracket N "{"
+A EndCurlyBracket N "}"
+A EmptyBrackets N "()"
A EmptySquareBrackets N "[]"
-A EmptyCurlyBrackets N "{}"
A Asserta N "asserta"
A AssertaStatic N "asserta_static"
A Assertz N "assertz"
@@ -68,6 +73,7 @@ A Chars N "chars"
A Charset N "charset"
A ChType F "$char_type"
A CleanCall F "$clean_call"
+A Close N "close"
A Colon N ":"
A CodeSpace N "code_space"
A Codes N "codes"
@@ -89,7 +95,7 @@ A Csult F "$csult"
A CurrentModule F "$current_module"
A Cut N "!"
A CutBy F "$cut_by"
-A DAbort F "$abort"
+A DAbort N "abort"
A DBLoad F "$db_load"
A DBREF N "DBRef"
A DBReference N "db_reference"
@@ -190,6 +196,7 @@ A Id N "id"
A Ignore N "ignore"
A Inf N "inf"
A Infinity N "infinity"
+A Info N "info"
A InitGoal F "$init_goal"
A InitProlog F "$init_prolog"
A InStackExpansion N "in stack expansion"
@@ -201,6 +208,7 @@ A Integer N "integer"
A InternalCompilerError N "internal_compiler_error"
A Is N "is"
A J N "j"
+A l N "l"
A Key N "key"
A LDLibraryPath N "LD_LIBRARY_PATH"
A LONGINT N "LongInt"
@@ -286,6 +294,7 @@ A PastEndOfStream N "past_end_of_stream"
A PermissionError N "permission_error"
A Pi N "pi"
A Pipe N "pipe"
+A Priority N "priority"
A Plus N "+"
A Pointer N "pointer"
A Portray F "portray"
@@ -488,9 +497,9 @@ F Dot6 Dot 6
F Dot7 Dot 7
F Dot8 Dot 8
F Dot9 Dot 9
+F DoubleArrow DoubleArrow 2
F DoubleSlash DoubleSlash 2
F EmptySquareBrackets EmptySquareBrackets 2
-F EmptyCurlyBrackets EmptyCurlyBrackets 2
F Eq Eq 2
F Error Error 2
F EvaluationError EvaluationError 1
@@ -517,6 +526,10 @@ F HandleThrow HandleThrow 3
F Hat Hat 2
F I I 2
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 J J 2
F LastExecuteWithin LastExecuteWithin 1
@@ -534,11 +547,13 @@ F NBQueue Queue 4
F Not Not 1
F Obj Obj 1
F Or Semic 2
+F Output Output 1
F PermissionError PermissionError 3
F Plus Plus 2
F Portray Portray 1
F PrintMessage PrintMessage 2
F Procedure Procedure 5
+F Priority Priority 1
F PrologConstraint Prolog 2
F ProtectStack ProtectStack 4
F Query Query 1
diff --git a/H/Atoms.h b/H/Atoms.h
index 988e68f4a..0cdcda777 100644
--- a/H/Atoms.h
+++ b/H/Atoms.h
@@ -59,7 +59,6 @@ typedef struct AtomEntryStruct {
union {
unsigned char uUStrOfAE[MIN_ARRAY]; /* representation of atom as a string */
char uStrOfAE[MIN_ARRAY]; /* representation of atom as a string */
- wchar_t uWStrOfAE[MIN_ARRAY]; /* representation of atom as a string */
struct atom_blob blob[MIN_ARRAY];
} rep;
} AtomEntry;
@@ -75,14 +74,12 @@ typedef struct ExtraAtomEntryStruct {
union {
unsigned char uUStrOfAE[4]; /* representation of atom as a string */
char uStrOfAE[4]; /* representation of atom as a string */
- wchar_t uWStrOfAE[2]; /* representation of atom as a string */
struct atom_blob blob[2];
} rep;
} ExtraAtomEntry;
#define UStrOfAE rep.uUStrOfAE
#define StrOfAE rep.uStrOfAE
-#define WStrOfAE rep.uWStrOfAE
/* Props and Atoms are stored in chains, ending with a NIL */
#ifdef USE_OFFSETS
diff --git a/H/LOCALS b/H/LOCALS
index f4ced4a9e..26ad866d9 100755
--- a/H/LOCALS
+++ b/H/LOCALS
@@ -79,7 +79,6 @@ UInt GlobalArenaOverflows =0L
Int ArenaOverflows =0L
Int DepthArenas =0
-int ArithError =FALSE
struct pred_entry* LastAssertedPred =NULL
struct pred_entry* TmpPred =NULL
char* ScannerStack =NULL
@@ -194,13 +193,10 @@ ADDR LocalBase void
ADDR GlobalBase void
ADDR TrailBase void
ADDR TrailTop void
-char* ErrorMessage void
-Term Error_Term void
-/** error handling info, designed to be easy to pass to the foreign world */
-struct yap_error_descriptor ActiveError void
+/* error handling info, designed to be easy to pass to the foreign world */
+yap_error_descriptor_t* ActiveError =calloc(sizeof(yap_error_descriptor_t),1)
/// pointer to an exception term, from throw
-struct DB_TERM* BallTerm =NULL
jmp_buf IOBotch void
TokEntry* tokptr void
@@ -217,7 +213,7 @@ sigjmp_buf RestartEnv void
char FileNameBuf[YAP_FILENAME_MAX+1] void
char FileNameBuf2[YAP_FILENAME_MAX+1] void
-struct TextBuffer_manager* TextBuffer =Yap_InitTextAllocator()
+struct TextBuffer_manager* TextBuffer =Yap_InitTextAllocator()
// Prolog State
UInt BreakLevel =0
@@ -239,10 +235,8 @@ YAP_ULONG_LONG 2opcount[_std_top+1][_std_top+1] void
struct db_globs* s_dbg void
//eval.c
-yap_error_number matherror =YAP_NO_ERROR
Term mathtt void
char* mathstring =NULL
-yap_error_number CurrentError =YAP_NO_ERROR
//grow.c
int heap_overflows =0
diff --git a/H/ScannerTypes.h b/H/ScannerTypes.h
index e760a67cb..c1667f7d9 100644
--- a/H/ScannerTypes.h
+++ b/H/ScannerTypes.h
@@ -3,13 +3,10 @@ typedef enum TokenKinds {
Number_tok,
Var_tok,
String_tok,
- WString_tok,
BQString_tok,
- WBQString_tok,
Ponctuation_tok,
Error_tok,
QuasiQuotes_tok,
- WQuasiQuotes_tok,
eot_tok
} tkinds;
@@ -29,5 +26,5 @@ typedef struct VARSTRUCT {
CELL hv;
UInt refs;
struct VARSTRUCT *VarLeft, *VarRight;
- char VarRep[1];
+ Atom VarRep;
} VarEntry;
diff --git a/H/Yap.h b/H/Yap.h
index 442ed9603..07bd31a3d 100755
--- a/H/Yap.h
+++ b/H/Yap.h
@@ -462,6 +462,7 @@ extern ADDR Yap_HeapBase;
/* This is ok for Linux, should be ok for everyone */
#define YAP_FILENAME_MAX 1024
+
/*************************************************************************************************
Debugging Support
*************************************************************************************************/
@@ -853,3 +854,5 @@ inline static void LOG0(const char *f, int l, const char *fmt, ...) {
extern bool Yap_embedded, Yap_Server;
#endif /* YAP_H */
+
+#include "YapText.h"
diff --git a/H/YapFlags.h b/H/YapFlags.h
index f13ef7dcc..81869b5b6 100644
--- a/H/YapFlags.h
+++ b/H/YapFlags.h
@@ -204,7 +204,7 @@ typedef struct x_el {
} xarg;
typedef struct struct_param {
- char *name;
+ const char *name;
flag_func type;
int id;
} param_t;
diff --git a/H/YapGFlagInfo.h b/H/YapGFlagInfo.h
index a544e9066..84e7a2e92 100644
--- a/H/YapGFlagInfo.h
+++ b/H/YapGFlagInfo.h
@@ -524,7 +524,7 @@ and _Patch_ is the patch number.
*/
YAP_FLAG(VERSION_DATA_FLAG, "version_data", false, ro, YAP_TVERSION,
NULL), /**<
-`version ` Read-only flag that returns an a compound term with the
+`version ` Read-only flag that returns a compound term with the
current version of YAP. The term will have the name `yap` and arity 4, the first
argument will be the
major version, the second the minor version, the third the patch number, and the
diff --git a/H/YapText.h b/H/YapText.h
index 436e0690e..267667df0 100644
--- a/H/YapText.h
+++ b/H/YapText.h
@@ -31,6 +31,22 @@
#include "../utf8proc/utf8proc.h"
#include "Yap.h"
+/// allocate a temporary text block
+///
+extern void *Malloc(size_t sz USES_REGS);
+extern void *Realloc(void *buf, size_t sz USES_REGS);
+extern void Free(void *buf USES_REGS);
+
+extern int push_text_stack(USES_REGS1);
+extern int pop_text_stack(int lvl USES_REGS);
+extern void *protected_pop_text_stack(int lvl, void *safe, bool tmp,
+ size_t sz USES_REGS);
+
+#ifndef min
+#define min(x, y) (x < y ? x : y)
+#endif
+
+#define MBYTE (1024 * 1024)
/* Character types for tokenizer and write.c */
@@ -142,13 +158,21 @@ INLINE_ONLY EXTERN inline char_kind_t chtype(Int ch) {
#define __android_log_print(...)
#endif
-inline static 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);
+
+INLINE_ONLY inline EXTERN utf8proc_ssize_t get_utf8(const utf8proc_uint8_t *ptr,
+ size_t n,
+ utf8proc_int32_t *valp) {
return utf8proc_iterate(ptr, n, valp);
}
-inline static 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);
+
+INLINE_ONLY inline EXTERN utf8proc_ssize_t put_utf8(utf8proc_uint8_t *ptr,
+ utf8proc_int32_t val) {
return utf8proc_encode_char(val, ptr);
}
@@ -178,7 +202,7 @@ inline static utf8proc_ssize_t strlen_utf8(const utf8proc_uint8_t *pt) {
return rc;
else if (b > 0) {
pt += l;
- rc += l;
+ rc++;
} else {
pt++;
}
@@ -274,7 +298,8 @@ inline static int cmpn_utf8(const utf8proc_uint8_t *pt1,
#define SURROGATE_OFFSET \
((uint32_t)0x10000 - (uint32_t)(0xD800 << 10) - (uint32_t)0xDC00)
-const char *Yap_tokRep(TokEntry *tokptr, encoding_t enc);
+extern const char *Yap_tokText(void *tokptr);
+extern Term Yap_tokRep(void *tokptr);
// standard strings
@@ -658,6 +683,17 @@ static inline Term Yap_AtomicToTDQ(Term t0, Term mod USES_REGS) {
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) {
seq_tv_t inp, out;
@@ -1350,6 +1386,18 @@ static inline Term Yap_UTF8ToString(const char *s USES_REGS) {
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) {
seq_tv_t inp, out;
inp.val.w0 = s;
diff --git a/H/Yapproto.h b/H/Yapproto.h
index 59ed9e29d..5759e71f1 100755
--- a/H/Yapproto.h
+++ b/H/Yapproto.h
@@ -35,9 +35,6 @@ extern struct operator_entry *
extern Atom Yap_LookupAtom(const char *);
extern Atom Yap_ULookupAtom(const unsigned char *);
extern Atom Yap_LookupAtomWithLength(const char *, size_t);
-extern Atom Yap_LookupUTF8Atom(const unsigned char *);
-extern Atom Yap_LookupMaybeWideAtom(const wchar_t *);
-extern Atom Yap_LookupMaybeWideAtomWithLength(const wchar_t *, size_t);
extern Atom Yap_FullLookupAtom(const char *);
extern void Yap_LookupAtomWithAddress(const char *, struct AtomEntryStruct *);
extern Prop Yap_NewPredPropByFunctor(struct FunctorEntryStruct *, Term);
@@ -447,6 +444,8 @@ extern intptr_t system_thread_id(void);
extern void Yap_InitLowLevelTrace(void);
#endif
+extern void *Yap_InitTextAllocator( void );
+
/* udi.c */
extern void Yap_udi_init(void);
extern void Yap_udi_abolish(struct pred_entry *);
diff --git a/H/Yatom.h b/H/Yatom.h
index 95495915a..d5f5d9018 100755
--- a/H/Yatom.h
+++ b/H/Yatom.h
@@ -198,58 +198,6 @@ INLINE_ONLY inline EXTERN PropFlags IsGlobalProperty(int flags) {
return (PropFlags)((flags == GlobalProperty));
}
-/* Wide Atom property */
-typedef struct {
- Prop NextOfPE; /* used to chain properties */
- PropFlags KindOfPE; /* kind of property */
- UInt SizeOfAtom; /* index in module table */
-} WideAtomEntry;
-
-#if USE_OFFSETS_IN_PROPS
-
-INLINE_ONLY inline EXTERN WideAtomEntry *RepWideAtomProp(Prop p);
-
-INLINE_ONLY inline EXTERN WideAtomEntry *RepWideAtomProp(Prop p) {
- return (WideAtomEntry *)(AtomBase + Unsigned(p));
-}
-
-INLINE_ONLY inline EXTERN Prop AbsWideAtomProp(WideAtomEntry *p);
-
-INLINE_ONLY inline EXTERN Prop AbsWideAtomProp(WideAtomEntry *p) {
- return (Prop)(Addr(p) - AtomBase);
-}
-
-#else
-
-INLINE_ONLY inline EXTERN WideAtomEntry *RepWideAtomProp(Prop p);
-
-INLINE_ONLY inline EXTERN WideAtomEntry *RepWideAtomProp(Prop p) {
- return (WideAtomEntry *)(p);
-}
-
-INLINE_ONLY inline EXTERN Prop AbsWideAtomProp(WideAtomEntry *p);
-
-INLINE_ONLY inline EXTERN Prop AbsWideAtomProp(WideAtomEntry *p) {
- return (Prop)(p);
-}
-
-#endif
-
-#define WideAtomProperty ((PropFlags)0xfff8)
-
-INLINE_ONLY inline EXTERN bool IsWideAtomProperty(PropFlags);
-
-INLINE_ONLY inline EXTERN bool IsWideAtomProperty(PropFlags flags) {
- return (flags == WideAtomProperty);
-}
-
-INLINE_ONLY inline EXTERN bool IsWideAtom(Atom);
-
-INLINE_ONLY inline EXTERN bool IsWideAtom(Atom at) {
- return RepAtom(at)->PropsOfAE != NIL &&
- IsWideAtomProperty(RepWideAtomProp(RepAtom(at)->PropsOfAE)->KindOfPE);
-}
-
/** Module property: low-level data used to manage modes.
Includes lists of pedicates, operators and other well-defIned
@@ -1609,15 +1557,8 @@ INLINE_ONLY EXTERN inline void AddPropToAtom(AtomEntry *, PropEntry *p);
INLINE_ONLY EXTERN inline void AddPropToAtom(AtomEntry *ae, PropEntry *p) {
/* old properties should be always last, and wide atom properties
should always be first */
- if (ae->PropsOfAE != NIL &&
- RepProp(ae->PropsOfAE)->KindOfPE == WideAtomProperty) {
- PropEntry *pp = RepProp(ae->PropsOfAE);
- p->NextOfPE = pp->NextOfPE;
- pp->NextOfPE = AbsProp(p);
- } else {
p->NextOfPE = ae->PropsOfAE;
ae->PropsOfAE = AbsProp(p);
- }
}
// auxiliary functions
diff --git a/H/absmi.h b/H/absmi.h
index d103ee25a..9b7a79113 100755
--- a/H/absmi.h
+++ b/H/absmi.h
@@ -99,7 +99,8 @@ register struct yami *P1REG asm("bp"); /* can't use yamop before Yap.h */
#define LIMITED_PREFETCH 1
#endif /* __x86_64__ */
-#if defined(__arm__) || defined(__thumb__) || defined(mips) || defined(__mips64) || defined(__aarch64__)
+#if defined(__arm__) || defined(__thumb__) || defined(mips) || \
+ defined(__mips64) || defined(__aarch64__)
#define Y_IN_MEM 1
#define S_IN_MEM 1
@@ -215,13 +216,13 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define BEGP(TMP) \
{ \
- register CELL *TMP
+ register CELL *TMP
#define ENDP(TMP) }
#define BEGD(TMP) \
{ \
- register CELL TMP
+ register CELL TMP
#define ENDD(TMP) }
@@ -229,7 +230,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define BEGCHO(TMP) \
{ \
- register choiceptr TMP
+ register choiceptr TMP
#define ENDCHO(TMP) }
@@ -242,7 +243,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define CACHE_Y(A) \
{ \
- register CELL *S_YREG = ((CELL *)(A))
+ register CELL *S_YREG = ((CELL *)(A))
#define ENDCACHE_Y() \
YREG = S_YREG; \
@@ -258,7 +259,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define CACHE_Y(A) \
{ \
- YREG = ((CELL *)(A))
+ YREG = ((CELL *)(A))
#define ENDCACHE_Y() }
@@ -268,7 +269,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define CACHE_Y_AS_ENV(A) \
{ \
- register CELL *ENV_YREG = (A)
+ register CELL *ENV_YREG = (A)
#define FETCH_Y_FROM_ENV(A) ENV_YREG = (A)
@@ -292,7 +293,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define CACHE_Y_AS_ENV(A) \
{ \
- YREG = (A)
+ YREG = (A)
#define FETCH_Y_FROM_ENV(A) (A)
@@ -345,7 +346,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define CACHE_TR(A) \
{ \
- register tr_fr_ptr S_TR = (A)
+ register tr_fr_ptr S_TR = (A)
#define RESTORE_TR() TR = S_TR
@@ -467,7 +468,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define ALWAYS_START_PREFETCH(TYPE) \
{ \
register void *to_go; \
- DO_PREFETCH(TYPE)
+ DO_PREFETCH(TYPE)
#if YAP_JIT
#define ALWAYS_LOOKAHEAD(WHAT) \
@@ -487,7 +488,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define ALWAYS_START_PREFETCH_W(TYPE) \
{ \
register void *to_go; \
- DO_PREFETCH_W(TYPE)
+ DO_PREFETCH_W(TYPE)
#else
@@ -909,14 +910,14 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
(ExpEnv.config_struc.current_displacement) \
? print_instruction(PREG, ON_PROFILED_INTERPRETER) \
: print_instruction(PREG, ON_INTERPRETER); \
- START_PREFETCH(Type)
+ START_PREFETCH(Type)
#define OpW(Label, Type) \
_##Label : { \
(ExpEnv.config_struc.current_displacement) \
? print_instruction(PREG, ON_PROFILED_INTERPRETER) \
: print_instruction(PREG, ON_INTERPRETER); \
- START_PREFETCH_W(Type)
+ START_PREFETCH_W(Type)
#define BOp(Label, Type) \
_##Label : { \
@@ -929,7 +930,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
(ExpEnv.config_struc.current_displacement) \
? print_instruction(PREG, ON_PROFILED_INTERPRETER) \
: print_instruction(PREG, ON_INTERPRETER); \
- INIT_PREFETCH()
+ INIT_PREFETCH()
#define OpRW(Label, Type) \
_##Label : { \
@@ -942,12 +943,12 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define Op(Label, Type) \
_##Label : { \
print_instruction(PREG, ON_INTERPRETER); \
- START_PREFETCH(Type)
+ START_PREFETCH(Type)
#define OpW(Label, Type) \
_##Label : { \
print_instruction(PREG, ON_INTERPRETER); \
- START_PREFETCH_W(Type)
+ START_PREFETCH_W(Type)
#define BOp(Label, Type) \
_##Label : { \
@@ -956,7 +957,7 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define PBOp(Label, Type) \
_##Label : { \
print_instruction(PREG, ON_INTERPRETER); \
- INIT_PREFETCH()
+ INIT_PREFETCH()
#define OpRW(Label, Type) \
_##Label : { \
@@ -968,17 +969,17 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define Op(Label, Type) \
_##Label : { \
- START_PREFETCH(Type)
+ START_PREFETCH(Type)
#define OpW(Label, Type) \
_##Label : { \
- START_PREFETCH_W(Type)
+ START_PREFETCH_W(Type)
#define BOp(Label, Type) _##Label : {
#define PBOp(Label, Type) \
_##Label : { \
- INIT_PREFETCH()
+ INIT_PREFETCH()
#define OpRW(Label, Type) _##Label : {
@@ -1000,17 +1001,17 @@ INLINE_ONLY inline EXTERN void restore_absmi_regs(REGSTORE *old_regs) {
#define Op(Label, Type) \
case _##Label: { \
- START_PREFETCH(Type)
+ START_PREFETCH(Type)
#define OpW(Label, Type) \
case _##Label: { \
- START_PREFETCH_W(Type)
+ START_PREFETCH_W(Type)
#define BOp(Label, Type) case _##Label: {
#define PBOp(Label, Type) \
case _##Label: { \
- INIT_PREFETCH()
+ INIT_PREFETCH()
#define OpRW(Label, Type) case _##Label: {
@@ -2075,7 +2076,8 @@ cufail:
#endif
-#if /* defined(IN_ABSMI_C) ||*/ defined(IN_INLINES_C) /*|| defined(IN_TRACED_ABSMI_C) */
+#if /* defined(IN_ABSMI_C) ||*/ defined( \
+ IN_INLINES_C) /*|| defined(IN_TRACED_ABSMI_C) */
static int iequ_complex(register CELL *pt0, register CELL *pt0_end,
register CELL *pt1) {
@@ -2450,4 +2452,11 @@ extern yamop *headoftrace;
ENDD(d0);
#endif
+#define Yap_AsmError(e, d) \
+ { \
+ saveregs(); \
+ Yap_ThrowError(e, d, "while exwcuting inlined built-in"); \
+ setregs(); \
+ }
+
#endif // ABSMI_H
diff --git a/H/arith2.h b/H/arith2.h
index 201d27155..fe815f14a 100755
--- a/H/arith2.h
+++ b/H/arith2.h
@@ -301,12 +301,12 @@ static Term p_div(Term t1, Term t2 USES_REGS) {
Int i1 = IntegerOfTerm(t1), i2 = IntegerOfTerm(t2);
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) {
#ifdef USE_GMP
return Yap_gmp_add_ints(Int_MAX, 1);
#else
- return Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, t1,
+ Yap_ArithError(EVALUATION_ERROR_INT_OVERFLOW, t1,
"rem/2 with %d and %d", i1, i2);
#endif
} else {
@@ -314,7 +314,7 @@ static Term p_div(Term t1, Term t2 USES_REGS) {
}
}
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "// /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "// /2");
case big_int_e:
#ifdef USE_GMP
/* dividing a bignum by an integer */
@@ -325,7 +325,7 @@ static Term p_div(Term t1, Term t2 USES_REGS) {
}
break;
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "// /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t1, "// /2");
case big_int_e:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
@@ -336,7 +336,7 @@ static Term p_div(Term t1, Term t2 USES_REGS) {
/* two bignums */
return Yap_gmp_div_big_big(t1, t2);
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "// /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "// /2");
default:
RERROR();
}
@@ -355,7 +355,7 @@ static Term p_and(Term t1, Term t2 USES_REGS) {
/* two integers */
RINT(IntegerOfTerm(t1) & IntegerOfTerm(t2));
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\ /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\ /2");
case big_int_e:
#ifdef USE_GMP
return Yap_gmp_and_int_big(IntegerOfTerm(t1), t2);
@@ -365,7 +365,7 @@ static Term p_and(Term t1, Term t2 USES_REGS) {
}
break;
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "/\\ /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t1, "/\\ /2");
case big_int_e:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
@@ -376,7 +376,7 @@ static Term p_and(Term t1, Term t2 USES_REGS) {
/* two bignums */
return Yap_gmp_and_big_big(t1, t2);
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\ /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "/\\ /2");
default:
RERROR();
}
@@ -395,7 +395,7 @@ static Term p_or(Term t1, Term t2 USES_REGS) {
/* two integers */
RINT(IntegerOfTerm(t1) | IntegerOfTerm(t2));
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2");
case big_int_e:
#ifdef USE_GMP
return Yap_gmp_ior_int_big(IntegerOfTerm(t1), t2);
@@ -405,7 +405,7 @@ static Term p_or(Term t1, Term t2 USES_REGS) {
}
break;
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "\\/ /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t1, "\\/ /2");
case big_int_e:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
@@ -416,7 +416,7 @@ static Term p_or(Term t1, Term t2 USES_REGS) {
/* two bignums */
return Yap_gmp_ior_big_big(t1, t2);
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "\\/ /2");
default:
RERROR();
}
@@ -438,33 +438,33 @@ static Term p_sll(Term t1, Term t2 USES_REGS) {
if (i2 <= 0) {
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));
}
return do_sll(IntegerOfTerm(t1), i2 PASS_REGS);
}
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "<2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "<2");
case big_int_e:
#ifdef USE_GMP
- return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, "<2");
+ Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, "<2");
#endif
default:
RERROR();
}
break;
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t1, "<< /2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t1, "<< /2");
case big_int_e:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
case long_int_e:
return Yap_gmp_sll_big_int(t1, IntegerOfTerm(t2));
case big_int_e:
- return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
+ Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, "<2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, "<2");
default:
RERROR();
}
@@ -486,33 +486,33 @@ static Term p_slr(Term t1, Term t2 USES_REGS) {
if (i2 < 0) {
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);
}
RINT(SLR(IntegerOfTerm(t1), i2));
}
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, ">>/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, ">>/2");
case big_int_e:
#ifdef USE_GMP
- return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
+ Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
#endif
default:
RERROR();
}
break;
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t1, ">>/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t1, ">>/2");
case big_int_e:
#ifdef USE_GMP
switch (ETypeOfTerm(t2)) {
case long_int_e:
return Yap_gmp_sll_big_int(t1, -IntegerOfTerm(t2));
case big_int_e:
- return Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
+ Yap_ArithError(RESOURCE_ERROR_HUGE_INT, t2, ">>/2");
case double_e:
- return Yap_ArithError(TYPE_ERROR_INTEGER, t2, ">>/2");
+ Yap_ArithError(TYPE_ERROR_INTEGER, t2, ">>/2");
default:
RERROR();
}
diff --git a/H/eval.h b/H/eval.h
index 81be993d7..5b1117a59 100644
--- a/H/eval.h
+++ b/H/eval.h
@@ -375,6 +375,7 @@ Functor EvalArg(Term);
eval_flt = (F); \
return (FFloat); \
}
+
#define REvalError() \
{ return (FError); }
@@ -406,9 +407,13 @@ yamop *Yap_EvalError__(const char *, const char *, int, yap_error_number, Term,
...);
#define Yap_ArithError(id, t, ...) \
- Yap_ArithError__(__FILE__, __FUNCTION__, __LINE__, id, t, __VA_ARGS__)
-Int Yap_ArithError__(const char *, const char *, int, yap_error_number, Term,
- ...);
+ Yap_ThrowError__(__FILE__, __FUNCTION__, __LINE__, id, t, __VA_ARGS__)
+#define Yap_BinError(id) \
+ Yap_Error__(__FILE__, __FUNCTION__, __LINE__, id, 0L, "")
+#define Yap_AbsmiError(id) \
+ Yap_Error__(__FILE__, __FUNCTION__, __LINE__, id, 0L, "")
+extern Int Yap_ArithError__(const char *, const char *, int, yap_error_number,
+ Term, ...);
#include "inline-only.h"
@@ -429,7 +434,7 @@ INLINE_ONLY inline EXTERN Term Yap_Eval__(Term t USES_REGS) {
#if HAVE_FECLEAREXCEPT
inline static void Yap_ClearExs(void) { feclearexcept(FE_ALL_EXCEPT); }
#else
-inline static void Yap_ClearExs(void) { }
+inline static void Yap_ClearExs(void) {}
#endif
inline static yap_error_number Yap_FoundArithError__(USES_REGS1) {
@@ -463,7 +468,11 @@ Atom Yap_NameOfBinaryOp(int i);
#define RINT(v) return (MkIntegerTerm(v))
#define RFLOAT(v) return (MkFloatTerm(v))
#define RBIG(v) return (Yap_MkBigIntTerm(v))
-#define RERROR() return (0L)
+#define RERROR() \
+ { \
+ Yap_BinError(LOCAL_Error_TYPE); \
+ return (0L); \
+ }
static inline blob_type ETypeOfTerm(Term t) {
if (IsIntTerm(t))
diff --git a/H/generated/dlocals.h b/H/generated/dlocals.h
index 50ec4e7a1..2034b0403 100644
--- a/H/generated/dlocals.h
+++ b/H/generated/dlocals.h
@@ -121,8 +121,6 @@
#define REMOTE_ArenaOverflows(wid) REMOTE(wid)->ArenaOverflows_
#define LOCAL_DepthArenas LOCAL->DepthArenas_
#define REMOTE_DepthArenas(wid) REMOTE(wid)->DepthArenas_
-#define LOCAL_ArithError LOCAL->ArithError_
-#define REMOTE_ArithError(wid) REMOTE(wid)->ArithError_
#define LOCAL_LastAssertedPred LOCAL->LastAssertedPred_
#define REMOTE_LastAssertedPred(wid) REMOTE(wid)->LastAssertedPred_
#define LOCAL_TmpPred LOCAL->TmpPred_
@@ -288,16 +286,10 @@
#define REMOTE_TrailBase(wid) REMOTE(wid)->TrailBase_
#define LOCAL_TrailTop LOCAL->TrailTop_
#define REMOTE_TrailTop(wid) REMOTE(wid)->TrailTop_
-#define LOCAL_ErrorMessage LOCAL->ErrorMessage_
-#define REMOTE_ErrorMessage(wid) REMOTE(wid)->ErrorMessage_
-#define LOCAL_Error_Term LOCAL->Error_Term_
-#define REMOTE_Error_Term(wid) REMOTE(wid)->Error_Term_
#define LOCAL_ActiveError LOCAL->ActiveError_
#define REMOTE_ActiveError(wid) REMOTE(wid)->ActiveError_
-#define LOCAL_BallTerm LOCAL->BallTerm_
-#define REMOTE_BallTerm(wid) REMOTE(wid)->BallTerm_
#define LOCAL_IOBotch LOCAL->IOBotch_
#define REMOTE_IOBotch(wid) REMOTE(wid)->IOBotch_
#define LOCAL_tokptr LOCAL->tokptr_
@@ -352,14 +344,10 @@
#define LOCAL_s_dbg LOCAL->s_dbg_
#define REMOTE_s_dbg(wid) REMOTE(wid)->s_dbg_
-#define LOCAL_matherror LOCAL->matherror_
-#define REMOTE_matherror(wid) REMOTE(wid)->matherror_
#define LOCAL_mathtt LOCAL->mathtt_
#define REMOTE_mathtt(wid) REMOTE(wid)->mathtt_
#define LOCAL_mathstring LOCAL->mathstring_
#define REMOTE_mathstring(wid) REMOTE(wid)->mathstring_
-#define LOCAL_CurrentError LOCAL->CurrentError_
-#define REMOTE_CurrentError(wid) REMOTE(wid)->CurrentError_
#define LOCAL_heap_overflows LOCAL->heap_overflows_
#define REMOTE_heap_overflows(wid) REMOTE(wid)->heap_overflows_
diff --git a/H/generated/hlocals.h b/H/generated/hlocals.h
index 0dbbdc4e0..46a00dad4 100644
--- a/H/generated/hlocals.h
+++ b/H/generated/hlocals.h
@@ -69,7 +69,6 @@ typedef struct worker_local {
UInt GlobalArenaOverflows_;
Int ArenaOverflows_;
Int DepthArenas_;
- int ArithError_;
struct pred_entry* LastAssertedPred_;
struct pred_entry* TmpPred_;
char* ScannerStack_;
@@ -164,12 +163,9 @@ typedef struct worker_local {
ADDR GlobalBase_;
ADDR TrailBase_;
ADDR TrailTop_;
- char* ErrorMessage_;
- Term Error_Term_;
-/** error handling info, designed to be easy to pass to the foreign world */
- struct yap_error_descriptor ActiveError_;
+/* error handling info, designed to be easy to pass to the foreign world */
+ yap_error_descriptor_t* ActiveError_;
/// pointer to an exception term, from throw
- struct DB_TERM* BallTerm_;
jmp_buf IOBotch_;
TokEntry* tokptr_;
TokEntry* toktide_;
@@ -201,10 +197,8 @@ typedef struct worker_local {
//dbase.c
struct db_globs* s_dbg_;
//eval.c
- yap_error_number matherror_;
Term mathtt_;
char* mathstring_;
- yap_error_number CurrentError_;
//grow.c
int heap_overflows_;
Int total_heap_overflow_time_;
diff --git a/H/generated/iatoms.h b/H/generated/iatoms.h
index e92b86e85..9e01498dd 100644
--- a/H/generated/iatoms.h
+++ b/H/generated/iatoms.h
@@ -24,9 +24,14 @@
AtomAttributedModule = Yap_LookupAtom("attributes_module"); TermAttributedModule = MkAtomTerm(AtomAttributedModule);
AtomDoubleArrow = Yap_LookupAtom("-->"); TermDoubleArrow = MkAtomTerm(AtomDoubleArrow);
AtomAssert = Yap_LookupAtom(":-"); TermAssert = MkAtomTerm(AtomAssert);
+ AtomBeginBracket = Yap_LookupAtom("("); TermBeginBracket = MkAtomTerm(AtomBeginBracket);
+ AtomEndBracket = Yap_LookupAtom(")"); TermEndBracket = MkAtomTerm(AtomEndBracket);
+ AtomBeginSquareBracket = Yap_LookupAtom("["); TermBeginSquareBracket = MkAtomTerm(AtomBeginSquareBracket);
+ AtomEndSquareBracket = Yap_LookupAtom("]"); TermEndSquareBracket = MkAtomTerm(AtomEndSquareBracket);
+ AtomBeginCurlyBracket = Yap_LookupAtom("{"); TermBeginCurlyBracket = MkAtomTerm(AtomBeginCurlyBracket);
+ AtomEndCurlyBracket = Yap_LookupAtom("}"); TermEndCurlyBracket = MkAtomTerm(AtomEndCurlyBracket);
AtomEmptyBrackets = Yap_LookupAtom("()"); TermEmptyBrackets = MkAtomTerm(AtomEmptyBrackets);
AtomEmptySquareBrackets = Yap_LookupAtom("[]"); TermEmptySquareBrackets = MkAtomTerm(AtomEmptySquareBrackets);
- AtomEmptyCurlyBrackets = Yap_LookupAtom("{}"); TermEmptyCurlyBrackets = MkAtomTerm(AtomEmptyCurlyBrackets);
AtomAsserta = Yap_LookupAtom("asserta"); TermAsserta = MkAtomTerm(AtomAsserta);
AtomAssertaStatic = Yap_LookupAtom("asserta_static"); TermAssertaStatic = MkAtomTerm(AtomAssertaStatic);
AtomAssertz = Yap_LookupAtom("assertz"); TermAssertz = MkAtomTerm(AtomAssertz);
@@ -63,6 +68,7 @@
AtomCharset = Yap_LookupAtom("charset"); TermCharset = MkAtomTerm(AtomCharset);
AtomChType = Yap_FullLookupAtom("$char_type"); TermChType = MkAtomTerm(AtomChType);
AtomCleanCall = Yap_FullLookupAtom("$clean_call"); TermCleanCall = MkAtomTerm(AtomCleanCall);
+ AtomClose = Yap_LookupAtom("close"); TermClose = MkAtomTerm(AtomClose);
AtomColon = Yap_LookupAtom(":"); TermColon = MkAtomTerm(AtomColon);
AtomCodeSpace = Yap_LookupAtom("code_space"); TermCodeSpace = MkAtomTerm(AtomCodeSpace);
AtomCodes = Yap_LookupAtom("codes"); TermCodes = MkAtomTerm(AtomCodes);
@@ -84,7 +90,7 @@
AtomCurrentModule = Yap_FullLookupAtom("$current_module"); TermCurrentModule = MkAtomTerm(AtomCurrentModule);
AtomCut = Yap_LookupAtom("!"); TermCut = MkAtomTerm(AtomCut);
AtomCutBy = Yap_FullLookupAtom("$cut_by"); TermCutBy = MkAtomTerm(AtomCutBy);
- AtomDAbort = Yap_FullLookupAtom("$abort"); TermDAbort = MkAtomTerm(AtomDAbort);
+ AtomDAbort = Yap_LookupAtom("abort"); TermDAbort = MkAtomTerm(AtomDAbort);
AtomDBLoad = Yap_FullLookupAtom("$db_load"); TermDBLoad = MkAtomTerm(AtomDBLoad);
AtomDBREF = Yap_LookupAtom("DBRef"); TermDBREF = MkAtomTerm(AtomDBREF);
AtomDBReference = Yap_LookupAtom("db_reference"); TermDBReference = MkAtomTerm(AtomDBReference);
@@ -185,6 +191,7 @@
AtomIgnore = Yap_LookupAtom("ignore"); TermIgnore = MkAtomTerm(AtomIgnore);
AtomInf = Yap_LookupAtom("inf"); TermInf = MkAtomTerm(AtomInf);
AtomInfinity = Yap_LookupAtom("infinity"); TermInfinity = MkAtomTerm(AtomInfinity);
+ AtomInfo = Yap_LookupAtom("info"); TermInfo = MkAtomTerm(AtomInfo);
AtomInitGoal = Yap_FullLookupAtom("$init_goal"); TermInitGoal = MkAtomTerm(AtomInitGoal);
AtomInitProlog = Yap_FullLookupAtom("$init_prolog"); TermInitProlog = MkAtomTerm(AtomInitProlog);
AtomInStackExpansion = Yap_LookupAtom("in stack expansion"); TermInStackExpansion = MkAtomTerm(AtomInStackExpansion);
@@ -196,6 +203,7 @@
AtomInternalCompilerError = Yap_LookupAtom("internal_compiler_error"); TermInternalCompilerError = MkAtomTerm(AtomInternalCompilerError);
AtomIs = Yap_LookupAtom("is"); TermIs = MkAtomTerm(AtomIs);
AtomJ = Yap_LookupAtom("j"); TermJ = MkAtomTerm(AtomJ);
+ Atoml = Yap_LookupAtom("l"); Terml = MkAtomTerm(Atoml);
AtomKey = Yap_LookupAtom("key"); TermKey = MkAtomTerm(AtomKey);
AtomLDLibraryPath = Yap_LookupAtom("LD_LIBRARY_PATH"); TermLDLibraryPath = MkAtomTerm(AtomLDLibraryPath);
AtomLONGINT = Yap_LookupAtom("LongInt"); TermLONGINT = MkAtomTerm(AtomLONGINT);
@@ -281,6 +289,7 @@
AtomPermissionError = Yap_LookupAtom("permission_error"); TermPermissionError = MkAtomTerm(AtomPermissionError);
AtomPi = Yap_LookupAtom("pi"); TermPi = MkAtomTerm(AtomPi);
AtomPipe = Yap_LookupAtom("pipe"); TermPipe = MkAtomTerm(AtomPipe);
+ AtomPriority = Yap_LookupAtom("priority"); TermPriority = MkAtomTerm(AtomPriority);
AtomPlus = Yap_LookupAtom("+"); TermPlus = MkAtomTerm(AtomPlus);
AtomPointer = Yap_LookupAtom("pointer"); TermPointer = MkAtomTerm(AtomPointer);
AtomPortray = Yap_FullLookupAtom("portray"); TermPortray = MkAtomTerm(AtomPortray);
@@ -483,9 +492,9 @@
FunctorDot7 = Yap_MkFunctor(AtomDot,7);
FunctorDot8 = Yap_MkFunctor(AtomDot,8);
FunctorDot9 = Yap_MkFunctor(AtomDot,9);
+ FunctorDoubleArrow = Yap_MkFunctor(AtomDoubleArrow,2);
FunctorDoubleSlash = Yap_MkFunctor(AtomDoubleSlash,2);
FunctorEmptySquareBrackets = Yap_MkFunctor(AtomEmptySquareBrackets,2);
- FunctorEmptyCurlyBrackets = Yap_MkFunctor(AtomEmptyCurlyBrackets,2);
FunctorEq = Yap_MkFunctor(AtomEq,2);
FunctorError = Yap_MkFunctor(AtomError,2);
FunctorEvaluationError = Yap_MkFunctor(AtomEvaluationError,1);
@@ -512,6 +521,10 @@
FunctorHat = Yap_MkFunctor(AtomHat,2);
FunctorI = Yap_MkFunctor(AtomI,2);
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);
FunctorJ = Yap_MkFunctor(AtomJ,2);
FunctorLastExecuteWithin = Yap_MkFunctor(AtomLastExecuteWithin,1);
@@ -529,11 +542,13 @@
FunctorNot = Yap_MkFunctor(AtomNot,1);
FunctorObj = Yap_MkFunctor(AtomObj,1);
FunctorOr = Yap_MkFunctor(AtomSemic,2);
+ FunctorOutput = Yap_MkFunctor(AtomOutput,1);
FunctorPermissionError = Yap_MkFunctor(AtomPermissionError,3);
FunctorPlus = Yap_MkFunctor(AtomPlus,2);
FunctorPortray = Yap_MkFunctor(AtomPortray,1);
FunctorPrintMessage = Yap_MkFunctor(AtomPrintMessage,2);
FunctorProcedure = Yap_MkFunctor(AtomProcedure,5);
+ FunctorPriority = Yap_MkFunctor(AtomPriority,1);
FunctorPrologConstraint = Yap_MkFunctor(AtomProlog,2);
FunctorProtectStack = Yap_MkFunctor(AtomProtectStack,4);
FunctorQuery = Yap_MkFunctor(AtomQuery,1);
diff --git a/H/generated/ilocals.h b/H/generated/ilocals.h
index b290c118d..2ada8ba04 100755
--- a/H/generated/ilocals.h
+++ b/H/generated/ilocals.h
@@ -69,7 +69,6 @@ static void InitWorker(int wid) {
REMOTE_GlobalArenaOverflows(wid) = 0L;
REMOTE_ArenaOverflows(wid) = 0L;
REMOTE_DepthArenas(wid) = 0;
- REMOTE_ArithError(wid) = FALSE;
REMOTE_LastAssertedPred(wid) = NULL;
REMOTE_TmpPred(wid) = NULL;
REMOTE_ScannerStack(wid) = NULL;
@@ -165,14 +164,11 @@ static void InitWorker(int wid) {
+ REMOTE_ActiveError(wid) = calloc(sizeof(yap_error_descriptor_t),1);
- REMOTE_BallTerm(wid) = NULL;
-
-
-
@@ -201,10 +197,8 @@ static void InitWorker(int wid) {
- REMOTE_matherror(wid) = YAP_NO_ERROR;
REMOTE_mathstring(wid) = NULL;
- REMOTE_CurrentError(wid) = YAP_NO_ERROR;
REMOTE_heap_overflows(wid) = 0;
REMOTE_total_heap_overflow_time(wid) = 0;
diff --git a/H/generated/ratoms.h b/H/generated/ratoms.h
index 563df5b3f..1f485c034 100644
--- a/H/generated/ratoms.h
+++ b/H/generated/ratoms.h
@@ -24,9 +24,14 @@
AtomAttributedModule = AtomAdjust(AtomAttributedModule); TermAttributedModule = MkAtomTerm(AtomAttributedModule);
AtomDoubleArrow = AtomAdjust(AtomDoubleArrow); TermDoubleArrow = MkAtomTerm(AtomDoubleArrow);
AtomAssert = AtomAdjust(AtomAssert); TermAssert = MkAtomTerm(AtomAssert);
+ AtomBeginBracket = AtomAdjust(AtomBeginBracket); TermBeginBracket = MkAtomTerm(AtomBeginBracket);
+ AtomEndBracket = AtomAdjust(AtomEndBracket); TermEndBracket = MkAtomTerm(AtomEndBracket);
+ AtomBeginSquareBracket = AtomAdjust(AtomBeginSquareBracket); TermBeginSquareBracket = MkAtomTerm(AtomBeginSquareBracket);
+ AtomEndSquareBracket = AtomAdjust(AtomEndSquareBracket); TermEndSquareBracket = MkAtomTerm(AtomEndSquareBracket);
+ AtomBeginCurlyBracket = AtomAdjust(AtomBeginCurlyBracket); TermBeginCurlyBracket = MkAtomTerm(AtomBeginCurlyBracket);
+ AtomEndCurlyBracket = AtomAdjust(AtomEndCurlyBracket); TermEndCurlyBracket = MkAtomTerm(AtomEndCurlyBracket);
AtomEmptyBrackets = AtomAdjust(AtomEmptyBrackets); TermEmptyBrackets = MkAtomTerm(AtomEmptyBrackets);
AtomEmptySquareBrackets = AtomAdjust(AtomEmptySquareBrackets); TermEmptySquareBrackets = MkAtomTerm(AtomEmptySquareBrackets);
- AtomEmptyCurlyBrackets = AtomAdjust(AtomEmptyCurlyBrackets); TermEmptyCurlyBrackets = MkAtomTerm(AtomEmptyCurlyBrackets);
AtomAsserta = AtomAdjust(AtomAsserta); TermAsserta = MkAtomTerm(AtomAsserta);
AtomAssertaStatic = AtomAdjust(AtomAssertaStatic); TermAssertaStatic = MkAtomTerm(AtomAssertaStatic);
AtomAssertz = AtomAdjust(AtomAssertz); TermAssertz = MkAtomTerm(AtomAssertz);
@@ -63,6 +68,7 @@
AtomCharset = AtomAdjust(AtomCharset); TermCharset = MkAtomTerm(AtomCharset);
AtomChType = AtomAdjust(AtomChType); TermChType = MkAtomTerm(AtomChType);
AtomCleanCall = AtomAdjust(AtomCleanCall); TermCleanCall = MkAtomTerm(AtomCleanCall);
+ AtomClose = AtomAdjust(AtomClose); TermClose = MkAtomTerm(AtomClose);
AtomColon = AtomAdjust(AtomColon); TermColon = MkAtomTerm(AtomColon);
AtomCodeSpace = AtomAdjust(AtomCodeSpace); TermCodeSpace = MkAtomTerm(AtomCodeSpace);
AtomCodes = AtomAdjust(AtomCodes); TermCodes = MkAtomTerm(AtomCodes);
@@ -185,6 +191,7 @@
AtomIgnore = AtomAdjust(AtomIgnore); TermIgnore = MkAtomTerm(AtomIgnore);
AtomInf = AtomAdjust(AtomInf); TermInf = MkAtomTerm(AtomInf);
AtomInfinity = AtomAdjust(AtomInfinity); TermInfinity = MkAtomTerm(AtomInfinity);
+ AtomInfo = AtomAdjust(AtomInfo); TermInfo = MkAtomTerm(AtomInfo);
AtomInitGoal = AtomAdjust(AtomInitGoal); TermInitGoal = MkAtomTerm(AtomInitGoal);
AtomInitProlog = AtomAdjust(AtomInitProlog); TermInitProlog = MkAtomTerm(AtomInitProlog);
AtomInStackExpansion = AtomAdjust(AtomInStackExpansion); TermInStackExpansion = MkAtomTerm(AtomInStackExpansion);
@@ -196,6 +203,7 @@
AtomInternalCompilerError = AtomAdjust(AtomInternalCompilerError); TermInternalCompilerError = MkAtomTerm(AtomInternalCompilerError);
AtomIs = AtomAdjust(AtomIs); TermIs = MkAtomTerm(AtomIs);
AtomJ = AtomAdjust(AtomJ); TermJ = MkAtomTerm(AtomJ);
+ Atoml = AtomAdjust(Atoml); Terml = MkAtomTerm(Atoml);
AtomKey = AtomAdjust(AtomKey); TermKey = MkAtomTerm(AtomKey);
AtomLDLibraryPath = AtomAdjust(AtomLDLibraryPath); TermLDLibraryPath = MkAtomTerm(AtomLDLibraryPath);
AtomLONGINT = AtomAdjust(AtomLONGINT); TermLONGINT = MkAtomTerm(AtomLONGINT);
@@ -281,6 +289,7 @@
AtomPermissionError = AtomAdjust(AtomPermissionError); TermPermissionError = MkAtomTerm(AtomPermissionError);
AtomPi = AtomAdjust(AtomPi); TermPi = MkAtomTerm(AtomPi);
AtomPipe = AtomAdjust(AtomPipe); TermPipe = MkAtomTerm(AtomPipe);
+ AtomPriority = AtomAdjust(AtomPriority); TermPriority = MkAtomTerm(AtomPriority);
AtomPlus = AtomAdjust(AtomPlus); TermPlus = MkAtomTerm(AtomPlus);
AtomPointer = AtomAdjust(AtomPointer); TermPointer = MkAtomTerm(AtomPointer);
AtomPortray = AtomAdjust(AtomPortray); TermPortray = MkAtomTerm(AtomPortray);
@@ -483,9 +492,9 @@
FunctorDot7 = FuncAdjust(FunctorDot7);
FunctorDot8 = FuncAdjust(FunctorDot8);
FunctorDot9 = FuncAdjust(FunctorDot9);
+ FunctorDoubleArrow = FuncAdjust(FunctorDoubleArrow);
FunctorDoubleSlash = FuncAdjust(FunctorDoubleSlash);
FunctorEmptySquareBrackets = FuncAdjust(FunctorEmptySquareBrackets);
- FunctorEmptyCurlyBrackets = FuncAdjust(FunctorEmptyCurlyBrackets);
FunctorEq = FuncAdjust(FunctorEq);
FunctorError = FuncAdjust(FunctorError);
FunctorEvaluationError = FuncAdjust(FunctorEvaluationError);
@@ -512,6 +521,10 @@
FunctorHat = FuncAdjust(FunctorHat);
FunctorI = FuncAdjust(FunctorI);
FunctorId = FuncAdjust(FunctorId);
+ FunctorInfo1 = FuncAdjust(FunctorInfo1);
+ FunctorInfo2 = FuncAdjust(FunctorInfo2);
+ FunctorInfo3 = FuncAdjust(FunctorInfo3);
+ FunctorInfo4 = FuncAdjust(FunctorInfo4);
FunctorIs = FuncAdjust(FunctorIs);
FunctorJ = FuncAdjust(FunctorJ);
FunctorLastExecuteWithin = FuncAdjust(FunctorLastExecuteWithin);
@@ -529,11 +542,13 @@
FunctorNot = FuncAdjust(FunctorNot);
FunctorObj = FuncAdjust(FunctorObj);
FunctorOr = FuncAdjust(FunctorOr);
+ FunctorOutput = FuncAdjust(FunctorOutput);
FunctorPermissionError = FuncAdjust(FunctorPermissionError);
FunctorPlus = FuncAdjust(FunctorPlus);
FunctorPortray = FuncAdjust(FunctorPortray);
FunctorPrintMessage = FuncAdjust(FunctorPrintMessage);
FunctorProcedure = FuncAdjust(FunctorProcedure);
+ FunctorPriority = FuncAdjust(FunctorPriority);
FunctorPrologConstraint = FuncAdjust(FunctorPrologConstraint);
FunctorProtectStack = FuncAdjust(FunctorProtectStack);
FunctorQuery = FuncAdjust(FunctorQuery);
diff --git a/H/generated/rlocals.h b/H/generated/rlocals.h
index d376d9bde..77f95bc68 100644
--- a/H/generated/rlocals.h
+++ b/H/generated/rlocals.h
@@ -86,7 +86,6 @@ static void RestoreWorker(int wid USES_REGS) {
-
#ifdef COROUTINING
@@ -187,9 +186,6 @@ static void RestoreWorker(int wid USES_REGS) {
-
-
-
@@ -215,8 +211,6 @@ static void RestoreWorker(int wid USES_REGS) {
-
-
#ifdef LOAD_DYLD
#endif
diff --git a/H/generated/tatoms.h b/H/generated/tatoms.h
index eb4cc27bc..561d48c72 100644
--- a/H/generated/tatoms.h
+++ b/H/generated/tatoms.h
@@ -24,9 +24,14 @@ EXTERNAL Atom AtomArrow; EXTERNAL Term TermArrow;
EXTERNAL Atom AtomAttributedModule; EXTERNAL Term TermAttributedModule;
EXTERNAL Atom AtomDoubleArrow; EXTERNAL Term TermDoubleArrow;
EXTERNAL Atom AtomAssert; EXTERNAL Term TermAssert;
+EXTERNAL Atom AtomBeginBracket; EXTERNAL Term TermBeginBracket;
+EXTERNAL Atom AtomEndBracket; EXTERNAL Term TermEndBracket;
+EXTERNAL Atom AtomBeginSquareBracket; EXTERNAL Term TermBeginSquareBracket;
+EXTERNAL Atom AtomEndSquareBracket; EXTERNAL Term TermEndSquareBracket;
+EXTERNAL Atom AtomBeginCurlyBracket; EXTERNAL Term TermBeginCurlyBracket;
+EXTERNAL Atom AtomEndCurlyBracket; EXTERNAL Term TermEndCurlyBracket;
EXTERNAL Atom AtomEmptyBrackets; EXTERNAL Term TermEmptyBrackets;
EXTERNAL Atom AtomEmptySquareBrackets; EXTERNAL Term TermEmptySquareBrackets;
-EXTERNAL Atom AtomEmptyCurlyBrackets; EXTERNAL Term TermEmptyCurlyBrackets;
EXTERNAL Atom AtomAsserta; EXTERNAL Term TermAsserta;
EXTERNAL Atom AtomAssertaStatic; EXTERNAL Term TermAssertaStatic;
EXTERNAL Atom AtomAssertz; EXTERNAL Term TermAssertz;
@@ -63,6 +68,7 @@ EXTERNAL Atom AtomChars; EXTERNAL Term TermChars;
EXTERNAL Atom AtomCharset; EXTERNAL Term TermCharset;
EXTERNAL Atom AtomChType; EXTERNAL Term TermChType;
EXTERNAL Atom AtomCleanCall; EXTERNAL Term TermCleanCall;
+EXTERNAL Atom AtomClose; EXTERNAL Term TermClose;
EXTERNAL Atom AtomColon; EXTERNAL Term TermColon;
EXTERNAL Atom AtomCodeSpace; EXTERNAL Term TermCodeSpace;
EXTERNAL Atom AtomCodes; EXTERNAL Term TermCodes;
@@ -185,6 +191,7 @@ EXTERNAL Atom AtomId; EXTERNAL Term TermId;
EXTERNAL Atom AtomIgnore; EXTERNAL Term TermIgnore;
EXTERNAL Atom AtomInf; EXTERNAL Term TermInf;
EXTERNAL Atom AtomInfinity; EXTERNAL Term TermInfinity;
+EXTERNAL Atom AtomInfo; EXTERNAL Term TermInfo;
EXTERNAL Atom AtomInitGoal; EXTERNAL Term TermInitGoal;
EXTERNAL Atom AtomInitProlog; EXTERNAL Term TermInitProlog;
EXTERNAL Atom AtomInStackExpansion; EXTERNAL Term TermInStackExpansion;
@@ -196,6 +203,7 @@ EXTERNAL Atom AtomInteger; EXTERNAL Term TermInteger;
EXTERNAL Atom AtomInternalCompilerError; EXTERNAL Term TermInternalCompilerError;
EXTERNAL Atom AtomIs; EXTERNAL Term TermIs;
EXTERNAL Atom AtomJ; EXTERNAL Term TermJ;
+EXTERNAL Atom Atoml; EXTERNAL Term Terml;
EXTERNAL Atom AtomKey; EXTERNAL Term TermKey;
EXTERNAL Atom AtomLDLibraryPath; EXTERNAL Term TermLDLibraryPath;
EXTERNAL Atom AtomLONGINT; EXTERNAL Term TermLONGINT;
@@ -281,6 +289,7 @@ EXTERNAL Atom AtomPastEndOfStream; EXTERNAL Term TermPastEndOfStream;
EXTERNAL Atom AtomPermissionError; EXTERNAL Term TermPermissionError;
EXTERNAL Atom AtomPi; EXTERNAL Term TermPi;
EXTERNAL Atom AtomPipe; EXTERNAL Term TermPipe;
+EXTERNAL Atom AtomPriority; EXTERNAL Term TermPriority;
EXTERNAL Atom AtomPlus; EXTERNAL Term TermPlus;
EXTERNAL Atom AtomPointer; EXTERNAL Term TermPointer;
EXTERNAL Atom AtomPortray; EXTERNAL Term TermPortray;
@@ -537,12 +546,12 @@ EXTERNAL Functor FunctorDot8;
EXTERNAL Functor FunctorDot9;
+EXTERNAL Functor FunctorDoubleArrow;
+
EXTERNAL Functor FunctorDoubleSlash;
EXTERNAL Functor FunctorEmptySquareBrackets;
-EXTERNAL Functor FunctorEmptyCurlyBrackets;
-
EXTERNAL Functor FunctorEq;
EXTERNAL Functor FunctorError;
@@ -595,6 +604,14 @@ EXTERNAL Functor FunctorI;
EXTERNAL Functor FunctorId;
+EXTERNAL Functor FunctorInfo1;
+
+EXTERNAL Functor FunctorInfo2;
+
+EXTERNAL Functor FunctorInfo3;
+
+EXTERNAL Functor FunctorInfo4;
+
EXTERNAL Functor FunctorIs;
EXTERNAL Functor FunctorJ;
@@ -629,6 +646,8 @@ EXTERNAL Functor FunctorObj;
EXTERNAL Functor FunctorOr;
+EXTERNAL Functor FunctorOutput;
+
EXTERNAL Functor FunctorPermissionError;
EXTERNAL Functor FunctorPlus;
@@ -639,6 +658,8 @@ EXTERNAL Functor FunctorPrintMessage;
EXTERNAL Functor FunctorProcedure;
+EXTERNAL Functor FunctorPriority;
+
EXTERNAL Functor FunctorPrologConstraint;
EXTERNAL Functor FunctorProtectStack;
diff --git a/H/qly.h b/H/qly.h
index 8c545f33a..e0d0c8b32 100644
--- a/H/qly.h
+++ b/H/qly.h
@@ -96,10 +96,9 @@ typedef enum {
QLY_END_OPS = 11,
QLY_START_PREDICATE = 12,
QLY_END_PREDICATES = 13,
- QLY_ATOM_WIDE = 14,
QLY_FAILCODE = 15,
QLY_ATOM = 16,
- QLY_ATOM_BLOB = 17
+ QLY_ATOM_BLOB = 14
} qlf_tag_t;
#define STATIC_PRED_FLAGS \
diff --git a/H/rheap.h b/H/rheap.h
index 7b282fd45..d6bf5f0f4 100644
--- a/H/rheap.h
+++ b/H/rheap.h
@@ -1460,9 +1460,6 @@ static void RestoreEntries(PropEntry *pp, int int_key USES_REGS) {
case ExpProperty:
pp->NextOfPE = PropAdjust(pp->NextOfPE);
break;
- case WideAtomProperty:
- pp->NextOfPE = PropAdjust(pp->NextOfPE);
- break;
case BlobProperty:
pp->NextOfPE = PropAdjust(pp->NextOfPE);
{
diff --git a/H/walkclause.h b/H/walkclause.h
index 20a25fc2c..0252df004 100644
--- a/H/walkclause.h
+++ b/H/walkclause.h
@@ -1,748 +1,746 @@
-
- /* This file was generated automatically by "yap -L misc/buildops"
+/* This file was generated automatically by "yap -L misc/buildops"
please do not update */
+while (TRUE) {
+ op_numbers op;
- while (TRUE) {
- op_numbers op;
-
- op = Yap_op_from_opcode(pc->opc);
- /* C-code, maybe indexing */
- switch (op) {
- /* instructions type D */
- case _write_dbterm:
- pc = NEXTOP(pc,D);
- break;
- /* instructions type Illss */
- case _enter_lu_pred:
- return walk_got_lu_block(pc->y_u.Illss.I, startp, endp);
- /* instructions type J */
+ op = Yap_op_from_opcode(pc->opc);
+ /* C-code, maybe indexing */
+ switch (op) {
+ /* instructions type D */
+ case _write_dbterm:
+ pc = NEXTOP(pc, D);
+ break;
+ /* instructions type Illss */
+ case _enter_lu_pred:
+ return walk_got_lu_block(pc->y_u.Illss.I, startp, endp);
+/* instructions type J */
#ifdef YAP_JIT
- case _jit_handler:
+ case _jit_handler:
#endif
- pc = NEXTOP(pc,J);
- break;
- /* instructions type L */
- case _alloc_for_logical_pred:
- return walk_got_lu_clause(pc->y_u.L.ClBase, startp, endp);
- /* instructions type N */
- case _write_bigint:
- pc = NEXTOP(pc,N);
- break;
- /* instructions type Osblp */
- case _either:
- case _or_else:
- clause_code = TRUE;
- pp = pc->y_u.Osblp.p0;
- pc = NEXTOP(pc,Osblp);
- break;
- /* instructions type Osbmp */
- case _p_execute:
- case _p_execute_tail:
- pc = NEXTOP(pc,Osbmp);
- break;
- /* instructions type Osbpa */
- case _ensure_space:
- pc = NEXTOP(pc,Osbpa);
- break;
- /* instructions type Osbpp */
- case _call_cpred:
- pp = pc->y_u.Osbpp.p;
- return walk_found_c_pred(pp, startp, endp);
- case _call_usercpred:
- pp = pc->y_u.Osbpp.p;
- return walk_found_c_pred(pp, startp, endp);
- case _p_execute2:
- return found_meta_call(startp, endp);
- case _call:
- case _fcall:
- clause_code = TRUE;
- pp = pc->y_u.Osbpp.p0;
- pc = NEXTOP(pc,Osbpp);
- break;
- /* instructions type OtILl */
- case _count_trust_logical:
- case _profiled_trust_logical:
- case _trust_logical:
- return walk_got_lu_block(pc->y_u.OtILl.block, startp, endp);
- /* instructions type OtaLl */
- case _count_retry_logical:
- case _profiled_retry_logical:
- case _retry_logical:
- case _try_logical:
- pc = pc->y_u.OtaLl.n;
- break;
- /* instructions type OtapFs */
- case _cut_c:
- case _cut_userc:
- case _retry_c:
- case _retry_userc:
- case _try_c:
- case _try_userc:
- clause_code = TRUE;
- pp = pc->y_u.OtapFs.p;
- pc = NEXTOP(pc,OtapFs);
- break;
- /* instructions type Otapl */
- case _count_retry_and_mark:
- case _count_retry_me:
- case _count_trust_me:
- case _profiled_retry_and_mark:
- case _profiled_retry_me:
- case _profiled_trust_me:
- case _retry:
- case _retry_and_mark:
- case _retry_me:
- case _spy_or_trymark:
- case _trust:
- case _trust_me:
- case _try_and_mark:
- case _try_clause:
- case _try_me:
- clause_code = FALSE;
- pp = pc->y_u.Otapl.p;
- pc = NEXTOP(pc,Otapl);
- break;
- /* instructions type c */
- case _write_atom:
- pc = NEXTOP(pc,c);
- break;
- /* instructions type cc */
- case _get_2atoms:
- pc = NEXTOP(pc,cc);
- break;
- /* instructions type ccc */
- case _get_3atoms:
- pc = NEXTOP(pc,ccc);
- break;
- /* instructions type cccc */
- case _get_4atoms:
- pc = NEXTOP(pc,cccc);
- break;
- /* instructions type ccccc */
- case _get_5atoms:
- pc = NEXTOP(pc,ccccc);
- break;
- /* instructions type cccccc */
- case _get_6atoms:
- pc = NEXTOP(pc,cccccc);
- break;
- /* instructions type clll */
- case _if_not_then:
- pc = NEXTOP(pc,clll);
- break;
- /* instructions type d */
- case _write_float:
- pc = NEXTOP(pc,d);
- break;
- /* instructions type e */
- case _Nstop:
- return NULL;
- case _copy_idb_term:
- return found_idb_clause(pc, startp, endp);
- case _expand_index:
- return found_expand(pc, startp, endp PASS_REGS);
- case _index_pred:
- return found_owner_op(pc, startp, endp PASS_REGS);
- case _lock_pred:
- return found_owner_op(pc, startp, endp PASS_REGS);
- case _op_fail:
- if (codeptr == FAILCODE)
- return found_fail(pc, startp, endp PASS_REGS);
- pc = NEXTOP(pc,e);
- break;
- case _spy_pred:
- return found_owner_op(pc, startp, endp PASS_REGS);
- case _trust_fail:
- if (codeptr == TRUSTFAILCODE)
- return found_fail(pc, startp, endp PASS_REGS);
- pc = NEXTOP(pc,e);
- break;
- case _undef_p:
- return found_owner_op(pc, startp, endp PASS_REGS);
- case _unify_idb_term:
- return found_idb_clause(pc, startp, endp);
- case _allocate:
- case _enter_exo:
- case _index_blob:
- case _index_dbref:
- case _index_long:
- case _p_equal:
- case _p_functor:
- case _pop:
+ pc = NEXTOP(pc, J);
+ break;
+ /* instructions type L */
+ case _alloc_for_logical_pred:
+ return walk_got_lu_clause(pc->y_u.L.ClBase, startp, endp);
+ /* instructions type N */
+ case _write_bigint:
+ pc = NEXTOP(pc, N);
+ break;
+ /* instructions type Osblp */
+ case _either:
+ case _or_else:
+ clause_code = TRUE;
+ pp = pc->y_u.Osblp.p0;
+ pc = NEXTOP(pc, Osblp);
+ break;
+ /* instructions type Osbmp */
+ case _p_execute:
+ case _p_execute_tail:
+ pc = NEXTOP(pc, Osbmp);
+ break;
+ /* instructions type Osbpa */
+ case _ensure_space:
+ pc = NEXTOP(pc, Osbpa);
+ break;
+ /* instructions type Osbpp */
+ case _call_cpred:
+ pp = pc->y_u.Osbpp.p;
+ return walk_found_c_pred(pp, startp, endp);
+ case _call_usercpred:
+ pp = pc->y_u.Osbpp.p;
+ return walk_found_c_pred(pp, startp, endp);
+ case _p_execute2:
+ return found_meta_call(startp, endp);
+ case _call:
+ case _fcall:
+ clause_code = TRUE;
+ pp = pc->y_u.Osbpp.p0;
+ pc = NEXTOP(pc, Osbpp);
+ break;
+ /* instructions type OtILl */
+ case _count_trust_logical:
+ case _profiled_trust_logical:
+ case _trust_logical:
+ return walk_got_lu_block(pc->y_u.OtILl.block, startp, endp);
+ /* instructions type OtaLl */
+ case _count_retry_logical:
+ case _profiled_retry_logical:
+ case _retry_logical:
+ case _try_logical:
+ pc = pc->y_u.OtaLl.n;
+ break;
+ /* instructions type OtapFs */
+ case _cut_c:
+ case _cut_userc:
+ case _retry_c:
+ case _retry_userc:
+ case _try_c:
+ case _try_userc:
+ clause_code = TRUE;
+ pp = pc->y_u.OtapFs.p;
+ pc = NEXTOP(pc, OtapFs);
+ break;
+ /* instructions type Otapl */
+ case _count_retry_and_mark:
+ case _count_retry_me:
+ case _count_trust_me:
+ case _profiled_retry_and_mark:
+ case _profiled_retry_me:
+ case _profiled_trust_me:
+ case _retry:
+ case _retry_and_mark:
+ case _retry_me:
+ case _spy_or_trymark:
+ case _trust:
+ case _trust_me:
+ case _try_and_mark:
+ case _try_clause:
+ case _try_me:
+ clause_code = FALSE;
+ pp = pc->y_u.Otapl.p;
+ pc = NEXTOP(pc, Otapl);
+ break;
+ /* instructions type c */
+ case _write_atom:
+ pc = NEXTOP(pc, c);
+ break;
+ /* instructions type cc */
+ case _get_2atoms:
+ pc = NEXTOP(pc, cc);
+ break;
+ /* instructions type ccc */
+ case _get_3atoms:
+ pc = NEXTOP(pc, ccc);
+ break;
+ /* instructions type cccc */
+ case _get_4atoms:
+ pc = NEXTOP(pc, cccc);
+ break;
+ /* instructions type ccccc */
+ case _get_5atoms:
+ pc = NEXTOP(pc, ccccc);
+ break;
+ /* instructions type cccccc */
+ case _get_6atoms:
+ pc = NEXTOP(pc, cccccc);
+ break;
+ /* instructions type clll */
+ case _if_not_then:
+ pc = NEXTOP(pc, clll);
+ break;
+ /* instructions type d */
+ case _write_float:
+ pc = NEXTOP(pc, d);
+ break;
+ /* instructions type e */
+ case _Nstop:
+ return NULL;
+ case _copy_idb_term:
+ return found_idb_clause(pc, startp, endp);
+ case _expand_index:
+ return found_expand(pc, startp, endp PASS_REGS);
+ case _index_pred:
+ return found_owner_op(pc, startp, endp PASS_REGS);
+ case _lock_pred:
+ return found_owner_op(pc, startp, endp PASS_REGS);
+ case _op_fail:
+ if (codeptr == FAILCODE)
+ return found_fail(pc, startp, endp PASS_REGS);
+ pc = NEXTOP(pc, e);
+ break;
+ case _spy_pred:
+ return found_owner_op(pc, startp, endp PASS_REGS);
+ case _trust_fail:
+ if (codeptr == TRUSTFAILCODE)
+ return found_fail(pc, startp, endp PASS_REGS);
+ pc = NEXTOP(pc, e);
+ break;
+ case _undef_p:
+ return found_owner_op(pc, startp, endp PASS_REGS);
+ case _unify_idb_term:
+ return found_idb_clause(pc, startp, endp);
+ case _allocate:
+ case _enter_exo:
+ case _index_blob:
+ case _index_dbref:
+ case _index_long:
+ case _p_equal:
+ case _p_functor:
+ case _pop:
#ifdef BEAM
- case _retry_eam:
+ case _retry_eam:
#endif
#ifdef THREADS
- case _thread_local:
+ case _thread_local:
#endif
- case _unlock_lu:
- case _write_l_list:
- case _write_list:
- case _write_void:
- pc = NEXTOP(pc,e);
- break;
- /* instructions type fa */
- case _write_l_struc:
- case _write_struct:
- pc = NEXTOP(pc,fa);
- break;
- /* instructions type i */
- case _write_longint:
- pc = NEXTOP(pc,i);
- break;
- /* instructions type l */
- case _Ystop:
- return found_ystop(pc, clause_code, startp, endp, pp PASS_REGS);
- case _jump:
- case _jump_if_var:
- case _move_back:
+ case _unlock_lu:
+ case _write_l_list:
+ case _write_list:
+ case _write_void:
+ pc = NEXTOP(pc, e);
+ break;
+ /* instructions type fa */
+ case _write_l_struc:
+ case _write_struct:
+ pc = NEXTOP(pc, fa);
+ break;
+ /* instructions type i */
+ case _write_longint:
+ pc = NEXTOP(pc, i);
+ break;
+ /* instructions type l */
+ case _Ystop:
+ return found_ystop(pc, clause_code, startp, endp, pp PASS_REGS);
+ case _jump:
+ case _jump_if_var:
+ case _move_back:
#if INLINE_BIG_COMPARISONS
- case _p_dif:
- case _p_eq:
+ case _p_dif:
+ case _p_eq:
#endif
- case _retry2:
- case _retry3:
- case _retry4:
- case _skip:
- case _try_clause2:
- case _try_clause3:
- case _try_clause4:
- case _try_in:
- pc = NEXTOP(pc,l);
- break;
- /* instructions type llll */
- case _switch_on_type:
- pc = NEXTOP(pc,llll);
- break;
- /* instructions type lp */
- case _retry_all_exo:
- case _retry_exo:
- case _retry_exo_udi:
- case _try_all_exo:
- case _try_exo:
- case _try_exo_udi:
- case _user_switch:
- pc = NEXTOP(pc,lp);
- break;
- /* instructions type o */
- case _unify_l_list:
- case _unify_l_list_write:
- case _unify_l_void:
- case _unify_l_void_write:
- case _unify_list:
- case _unify_list_write:
- case _unify_void:
- case _unify_void_write:
- pc = NEXTOP(pc,o);
- break;
- /* instructions type oD */
- case _unify_dbterm:
- case _unify_l_dbterm:
- pc = NEXTOP(pc,oD);
- break;
- /* instructions type oN */
- case _unify_bigint:
- case _unify_l_bigint:
- pc = NEXTOP(pc,oN);
- break;
- /* instructions type oc */
- case _unify_atom:
- case _unify_atom_write:
- case _unify_l_atom:
- case _unify_l_atom_write:
- pc = NEXTOP(pc,oc);
- break;
- /* instructions type od */
- case _unify_float:
- case _unify_float_write:
- case _unify_l_float:
- case _unify_l_float_write:
- pc = NEXTOP(pc,od);
- break;
- /* instructions type ofa */
- case _unify_l_struc:
- case _unify_l_struc_write:
- case _unify_struct:
- case _unify_struct_write:
- pc = NEXTOP(pc,ofa);
- break;
- /* instructions type oi */
- case _unify_l_longint:
- case _unify_l_longint_write:
- case _unify_longint:
- case _unify_longint_write:
- pc = NEXTOP(pc,oi);
- break;
- /* instructions type ollll */
- case _switch_list_nl:
- pc = NEXTOP(pc,ollll);
- break;
- /* instructions type os */
+ case _retry2:
+ case _retry3:
+ case _retry4:
+ case _skip:
+ case _try_clause2:
+ case _try_clause3:
+ case _try_clause4:
+ case _try_in:
+ pc = NEXTOP(pc, l);
+ break;
+ /* instructions type llll */
+ case _switch_on_type:
+ pc = NEXTOP(pc, llll);
+ break;
+ /* instructions type lp */
+ case _retry_all_exo:
+ case _retry_exo:
+ case _retry_exo_udi:
+ case _try_all_exo:
+ case _try_exo:
+ case _try_exo_udi:
+ case _user_switch:
+ pc = NEXTOP(pc, lp);
+ break;
+ /* instructions type o */
+ case _unify_l_list:
+ case _unify_l_list_write:
+ case _unify_l_void:
+ case _unify_l_void_write:
+ case _unify_list:
+ case _unify_list_write:
+ case _unify_void:
+ case _unify_void_write:
+ pc = NEXTOP(pc, o);
+ break;
+ /* instructions type oD */
+ case _unify_dbterm:
+ case _unify_l_dbterm:
+ pc = NEXTOP(pc, oD);
+ break;
+ /* instructions type oN */
+ case _unify_bigint:
+ case _unify_l_bigint:
+ pc = NEXTOP(pc, oN);
+ break;
+ /* instructions type oc */
+ case _unify_atom:
+ case _unify_atom_write:
+ case _unify_l_atom:
+ case _unify_l_atom_write:
+ pc = NEXTOP(pc, oc);
+ break;
+ /* instructions type od */
+ case _unify_float:
+ case _unify_float_write:
+ case _unify_l_float:
+ case _unify_l_float_write:
+ pc = NEXTOP(pc, od);
+ break;
+ /* instructions type ofa */
+ case _unify_l_struc:
+ case _unify_l_struc_write:
+ case _unify_struct:
+ case _unify_struct_write:
+ pc = NEXTOP(pc, ofa);
+ break;
+ /* instructions type oi */
+ case _unify_l_longint:
+ case _unify_l_longint_write:
+ case _unify_longint:
+ case _unify_longint_write:
+ pc = NEXTOP(pc, oi);
+ break;
+ /* instructions type ollll */
+ case _switch_list_nl:
+ pc = NEXTOP(pc, ollll);
+ break;
+/* instructions type os */
#ifdef BEAM
- case _run_eam:
+ case _run_eam:
#endif
- case _unify_l_n_voids:
- case _unify_l_n_voids_write:
- case _unify_n_voids:
- case _unify_n_voids_write:
- pc = NEXTOP(pc,os);
- break;
- /* instructions type osc */
- case _unify_n_atoms:
- case _unify_n_atoms_write:
- pc = NEXTOP(pc,osc);
- break;
- /* instructions type ou */
- case _unify_l_string:
- case _unify_string:
- pc = NEXTOP(pc,ou);
- break;
- /* instructions type ox */
- case _save_appl_x:
- case _save_appl_x_write:
- case _save_pair_x:
- case _save_pair_x_write:
- case _unify_l_x_loc:
- case _unify_l_x_loc_write:
- case _unify_l_x_val:
- case _unify_l_x_val_write:
- case _unify_l_x_var:
- case _unify_l_x_var_write:
- case _unify_x_loc:
- case _unify_x_loc_write:
- case _unify_x_val:
- case _unify_x_val_write:
- case _unify_x_var:
- case _unify_x_var_write:
- pc = NEXTOP(pc,ox);
- break;
- /* instructions type oxx */
- case _unify_l_x_var2:
- case _unify_l_x_var2_write:
- case _unify_x_var2:
- case _unify_x_var2_write:
- pc = NEXTOP(pc,oxx);
- break;
- /* instructions type oy */
- case _save_appl_y:
- case _save_appl_y_write:
- case _save_pair_y:
- case _save_pair_y_write:
- case _unify_l_y_loc:
- case _unify_l_y_loc_write:
- case _unify_l_y_val:
- case _unify_l_y_val_write:
- case _unify_l_y_var:
- case _unify_l_y_var_write:
- case _unify_y_loc:
- case _unify_y_loc_write:
- case _unify_y_val:
- case _unify_y_val_write:
- case _unify_y_var:
- case _unify_y_var_write:
- pc = NEXTOP(pc,oy);
- break;
- /* instructions type p */
- case _lock_lu:
- case _procceed:
- pp = pc->y_u.p.p;
- if (pp->PredFlags & MegaClausePredFlag)
- return found_mega_clause(pp, startp, endp);
- clause_code = TRUE;
- pc = NEXTOP(pc,p);
- break;
- case _count_call:
- case _count_retry:
- case _deallocate:
- case _enter_profiling:
- case _retry_profiled:
- case _retry_udi:
- case _try_udi:
- pc = NEXTOP(pc,p);
- break;
- /* instructions type plxxs */
- case _call_bfunc_xx:
- pc = NEXTOP(pc,plxxs);
- break;
- /* instructions type plxys */
- case _call_bfunc_xy:
- case _call_bfunc_yx:
- pc = NEXTOP(pc,plxys);
- break;
- /* instructions type plyys */
- case _call_bfunc_yy:
- pc = NEXTOP(pc,plyys);
- break;
- /* instructions type pp */
- case _execute_cpred:
- pp = pc->y_u.pp.p;
- return walk_found_c_pred(pp, startp, endp);
- case _dexecute:
- case _execute:
- clause_code = TRUE;
- pp = pc->y_u.pp.p0;
- pc = NEXTOP(pc,pp);
- break;
- /* instructions type s */
- case _cut:
- case _cut_e:
- case _cut_t:
- case _pop_n:
- case _write_n_voids:
- pc = NEXTOP(pc,s);
- break;
- /* instructions type sc */
- case _write_n_atoms:
- pc = NEXTOP(pc,sc);
- break;
- /* instructions type sllll */
- case _switch_on_sub_arg_type:
- pc = NEXTOP(pc,sllll);
- break;
- /* instructions type slpp */
- case _call_c_wfail:
- pp = pc->y_u.slpp.p;
- return walk_found_c_pred(pp, startp, endp);
- /* instructions type sssl */
- case _go_on_cons:
- case _go_on_func:
- case _if_cons:
- case _if_func:
- case _switch_on_cons:
- case _switch_on_func:
- pc = NEXTOP(pc,sssl);
- break;
- /* instructions type sssllp */
- case _expand_clauses:
- return found_expand_index(pc, startp, endp, codeptr PASS_REGS);
- pc = NEXTOP(pc,sssllp);
- break;
- /* instructions type x */
- case _get_atom_exo:
- case _get_list:
- case _put_list:
- case _save_b_x:
- case _write_x_loc:
- case _write_x_val:
- case _write_x_var:
- pc = NEXTOP(pc,x);
- break;
- /* instructions type xD */
- case _get_dbterm:
- case _put_dbterm:
- pc = NEXTOP(pc,xD);
- break;
- /* instructions type xN */
- case _get_bigint:
- case _put_bigint:
- pc = NEXTOP(pc,xN);
- break;
- /* instructions type xc */
- case _get_atom:
- case _put_atom:
- pc = NEXTOP(pc,xc);
- break;
- /* instructions type xd */
- case _get_float:
- case _put_float:
- pc = NEXTOP(pc,xd);
- break;
- /* instructions type xfa */
- case _get_struct:
- case _put_struct:
- pc = NEXTOP(pc,xfa);
- break;
- /* instructions type xi */
- case _get_longint:
- case _put_longint:
- pc = NEXTOP(pc,xi);
- break;
- /* instructions type xl */
- case _p_atom_x:
- case _p_atomic_x:
- case _p_compound_x:
- case _p_db_ref_x:
- case _p_float_x:
- case _p_integer_x:
- case _p_nonvar_x:
- case _p_number_x:
- case _p_primitive_x:
- case _p_var_x:
- pc = NEXTOP(pc,xl);
- break;
- /* instructions type xll */
- case _jump_if_nonvar:
- pc = NEXTOP(pc,xll);
- break;
- /* instructions type xllll */
- case _switch_on_arg_type:
- pc = NEXTOP(pc,xllll);
- break;
- /* instructions type xps */
- case _commit_b_x:
- pc = NEXTOP(pc,xps);
- break;
- /* instructions type xu */
- case _get_string:
- pc = NEXTOP(pc,xu);
- break;
- /* instructions type xx */
- case _get_x_val:
- case _get_x_var:
- case _gl_void_valx:
- case _gl_void_varx:
- case _glist_valx:
- case _put_x_val:
- case _put_x_var:
- pc = NEXTOP(pc,xx);
- break;
- /* instructions type xxc */
- case _p_func2s_cv:
- pc = NEXTOP(pc,xxc);
- break;
- /* instructions type xxn */
- case _p_and_vc:
- case _p_arg_cv:
- case _p_div_cv:
- case _p_div_vc:
- case _p_func2s_vc:
- case _p_minus_cv:
- case _p_or_vc:
- case _p_plus_vc:
- case _p_sll_cv:
- case _p_sll_vc:
- case _p_slr_cv:
- case _p_slr_vc:
- case _p_times_vc:
- pc = NEXTOP(pc,xxn);
- break;
- /* instructions type xxx */
- case _p_and_vv:
- case _p_arg_vv:
- case _p_div_vv:
- case _p_func2f_xx:
- case _p_func2s_vv:
- case _p_minus_vv:
- case _p_or_vv:
- case _p_plus_vv:
- case _p_sll_vv:
- case _p_slr_vv:
- case _p_times_vv:
- pc = NEXTOP(pc,xxx);
- break;
- /* instructions type xxxx */
- case _put_xx_val:
- pc = NEXTOP(pc,xxxx);
- break;
- /* instructions type xxy */
- case _p_func2f_xy:
- pc = NEXTOP(pc,xxy);
- break;
- /* instructions type y */
- case _save_b_y:
- case _write_y_loc:
- case _write_y_val:
- case _write_y_var:
- pc = NEXTOP(pc,y);
- break;
- /* instructions type yl */
- case _p_atom_y:
- case _p_atomic_y:
- case _p_compound_y:
- case _p_db_ref_y:
- case _p_float_y:
- case _p_integer_y:
- case _p_nonvar_y:
- case _p_number_y:
- case _p_primitive_y:
- case _p_var_y:
- pc = NEXTOP(pc,yl);
- break;
- /* instructions type yps */
- case _commit_b_y:
- pc = NEXTOP(pc,yps);
- break;
- /* instructions type yx */
- case _get_y_val:
- case _get_y_var:
- case _gl_void_valy:
- case _gl_void_vary:
- case _glist_valy:
- case _put_unsafe:
- case _put_y_val:
- case _put_y_var:
- pc = NEXTOP(pc,yx);
- break;
- /* instructions type yxc */
- case _p_func2s_y_cv:
- pc = NEXTOP(pc,yxc);
- break;
- /* instructions type yxn */
- case _p_and_y_vc:
- case _p_arg_y_cv:
- case _p_div_y_cv:
- case _p_div_y_vc:
- case _p_func2s_y_vc:
- case _p_minus_y_cv:
- case _p_or_y_vc:
- case _p_plus_y_vc:
- case _p_sll_y_cv:
- case _p_sll_y_vc:
- case _p_slr_y_cv:
- case _p_slr_y_vc:
- case _p_times_y_vc:
- pc = NEXTOP(pc,yxn);
- break;
- /* instructions type yxx */
- case _p_and_y_vv:
- case _p_arg_y_vv:
- case _p_div_y_vv:
- case _p_func2f_yx:
- case _p_func2s_y_vv:
- case _p_minus_y_vv:
- case _p_or_y_vv:
- case _p_plus_y_vv:
- case _p_sll_y_vv:
- case _p_slr_y_vv:
- case _p_times_y_vv:
- pc = NEXTOP(pc,yxx);
- break;
- /* instructions type yyx */
- case _p_func2f_yy:
- pc = NEXTOP(pc,yyx);
- break;
- /* instructions type yyxx */
- case _get_yy_var:
- case _put_y_vals:
- pc = NEXTOP(pc,yyxx);
- break;
+ case _unify_l_n_voids:
+ case _unify_l_n_voids_write:
+ case _unify_n_voids:
+ case _unify_n_voids_write:
+ pc = NEXTOP(pc, os);
+ break;
+ /* instructions type osc */
+ case _unify_n_atoms:
+ case _unify_n_atoms_write:
+ pc = NEXTOP(pc, osc);
+ break;
+ /* instructions type ou */
+ case _unify_l_string:
+ case _unify_string:
+ pc = NEXTOP(pc, ou);
+ break;
+ /* instructions type ox */
+ case _save_appl_x:
+ case _save_appl_x_write:
+ case _save_pair_x:
+ case _save_pair_x_write:
+ case _unify_l_x_loc:
+ case _unify_l_x_loc_write:
+ case _unify_l_x_val:
+ case _unify_l_x_val_write:
+ case _unify_l_x_var:
+ case _unify_l_x_var_write:
+ case _unify_x_loc:
+ case _unify_x_loc_write:
+ case _unify_x_val:
+ case _unify_x_val_write:
+ case _unify_x_var:
+ case _unify_x_var_write:
+ pc = NEXTOP(pc, ox);
+ break;
+ /* instructions type oxx */
+ case _unify_l_x_var2:
+ case _unify_l_x_var2_write:
+ case _unify_x_var2:
+ case _unify_x_var2_write:
+ pc = NEXTOP(pc, oxx);
+ break;
+ /* instructions type oy */
+ case _save_appl_y:
+ case _save_appl_y_write:
+ case _save_pair_y:
+ case _save_pair_y_write:
+ case _unify_l_y_loc:
+ case _unify_l_y_loc_write:
+ case _unify_l_y_val:
+ case _unify_l_y_val_write:
+ case _unify_l_y_var:
+ case _unify_l_y_var_write:
+ case _unify_y_loc:
+ case _unify_y_loc_write:
+ case _unify_y_val:
+ case _unify_y_val_write:
+ case _unify_y_var:
+ case _unify_y_var_write:
+ pc = NEXTOP(pc, oy);
+ break;
+ /* instructions type p */
+ case _lock_lu:
+ case _procceed:
+ pp = pc->y_u.p.p;
+ if (pp->PredFlags & MegaClausePredFlag)
+ return found_mega_clause(pp, startp, endp);
+ clause_code = TRUE;
+ pc = NEXTOP(pc, p);
+ break;
+ case _count_call:
+ case _count_retry:
+ case _deallocate:
+ case _enter_profiling:
+ case _retry_profiled:
+ case _retry_udi:
+ case _try_udi:
+ pc = NEXTOP(pc, p);
+ break;
+ /* instructions type plxxs */
+ case _call_bfunc_xx:
+ pc = NEXTOP(pc, plxxs);
+ break;
+ /* instructions type plxys */
+ case _call_bfunc_xy:
+ case _call_bfunc_yx:
+ pc = NEXTOP(pc, plxys);
+ break;
+ /* instructions type plyys */
+ case _call_bfunc_yy:
+ pc = NEXTOP(pc, plyys);
+ break;
+ /* instructions type pp */
+ case _execute_cpred:
+ pp = pc->y_u.pp.p;
+ return walk_found_c_pred(pp, startp, endp);
+ case _dexecute:
+ case _execute:
+ clause_code = TRUE;
+ pp = pc->y_u.pp.p0;
+ pc = NEXTOP(pc, pp);
+ break;
+ /* instructions type s */
+ case _cut:
+ case _cut_e:
+ case _cut_t:
+ case _pop_n:
+ case _write_n_voids:
+ pc = NEXTOP(pc, s);
+ break;
+ /* instructions type sc */
+ case _write_n_atoms:
+ pc = NEXTOP(pc, sc);
+ break;
+ /* instructions type sllll */
+ case _switch_on_sub_arg_type:
+ pc = NEXTOP(pc, sllll);
+ break;
+ /* instructions type slpp */
+ case _call_c_wfail:
+ pp = pc->y_u.slpp.p;
+ return walk_found_c_pred(pp, startp, endp);
+ /* instructions type sssl */
+ case _go_on_cons:
+ case _go_on_func:
+ case _if_cons:
+ case _if_func:
+ case _switch_on_cons:
+ case _switch_on_func:
+ pc = NEXTOP(pc, sssl);
+ break;
+ /* instructions type sssllp */
+ case _expand_clauses:
+ return found_expand_index(pc, startp, endp, codeptr PASS_REGS);
+ pc = NEXTOP(pc, sssllp);
+ break;
+ /* instructions type x */
+ case _get_atom_exo:
+ case _get_list:
+ case _put_list:
+ case _save_b_x:
+ case _write_x_loc:
+ case _write_x_val:
+ case _write_x_var:
+ pc = NEXTOP(pc, x);
+ break;
+ /* instructions type xD */
+ case _get_dbterm:
+ case _put_dbterm:
+ pc = NEXTOP(pc, xD);
+ break;
+ /* instructions type xN */
+ case _get_bigint:
+ case _put_bigint:
+ pc = NEXTOP(pc, xN);
+ break;
+ /* instructions type xc */
+ case _get_atom:
+ case _put_atom:
+ pc = NEXTOP(pc, xc);
+ break;
+ /* instructions type xd */
+ case _get_float:
+ case _put_float:
+ pc = NEXTOP(pc, xd);
+ break;
+ /* instructions type xfa */
+ case _get_struct:
+ case _put_struct:
+ pc = NEXTOP(pc, xfa);
+ break;
+ /* instructions type xi */
+ case _get_longint:
+ case _put_longint:
+ pc = NEXTOP(pc, xi);
+ break;
+ /* instructions type xl */
+ case _p_atom_x:
+ case _p_atomic_x:
+ case _p_compound_x:
+ case _p_db_ref_x:
+ case _p_float_x:
+ case _p_integer_x:
+ case _p_nonvar_x:
+ case _p_number_x:
+ case _p_primitive_x:
+ case _p_var_x:
+ pc = NEXTOP(pc, xl);
+ break;
+ /* instructions type xll */
+ case _jump_if_nonvar:
+ pc = NEXTOP(pc, xll);
+ break;
+ /* instructions type xllll */
+ case _switch_on_arg_type:
+ pc = NEXTOP(pc, xllll);
+ break;
+ /* instructions type xps */
+ case _commit_b_x:
+ pc = NEXTOP(pc, xps);
+ break;
+ /* instructions type xu */
+ case _get_string:
+ pc = NEXTOP(pc, xu);
+ break;
+ /* instructions type xx */
+ case _get_x_val:
+ case _get_x_var:
+ case _gl_void_valx:
+ case _gl_void_varx:
+ case _glist_valx:
+ case _put_x_val:
+ case _put_x_var:
+ pc = NEXTOP(pc, xx);
+ break;
+ /* instructions type xxc */
+ case _p_func2s_cv:
+ pc = NEXTOP(pc, xxc);
+ break;
+ /* instructions type xxn */
+ case _p_and_vc:
+ case _p_arg_cv:
+ case _p_div_cv:
+ case _p_div_vc:
+ case _p_func2s_vc:
+ case _p_minus_cv:
+ case _p_or_vc:
+ case _p_plus_vc:
+ case _p_sll_cv:
+ case _p_sll_vc:
+ case _p_slr_cv:
+ case _p_slr_vc:
+ case _p_times_vc:
+ pc = NEXTOP(pc, xxn);
+ break;
+ /* instructions type xxx */
+ case _p_and_vv:
+ case _p_arg_vv:
+ case _p_div_vv:
+ case _p_func2f_xx:
+ case _p_func2s_vv:
+ case _p_minus_vv:
+ case _p_or_vv:
+ case _p_plus_vv:
+ case _p_sll_vv:
+ case _p_slr_vv:
+ case _p_times_vv:
+ pc = NEXTOP(pc, xxx);
+ break;
+ /* instructions type xxxx */
+ case _put_xx_val:
+ pc = NEXTOP(pc, xxxx);
+ break;
+ /* instructions type xxy */
+ case _p_func2f_xy:
+ pc = NEXTOP(pc, xxy);
+ break;
+ /* instructions type y */
+ case _save_b_y:
+ case _write_y_loc:
+ case _write_y_val:
+ case _write_y_var:
+ pc = NEXTOP(pc, y);
+ break;
+ /* instructions type yl */
+ case _p_atom_y:
+ case _p_atomic_y:
+ case _p_compound_y:
+ case _p_db_ref_y:
+ case _p_float_y:
+ case _p_integer_y:
+ case _p_nonvar_y:
+ case _p_number_y:
+ case _p_primitive_y:
+ case _p_var_y:
+ pc = NEXTOP(pc, yl);
+ break;
+ /* instructions type yps */
+ case _commit_b_y:
+ pc = NEXTOP(pc, yps);
+ break;
+ /* instructions type yx */
+ case _get_y_val:
+ case _get_y_var:
+ case _gl_void_valy:
+ case _gl_void_vary:
+ case _glist_valy:
+ case _put_unsafe:
+ case _put_y_val:
+ case _put_y_var:
+ pc = NEXTOP(pc, yx);
+ break;
+ /* instructions type yxc */
+ case _p_func2s_y_cv:
+ pc = NEXTOP(pc, yxc);
+ break;
+ /* instructions type yxn */
+ case _p_and_y_vc:
+ case _p_arg_y_cv:
+ case _p_div_y_cv:
+ case _p_div_y_vc:
+ case _p_func2s_y_vc:
+ case _p_minus_y_cv:
+ case _p_or_y_vc:
+ case _p_plus_y_vc:
+ case _p_sll_y_cv:
+ case _p_sll_y_vc:
+ case _p_slr_y_cv:
+ case _p_slr_y_vc:
+ case _p_times_y_vc:
+ pc = NEXTOP(pc, yxn);
+ break;
+ /* instructions type yxx */
+ case _p_and_y_vv:
+ case _p_arg_y_vv:
+ case _p_div_y_vv:
+ case _p_func2f_yx:
+ case _p_func2s_y_vv:
+ case _p_minus_y_vv:
+ case _p_or_y_vv:
+ case _p_plus_y_vv:
+ case _p_sll_y_vv:
+ case _p_slr_y_vv:
+ case _p_times_y_vv:
+ pc = NEXTOP(pc, yxx);
+ break;
+ /* instructions type yyx */
+ case _p_func2f_yy:
+ pc = NEXTOP(pc, yyx);
+ break;
+ /* instructions type yyxx */
+ case _get_yy_var:
+ case _put_y_vals:
+ pc = NEXTOP(pc, yyxx);
+ break;
#ifdef YAPOR
- /* instructions type Otapl */
- case _getwork:
- case _getwork_seq:
- case _sync:
- clause_code = FALSE;
- pp = pc->y_u.Otapl.p;
- pc = NEXTOP(pc,Otapl);
- break;
- /* instructions type e */
- case _getwork_first_time:
- pc = NEXTOP(pc,e);
- break;
+ /* instructions type Otapl */
+ case _getwork:
+ case _getwork_seq:
+ case _sync:
+ clause_code = FALSE;
+ pp = pc->y_u.Otapl.p;
+ pc = NEXTOP(pc, Otapl);
+ break;
+ /* instructions type e */
+ case _getwork_first_time:
+ pc = NEXTOP(pc, e);
+ break;
#endif
#ifdef TABLING
- /* instructions type Otapl */
- case _table_answer_resolution:
+ /* instructions type Otapl */
+ case _table_answer_resolution:
#ifdef THREADS_CONSUMER_SHARING
- case _table_answer_resolution_completion:
+ case _table_answer_resolution_completion:
#endif
- case _table_completion:
- case _table_load_answer:
- case _table_retry:
- case _table_retry_me:
- case _table_trust:
- case _table_trust_me:
- case _table_try:
- case _table_try_answer:
- case _table_try_me:
- case _table_try_single:
- clause_code = FALSE;
- pp = pc->y_u.Otapl.p;
- pc = NEXTOP(pc,Otapl);
- break;
- /* instructions type e */
+ case _table_completion:
+ case _table_load_answer:
+ case _table_retry:
+ case _table_retry_me:
+ case _table_trust:
+ case _table_trust_me:
+ case _table_try:
+ case _table_try_answer:
+ case _table_try_me:
+ case _table_try_single:
+ clause_code = FALSE;
+ pp = pc->y_u.Otapl.p;
+ pc = NEXTOP(pc, Otapl);
+ break;
+/* instructions type e */
#ifdef TABLING_INNER_CUTS
- case _clause_with_cut:
+ case _clause_with_cut:
#endif
- pc = NEXTOP(pc,e);
- break;
- /* instructions type s */
- case _table_new_answer:
- pc = NEXTOP(pc,s);
- break;
- /* instructions type e */
- case _trie_do_appl:
- case _trie_do_appl_in_pair:
- case _trie_do_atom:
- case _trie_do_atom_in_pair:
- case _trie_do_bigint:
- case _trie_do_double:
- case _trie_do_extension:
- case _trie_do_gterm:
- case _trie_do_longint:
- case _trie_do_null:
- case _trie_do_null_in_pair:
- case _trie_do_pair:
- case _trie_do_val:
- case _trie_do_val_in_pair:
- case _trie_do_var:
- case _trie_do_var_in_pair:
- case _trie_retry_appl:
- case _trie_retry_appl_in_pair:
- case _trie_retry_atom:
- case _trie_retry_atom_in_pair:
- case _trie_retry_bigint:
- case _trie_retry_double:
- case _trie_retry_extension:
- case _trie_retry_gterm:
- case _trie_retry_longint:
- case _trie_retry_null:
- case _trie_retry_null_in_pair:
- case _trie_retry_pair:
- case _trie_retry_val:
- case _trie_retry_val_in_pair:
- case _trie_retry_var:
- case _trie_retry_var_in_pair:
- case _trie_trust_appl:
- case _trie_trust_appl_in_pair:
- case _trie_trust_atom:
- case _trie_trust_atom_in_pair:
- case _trie_trust_bigint:
- case _trie_trust_double:
- case _trie_trust_extension:
- case _trie_trust_gterm:
- case _trie_trust_longint:
- case _trie_trust_null:
- case _trie_trust_null_in_pair:
- case _trie_trust_pair:
- case _trie_trust_val:
- case _trie_trust_val_in_pair:
- case _trie_trust_var:
- case _trie_trust_var_in_pair:
- case _trie_try_appl:
- case _trie_try_appl_in_pair:
- case _trie_try_atom:
- case _trie_try_atom_in_pair:
- case _trie_try_bigint:
- case _trie_try_double:
- case _trie_try_extension:
- case _trie_try_gterm:
- case _trie_try_longint:
- case _trie_try_null:
- case _trie_try_null_in_pair:
- case _trie_try_pair:
- case _trie_try_val:
- case _trie_try_val_in_pair:
- case _trie_try_var:
- case _trie_try_var_in_pair:
- pc = NEXTOP(pc,e);
- break;
+ pc = NEXTOP(pc, e);
+ break;
+ /* instructions type s */
+ case _table_new_answer:
+ pc = NEXTOP(pc, s);
+ break;
+ /* instructions type e */
+ case _trie_do_appl:
+ case _trie_do_appl_in_pair:
+ case _trie_do_atom:
+ case _trie_do_atom_in_pair:
+ case _trie_do_bigint:
+ case _trie_do_double:
+ case _trie_do_extension:
+ case _trie_do_gterm:
+ case _trie_do_longint:
+ case _trie_do_null:
+ case _trie_do_null_in_pair:
+ case _trie_do_pair:
+ case _trie_do_val:
+ case _trie_do_val_in_pair:
+ case _trie_do_var:
+ case _trie_do_var_in_pair:
+ case _trie_retry_appl:
+ case _trie_retry_appl_in_pair:
+ case _trie_retry_atom:
+ case _trie_retry_atom_in_pair:
+ case _trie_retry_bigint:
+ case _trie_retry_double:
+ case _trie_retry_extension:
+ case _trie_retry_gterm:
+ case _trie_retry_longint:
+ case _trie_retry_null:
+ case _trie_retry_null_in_pair:
+ case _trie_retry_pair:
+ case _trie_retry_val:
+ case _trie_retry_val_in_pair:
+ case _trie_retry_var:
+ case _trie_retry_var_in_pair:
+ case _trie_trust_appl:
+ case _trie_trust_appl_in_pair:
+ case _trie_trust_atom:
+ case _trie_trust_atom_in_pair:
+ case _trie_trust_bigint:
+ case _trie_trust_double:
+ case _trie_trust_extension:
+ case _trie_trust_gterm:
+ case _trie_trust_longint:
+ case _trie_trust_null:
+ case _trie_trust_null_in_pair:
+ case _trie_trust_pair:
+ case _trie_trust_val:
+ case _trie_trust_val_in_pair:
+ case _trie_trust_var:
+ case _trie_trust_var_in_pair:
+ case _trie_try_appl:
+ case _trie_try_appl_in_pair:
+ case _trie_try_atom:
+ case _trie_try_atom_in_pair:
+ case _trie_try_bigint:
+ case _trie_try_double:
+ case _trie_try_extension:
+ case _trie_try_gterm:
+ case _trie_try_longint:
+ case _trie_try_null:
+ case _trie_try_null_in_pair:
+ case _trie_try_pair:
+ case _trie_try_val:
+ case _trie_try_val_in_pair:
+ case _trie_try_var:
+ case _trie_try_var_in_pair:
+ pc = NEXTOP(pc, e);
+ break;
#endif
- /* this instruction is hardwired */
- case _or_last:
+ /* this instruction is hardwired */
+ case _or_last:
#ifdef YAPOR
- pp = pc->y_u.Osblp.p0;
- if (pp->PredFlags & MegaClausePredFlag)
- return found_mega_clause(pp, startp, endp);
- clause_code = TRUE;
- pc = NEXTOP(pc,Osblp);
+ pp = pc->y_u.Osblp.p0;
+ if (pp->PredFlags & MegaClausePredFlag)
+ return found_mega_clause(pp, startp, endp);
+ clause_code = TRUE;
+ pc = NEXTOP(pc, Osblp);
#else
- pp = pc->y_u.p.p;
- if (pp->PredFlags & MegaClausePredFlag)
- return found_mega_clause(pp, startp, endp);
- clause_code = TRUE;
- pc = NEXTOP(pc,p);
+ pp = pc->y_u.p.p;
+ if (pp->PredFlags & MegaClausePredFlag)
+ return found_mega_clause(pp, startp, endp);
+ clause_code = TRUE;
+ pc = NEXTOP(pc, p);
#endif
- }
}
+}
diff --git a/OPTYap/opt.preds.c b/OPTYap/opt.preds.c
index c21652ec4..77d4182e8 100644
--- a/OPTYap/opt.preds.c
+++ b/OPTYap/opt.preds.c
@@ -120,7 +120,7 @@ struct page_statistics {
#ifdef USE_PAGES_MALLOC
long pages_in_use; /* same as struct pages (opt.structs.h) */
#endif /* USE_PAGES_MALLOC */
- long structs_in_use; /* same as struct pages (opt.structs.h) */
+ size_t structs_in_use; /* same as struct pages (opt.structs.h) */
long bytes_in_use;
};
diff --git a/OPTYap/opt.structs.h b/OPTYap/opt.structs.h
index 566aa4907..e5b8684fd 100644
--- a/OPTYap/opt.structs.h
+++ b/OPTYap/opt.structs.h
@@ -95,7 +95,7 @@ struct threads_dependency_frame {
#ifdef USE_PAGES_MALLOC
typedef struct page_header {
- volatile int structs_in_use;
+ volatile size_t structs_in_use;
void *allocated_area;
void *first_free_struct;
struct page_header *previous;
@@ -125,7 +125,7 @@ struct global_page_entry {
int structs_per_page;
volatile long pages_in_use;
#endif /* USE_PAGES_MALLOC */
- volatile long structs_in_use;
+ volatile size_t structs_in_use;
};
struct local_page_entry {
@@ -133,9 +133,10 @@ struct local_page_entry {
struct page_header *first_page;
struct page_header *last_page;
int structs_per_page;
- long pages_in_use;
+
+ size_t pages_in_use;
#endif /* USE_PAGES_MALLOC */
- long structs_in_use;
+ size_t structs_in_use;
};
#define PgEnt_lock(X) ((X).lock)
diff --git a/Packages.cmake b/Packages.cmake
index 97b5c7ce8..92f84b166 100644
--- a/Packages.cmake
+++ b/Packages.cmake
@@ -38,7 +38,10 @@ ENDIF(WITH_CPLINT)
#must be last
+OPTION (WITH_SWIG " Enable SWIG interfaces to foreign languages" ON)
+IF (WITH_SWIG)
add_subDIRECTORY (packages/swig)
+ENDIF (WITH_SWIG)
# please install doxygen for prolog first
@@ -50,11 +53,17 @@ add_subDIRECTORY (packages/swig)
option (WITH_DOCS
"generate YAP docs" OFF)
- # add_subDIRECTORY (docs)
+ IF (WITH_DOCS)
+ add_subDIRECTORY (docs)
+ ENDIF (WITH_DOCS)
# add_subDIRECTORY (packages/cuda)
+option (WITH_GECODE
+"interface gecode constraint solver" ON)
+if (WITH_GECODE)
add_subDIRECTORY (packages/gecode)
+endif()
add_subDIRECTORY (packages/real)
@@ -68,6 +77,8 @@ add_subDIRECTORY (packages/ProbLog)
add_subDIRECTORY (packages/swi-minisat2)
+add_subDIRECTORY (packages/clpqr)
+
#todo: use cmake target builds
# option (USE_MAXPERFORMANCE
diff --git a/Prelims.cmake b/Prelims.cmake
index f7c9de1db..ccc7ca5ad 100644
--- a/Prelims.cmake
+++ b/Prelims.cmake
@@ -105,20 +105,6 @@ else()
endif()
-#cross-compilation support
-# Search packages for host system instead of packages for target system
-# in case of cross compilation these macro should be defined by toolchain file
-if(NOT COMMAND find_host_package)
- macro(find_host_package)
- find_package(${ARGN})
- endmacro()
-endif()
-if(NOT COMMAND find_host_program)
- macro(find_host_program)
- find_program(${ARGN})
- endmacro()
-endif()
-
# where we have most scripts
# set path to additional CMake modules
@@ -141,22 +127,22 @@ if(POLICY CMP0043)
endif(POLICY CMP0043)
+if (ANDROID)
+ set ( prefix ${YAP_APP_DIR}/build )
+ set ( datarootdir ${prefix}/assets )
+else()
set ( prefix "${CMAKE_INSTALL_PREFIX}")
+ set ( datarootdir ${prefix}/share )
+endif()
+ set ( libpl ${datarootdir}/Yap)
+set ( includedir "${prefix}/include")
set ( exec_prefix "${prefix}")
set ( libdir "${exec_prefix}/lib")
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 ( mandir "${datarootdir}/man")
set ( bindir "${exec_prefix}/bin")
-set ( docdir "${exec_prefix}/doc/Yap")
+set ( docdir "${datarootdir}/doc/Yap")
set(YAP_ROOTDIR ${prefix})
diff --git a/PrologCommons/PROLOGCOMMONS.md b/PrologCommons/PROLOGCOMMONS.md
index a2d50cd9d..ecb96a348 100644
--- a/PrologCommons/PROLOGCOMMONS.md
+++ b/PrologCommons/PROLOGCOMMONS.md
@@ -1,4 +1,5 @@
-
+Prolog Commons {#prolog_commons}
+=============
This directory should hold files from the Prolog Commons
project. Please see
diff --git a/README.md b/README.md
index 610b8d187..756627999 100644
--- a/README.md
+++ b/README.md
@@ -3,12 +3,12 @@

-README for YAP6
+User Manual for YAP6 (#main)
====================
-NOTE: this version of YAP is stil experimental, documentation may be out of date.
+NOTE: this version of YAP is still experimental, documentation may be out of date.
-## Introduction
+## Introduction
This document provides User information on version 6.3.4 of
YAP (Yet Another Prolog). The YAP Prolog System is a
@@ -94,22 +94,3 @@ DTAI group of KULeuven.
+ The [R](http://stoics.org.uk/~nicos/sware/packs/real/) interface package developed by Nicos Angelopoulos,
Vítor Santos Costa, João Azevedo, Jan Wielemaker, and Rui Camacho.
-
-
-Downloading YAP {#download}
-==============
-
-The latest development version of Yap-6 is yap-6.3.4 and can be
-obtained from the repositories
-
-
-
-and
-
-
-
-YAP-6.3.4 does not use modules. Please just use `git clone` to obtain the distribution.
-
-Most of these repositories are basically copies of the original
-repositories at the SWI-Prolog site. YAP-6 will work either with or
-without these packages.
diff --git a/Untitled b/Untitled
deleted file mode 100644
index 1b2556d6c..000000000
--- a/Untitled
+++ /dev/null
@@ -1,337 +0,0 @@
-Process: Python [88916]
-Path: /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
-Identifier: Python
-Version: 2.7.10 (2.7.10)
-Code Type: X86-64 (Native)
-Parent Process: Atom Helper [88821]
-Responsible: Atom [88817]
-User ID: 501
-
-Date/Time: 2016-06-12 12:40:34.078 +0100
-OS Version: Mac OS X 10.11.5 (15F34)
-Report Version: 11
-Anonymous UUID: B8085CAA-5C3C-7B89-D7A4-E30E7D5EAC9C
-
-Sleep/Wake UUID: ABD12798-599D-4E2A-8BAF-24F5ACC919E7
-
-Time Awake Since Boot: 220000 seconds
-Time Since Wake: 4000 seconds
-
-System Integrity Protection: enabled
-
-Crashed Thread: 0 Dispatch queue: com.apple.main-thread
-
-Exception Type: EXC_BAD_ACCESS (SIGSEGV)
-Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000008
-
-VM Regions Near 0x8:
--->
- __TEXT 0000000105287000-0000000105288000 [ 4K] r-x/rwx SM=COW /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
-
-Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
-0 org.python.python 0x000000010532ffce 0x10528f000 + 659406
-1 org.python.python 0x0000000105330481 PyGILState_Ensure + 55
-2 com.apple.LLDB.framework 0x0000000108b1e37a lldb_private::ScriptInterpreterPython::Locker::DoAcquireLock() + 28
-3 com.apple.LLDB.framework 0x0000000108b23a6b lldb_private::ScriptInterpreterPython::Clear() + 37
-4 com.apple.LLDB.framework 0x000000010885e510 lldb_private::Debugger::Clear() + 266
-5 com.apple.LLDB.framework 0x000000010885f8ec lldb_private::Debugger::~Debugger() + 28
-6 com.apple.LLDB.framework 0x000000010885fc0e lldb_private::Debugger::~Debugger() + 14
-7 libc++.1.dylib 0x00007fff91f31cb8 std::__1::__shared_weak_count::__release_shared() + 44
-8 com.apple.LLDB.framework 0x00000001068a06cf std::__1::__vector_base, std::__1::allocator > >::~__vector_base() + 49
-9 libsystem_c.dylib 0x00007fff9321246b __cxa_finalize_ranges + 345
-10 libsystem_c.dylib 0x00007fff9321276f exit + 55
-11 org.python.python 0x000000010533200c 0x10528f000 + 667660
-12 org.python.python 0x0000000105331c45 PyErr_PrintEx + 41
-13 org.python.python 0x0000000105331668 PyRun_SimpleFileExFlags + 750
-14 org.python.python 0x0000000105343011 Py_Main + 3137
-15 libdyld.dylib 0x00007fff8d16d5ad start + 1
-
-Thread 1:
-0 libsystem_kernel.dylib 0x00007fff9af6bf72 mach_msg_trap + 10
-1 libsystem_kernel.dylib 0x00007fff9af6b3b3 mach_msg + 55
-2 com.apple.CoreFoundation 0x00007fff95f861c4 __CFRunLoopServiceMachPort + 212
-3 com.apple.CoreFoundation 0x00007fff95f8568c __CFRunLoopRun + 1356
-4 com.apple.CoreFoundation 0x00007fff95f84ed8 CFRunLoopRunSpecific + 296
-5 com.apple.CoreFoundation 0x00007fff95fc69b1 CFRunLoopRun + 97
-6 com.apple.DebugSymbols 0x00007fff87a2c69a SpotlightQueryThread(void*) + 346
-7 libsystem_pthread.dylib 0x00007fff9490e99d _pthread_body + 131
-8 libsystem_pthread.dylib 0x00007fff9490e91a _pthread_start + 168
-9 libsystem_pthread.dylib 0x00007fff9490c351 thread_start + 13
-
-Thread 2:
-0 libsystem_kernel.dylib 0x00007fff9af725e2 __workq_kernreturn + 10
-1 libsystem_pthread.dylib 0x00007fff9490e578 _pthread_wqthread + 1283
-2 libsystem_pthread.dylib 0x00007fff9490c341 start_wqthread + 13
-
-Thread 3:
-0 libsystem_kernel.dylib 0x00007fff9af725e2 __workq_kernreturn + 10
-1 libsystem_pthread.dylib 0x00007fff9490e578 _pthread_wqthread + 1283
-2 libsystem_pthread.dylib 0x00007fff9490c341 start_wqthread + 13
-
-Thread 4:: Dispatch queue: com.apple.libdispatch-manager
-0 libsystem_kernel.dylib 0x00007fff9af72efa kevent_qos + 10
-1 libdispatch.dylib 0x00007fff87927165 _dispatch_mgr_invoke + 216
-2 libdispatch.dylib 0x00007fff87926dcd _dispatch_mgr_thread + 52
-
-Thread 5:
-0 libsystem_kernel.dylib 0x00007fff9af725e2 __workq_kernreturn + 10
-1 libsystem_pthread.dylib 0x00007fff9490e578 _pthread_wqthread + 1283
-2 libsystem_pthread.dylib 0x00007fff9490c341 start_wqthread + 13
-
-Thread 6:
-0 libsystem_kernel.dylib 0x00007fff9af725e2 __workq_kernreturn + 10
-1 libsystem_pthread.dylib 0x00007fff9490e578 _pthread_wqthread + 1283
-2 libsystem_pthread.dylib 0x00007fff9490c341 start_wqthread + 13
-
-Thread 7:
-0 libsystem_kernel.dylib 0x00007fff9af725e2 __workq_kernreturn + 10
-1 libsystem_pthread.dylib 0x00007fff9490e578 _pthread_wqthread + 1283
-2 libsystem_pthread.dylib 0x00007fff9490c341 start_wqthread + 13
-
-Thread 0 crashed with X86 Thread State (64-bit):
- rax: 0x0000000000000001 rbx: 0x00007fb1e266bdb0 rcx: 0x00000b0000000000 rdx: 0x00007fb1e2403388
- rdi: 0x00007fb1e2403368 rsi: 0x00000b0000000b00 rbp: 0x00007fff5a9785a0 rsp: 0x00007fff5a978580
- r8: 0x00000000fffffffc r9: 0x00007fb1e2403380 r10: 0x00000000ffffffff r11: 0xffffffff00000000
- r12: 0x0000000000000001 r13: 0x0000000000000000 r14: 0x0000000000000000 r15: 0x0000000000000001
- rip: 0x000000010532ffce rfl: 0x0000000000010206 cr2: 0x0000000000000008
-
-Logical CPU: 6
-Error Code: 0x00000004
-Trap Number: 14
-
-
-Binary Images:
- 0x105287000 - 0x105287fff org.python.python (2.7.10 - 2.7.10) <307E6E15-ECF7-3BB2-AF06-3E8D23DFDECA> /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
- 0x10528f000 - 0x105380ff7 org.python.python (2.7.10 - 2.7.10) <83AFAAA7-BDFA-354D-8A7A-8F40A30ACB91> /System/Library/Frameworks/Python.framework/Versions/2.7/Python
- 0x105746000 - 0x105747fff _locale.so (94) <4394AC91-22AE-3D7D-85C4-792A4F35F3F2> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_locale.so
- 0x10580c000 - 0x10580dff7 time.so (94) <94E8BF2A-7841-32AD-8722-6B2526999CA1> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/time.so
- 0x105814000 - 0x105816fff select.so (94) <22170D1C-40EF-303A-8BB7-A48E783F9350> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/select.so
- 0x10581d000 - 0x10581efff fcntl.so (94) <419069D5-A61F-3925-B320-EA7B9E38F44B> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/fcntl.so
- 0x105823000 - 0x105826fff _struct.so (94) <0DCC6B47-A763-3AA6-82C5-B6A58073286B> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_struct.so
- 0x10582d000 - 0x10582ffff binascii.so (94) <9044E1C3-221F-3B79-847A-C9C3D8FEA9FD> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/binascii.so
- 0x105834000 - 0x105835fff cStringIO.so (94) /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cStringIO.so
- 0x10596c000 - 0x10596dfff libpanel.5.4.dylib (46) /usr/lib/libpanel.5.4.dylib
- 0x1059a2000 - 0x1059b0fff _ctypes.so (94) <57C51BC5-542B-3E78-94AC-0AC3DDEAFE8F> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_ctypes.so
- 0x1059bd000 - 0x1059c1fff itertools.so (94) <889782F7-5414-3881-BAAB-83CACDFDF0C5> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/itertools.so
- 0x1059cb000 - 0x1059cefff operator.so (94) /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/operator.so
- 0x1059d5000 - 0x1059d6ff7 readline.so (94) <9761BEFB-EF61-3542-B6D7-D4EE20F4FCF2> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/readline.so
- 0x1059dd000 - 0x1059dffff _collections.so (94) <5FEB3871-0B8F-3233-876C-0E81CF581963> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_collections.so
- 0x1059e6000 - 0x1059e7fff _heapq.so (94) <9200023E-75BA-3F20-843C-398C3709CA88> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_heapq.so
- 0x1059ed000 - 0x1059f4ff7 _socket.so (94) <0995C171-1F75-3087-89BE-EC0F68FB1231> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_socket.so
- 0x1059ff000 - 0x105a00fff _functools.so (94) <49B479ED-A07D-322D-9A29-AFF4CA084219> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_functools.so
- 0x105a05000 - 0x105a0efff _ssl.so (94) <027A0AA6-E941-32D2-A091-47C3A43DD846> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_ssl.so
- 0x105a1a000 - 0x105a25fff cPickle.so (94) /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cPickle.so
- 0x105a2c000 - 0x105a3bfff _io.so (94) <39FEF2EC-8D20-33A6-B91F-EF7B2FAE9009> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
- 0x105a4c000 - 0x105a4fff7 math.so (94) <216DBA90-4498-361D-8321-B41F9A3B121C> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/math.so
- 0x105a56000 - 0x105a57fff _hashlib.so (94) /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_hashlib.so
- 0x105a5d000 - 0x105a5eff7 _random.so (94) <5A3C615E-01F8-37C2-A3F2-B1EDEB31C954> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_random.so
- 0x105a63000 - 0x105a66ff7 strop.so (94) <44D8B4D6-D536-31EE-94EA-4F3C0FC773FA> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/strop.so
- 0x105a6c000 - 0x105a6cfff _scproxy.so (94) <07D4037C-CB1A-3850-9C0A-A29446A772CE> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_scproxy.so
- 0x105ab1000 - 0x105ab5fff _json.so (94) <8DF51919-72DB-335D-B4F5-D8B3B7A96A89> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_json.so
- 0x105ac0000 - 0x105ac9ff7 datetime.so (94) <94EF278A-0BE1-3990-A13B-2A5F36F64263> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/datetime.so
- 0x10687c000 - 0x10941cff7 com.apple.LLDB.framework (1.350.0.21.9 - 350.0.21.9) <7862FFB0-5204-36DE-A5FA-9BE017CC7E45> /Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/LLDB
- 0x7fff6497b000 - 0x7fff649b225f dyld (360.22) /usr/lib/dyld
- 0x7fff87008000 - 0x7fff872a2ff3 com.apple.security (7.0 - 57337.50.23) <8B6CF71D-A63E-34C9-9227-0AACAB643584> /System/Library/Frameworks/Security.framework/Versions/A/Security
- 0x7fff875a4000 - 0x7fff875a6ff7 com.apple.xpc.ServiceManagement (1.0 - 1) /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
- 0x7fff875d7000 - 0x7fff875dbfff libGIF.dylib (1450) /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
- 0x7fff8767e000 - 0x7fff87686fff com.apple.CoreServices.FSEvents (1223.10.1 - 1223.10.1) <7F5B7A23-BC1D-3FA9-A9B8-D534F1E1979A> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents
- 0x7fff87765000 - 0x7fff877a7ff7 com.apple.Metal (56.6 - 56.6) <2B2C0F78-20B8-3878-B9B1-DE18BB92919D> /System/Library/Frameworks/Metal.framework/Versions/A/Metal
- 0x7fff877a8000 - 0x7fff8780eff7 libsystem_network.dylib (583.50.1) /usr/lib/system/libsystem_network.dylib
- 0x7fff8780f000 - 0x7fff8791efe7 libvDSP.dylib (563.5) <9AB6CA3C-4F0E-35E6-9184-9DF86E7C3DAD> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
- 0x7fff8791f000 - 0x7fff8794cfff libdispatch.dylib (501.40.12) /usr/lib/system/libdispatch.dylib
- 0x7fff87961000 - 0x7fff87964fff libCoreVMClient.dylib (119.5) <560D70FB-709F-3030-96C9-F249FCB7DA6D> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
- 0x7fff87a2b000 - 0x7fff87a65ff7 com.apple.DebugSymbols (132 - 132) <23A42C53-B941-3871-9EE2-4C87A46005B5> /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
- 0x7fff87a66000 - 0x7fff87a6fff7 com.apple.CommonAuth (4.0 - 2.0) <4B8673E1-3697-3FE2-8D30-AC7AC5D4F8BF> /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
- 0x7fff87a9f000 - 0x7fff87abbff3 libresolv.9.dylib (60) /usr/lib/libresolv.9.dylib
- 0x7fff87b6d000 - 0x7fff87c5fff7 libiconv.2.dylib (44) /usr/lib/libiconv.2.dylib
- 0x7fff87c60000 - 0x7fff87c60fff com.apple.Accelerate.vecLib (3.10 - vecLib 3.10) <054DFE32-737D-3211-9A14-0FC5E1A880E3> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
- 0x7fff87dcf000 - 0x7fff87e76fff com.apple.LanguageModeling (1.0 - 1) <58C18A47-BDE7-3CBE-81C0-797029D170A1> /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling
- 0x7fff87e77000 - 0x7fff87f27fe7 libvMisc.dylib (563.5) <6D73C20D-D1C4-3BA5-809B-4B597C15AA86> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
- 0x7fff87f5a000 - 0x7fff882aefff com.apple.Foundation (6.9 - 1259) <71A9D3A0-0B1F-3E3A-86F3-1486365A6EF2> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
- 0x7fff88488000 - 0x7fff88488fff com.apple.CoreServices (728.12 - 728.12) /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
- 0x7fff884b9000 - 0x7fff8850afff com.apple.audio.CoreAudio (4.3.0 - 4.3.0) /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
- 0x7fff8874d000 - 0x7fff88755ffb libsystem_dnssd.dylib (625.50.5) <4D10E12B-59B5-386F-82DA-326F18028F0A> /usr/lib/system/libsystem_dnssd.dylib
- 0x7fff88756000 - 0x7fff8876cff7 libLinearAlgebra.dylib (1162.2) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib
- 0x7fff8876d000 - 0x7fff8879efff com.apple.GSS (4.0 - 2.0) /System/Library/Frameworks/GSS.framework/Versions/A/GSS
- 0x7fff88c4f000 - 0x7fff88d3efff libxml2.2.dylib (29.7) <32BBF51E-B084-3FC2-AE9C-C008BE84102B> /usr/lib/libxml2.2.dylib
- 0x7fff88ef9000 - 0x7fff88f01fff libcopyfile.dylib (127) /usr/lib/system/libcopyfile.dylib
- 0x7fff88f71000 - 0x7fff88fa7fff libssl.0.9.8.dylib (59.40.2) <523FEBFA-4BF7-3A69-83B7-164265BE7F4D> /usr/lib/libssl.0.9.8.dylib
- 0x7fff88fa8000 - 0x7fff88faaff7 libRadiance.dylib (1450) /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
- 0x7fff893ee000 - 0x7fff89417ff7 libxslt.1.dylib (14.2) <6E8D0F06-9086-32D3-9D87-3870A1CE9E99> /usr/lib/libxslt.1.dylib
- 0x7fff8949d000 - 0x7fff894b7ff3 liblzma.5.dylib (10) /usr/lib/liblzma.5.dylib
- 0x7fff894b8000 - 0x7fff894dcfff libJPEG.dylib (1450) <1775E59E-D82C-3F7A-8E4F-B0C13F88F691> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
- 0x7fff894dd000 - 0x7fff894e0fff com.apple.IOSurface (108.2.1 - 108.2.1) /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
- 0x7fff89742000 - 0x7fff89747fff com.apple.TCC (1.0 - 1) /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
- 0x7fff89b44000 - 0x7fff89b46fff libsystem_coreservices.dylib (19.2) <1B3F5AFC-FFCD-3ECB-8B9A-5538366FB20D> /usr/lib/system/libsystem_coreservices.dylib
- 0x7fff89bdd000 - 0x7fff89bddff7 libunc.dylib (29) /usr/lib/system/libunc.dylib
- 0x7fff89bde000 - 0x7fff89c09ffb libarchive.2.dylib (33.20.2) <6C370A21-63FD-3A68-B4B3-5333F24B770B> /usr/lib/libarchive.2.dylib
- 0x7fff8a0fc000 - 0x7fff8a16bfff com.apple.SearchKit (1.4.0 - 1.4.0) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
- 0x7fff8a170000 - 0x7fff8a174fff libcache.dylib (75) <9548AAE9-2AB7-3525-9ECE-A2A7C4688447> /usr/lib/system/libcache.dylib
- 0x7fff8a1e1000 - 0x7fff8a1fdff7 libsystem_malloc.dylib (67.40.1) <5748E8B2-F81C-34C6-8B13-456213127678> /usr/lib/system/libsystem_malloc.dylib
- 0x7fff8a245000 - 0x7fff8a245fff libmetal_timestamp.dylib (600.0.44.1) <6576F284-BACA-332A-A6E7-FA1C347636E3> /System/Library/PrivateFrameworks/GPUCompiler.framework/libmetal_timestamp.dylib
- 0x7fff8a2d9000 - 0x7fff8a2dafff liblangid.dylib (122) <9CC4F0D1-5C51-3B69-BC8F-EE3A51FD0822> /usr/lib/liblangid.dylib
- 0x7fff8a2db000 - 0x7fff8a2e9fff com.apple.opengl (12.1.0 - 12.1.0) /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
- 0x7fff8ae82000 - 0x7fff8aeabff7 libxpc.dylib (765.50.8) <54D1328E-054E-3DAA-89E2-375722F9D18F> /usr/lib/system/libxpc.dylib
- 0x7fff8aeac000 - 0x7fff8b2a8fff libLAPACK.dylib (1162.2) <987E42B0-5108-3065-87F0-9DF7616A8A06> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
- 0x7fff8b3a2000 - 0x7fff8b648ff7 com.apple.CoreData (120 - 641.3) /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
- 0x7fff8b649000 - 0x7fff8b678ffb libsystem_m.dylib (3105) <08E1A4B2-6448-3DFE-A58C-ACC7335BE7E4> /usr/lib/system/libsystem_m.dylib
- 0x7fff8be57000 - 0x7fff8be6efff libmarisa.dylib (4) /usr/lib/libmarisa.dylib
- 0x7fff8c64b000 - 0x7fff8c778ff3 com.apple.CoreText (352.0 - 494.11) <08E8640E-6602-3A00-BC28-94235FD311B4> /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
- 0x7fff8c794000 - 0x7fff8c7e9fff com.apple.AE (701 - 701) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
- 0x7fff8c83b000 - 0x7fff8c83dfff com.apple.loginsupport (1.0 - 1) <9B2F5F9B-ED38-313F-B798-D2B667BCD6B5> /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport
- 0x7fff8cb98000 - 0x7fff8cb9bfff libsystem_sandbox.dylib (460.50.4) <150A9D3D-F69E-32F7-8C7B-8E72CAAFF7E4> /usr/lib/system/libsystem_sandbox.dylib
- 0x7fff8cb9c000 - 0x7fff8cb9cff7 libkeymgr.dylib (28) <8371CE54-5FDD-3CE9-B3DF-E98C761B6FE0> /usr/lib/system/libkeymgr.dylib
- 0x7fff8cbff000 - 0x7fff8cc00fff com.apple.TrustEvaluationAgent (2.0 - 25) <0239494E-FEFE-39BC-9FC7-E251BA5128F1> /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent
- 0x7fff8cc01000 - 0x7fff8cc01fff libOpenScriptingUtil.dylib (169.1) /usr/lib/libOpenScriptingUtil.dylib
- 0x7fff8d16a000 - 0x7fff8d16dffb libdyld.dylib (360.22) /usr/lib/system/libdyld.dylib
- 0x7fff8d245000 - 0x7fff8d246fff libffi.dylib (18.1) <5BA9612C-747E-33CE-9DB1-3C01ECF3041D> /usr/lib/libffi.dylib
- 0x7fff8d2e2000 - 0x7fff8d378fff com.apple.ColorSync (4.9.0 - 4.9.0) <8FC37E20-6579-3CB2-9D49-BC39FC38DF87> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
- 0x7fff8d6fd000 - 0x7fff8d771ff7 com.apple.Heimdal (4.0 - 2.0) <5D365381-8B5E-3259-8867-FC4A7D307BDE> /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
- 0x7fff8d772000 - 0x7fff8d773fff libDiagnosticMessagesClient.dylib (100) <4243B6B4-21E9-355B-9C5A-95A216233B96> /usr/lib/libDiagnosticMessagesClient.dylib
- 0x7fff8d7e3000 - 0x7fff8d808ff7 libPng.dylib (1450) /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
- 0x7fff8ebb0000 - 0x7fff8ed56ff7 com.apple.audio.toolbox.AudioToolbox (1.13 - 1.13) <082319FC-59F2-3D36-AC9B-94759724E302> /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
- 0x7fff8f074000 - 0x7fff8f090ff7 libextension.dylib (78) /usr/lib/libextension.dylib
- 0x7fff8f127000 - 0x7fff8f137fff libbsm.0.dylib (34) <7E14504C-A8B0-3574-B6EB-5D5FABC72926> /usr/lib/libbsm.0.dylib
- 0x7fff8f177000 - 0x7fff903c5fe7 com.apple.CoreGraphics (1.600.0 - 957) /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
- 0x7fff903c6000 - 0x7fff904eafff libsqlite3.dylib (216.4) <280D67B8-F93D-3587-A146-19F36C817548> /usr/lib/libsqlite3.dylib
- 0x7fff90521000 - 0x7fff9055fff7 libGLImage.dylib (12.1) /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
- 0x7fff90622000 - 0x7fff90667ff7 com.apple.coreservices.SharedFileList (24.4 - 24.5) <1D2AD77B-778F-3253-A295-3D0A32A8121C> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList
- 0x7fff90709000 - 0x7fff90717fff libxar.1.dylib (302) <03207F66-2C4A-3DBD-8D81-70F4C85903C4> /usr/lib/libxar.1.dylib
- 0x7fff90e64000 - 0x7fff90e73ffb com.apple.LangAnalysis (1.7.0 - 1.7.0) <18D21123-A3E7-3851-974A-08E5D4540475> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
- 0x7fff90f0b000 - 0x7fff90f57fff com.apple.print.framework.PrintCore (11.2 - 472.2) <5AE8AA6B-CE09-397D-B0D4-0F9CCBF1F77D> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
- 0x7fff90f96000 - 0x7fff90fbafff com.apple.MultitouchSupport.framework (304.12 - 304.12) <65CB7653-EACD-3ADB-ABB6-2E0671708301> /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
- 0x7fff91154000 - 0x7fff91165ff7 libsystem_trace.dylib (201.10.3) /usr/lib/system/libsystem_trace.dylib
- 0x7fff911f6000 - 0x7fff91254fff com.apple.SystemConfiguration (1.14 - 1.14) /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
- 0x7fff919db000 - 0x7fff919f2ff7 libsystem_coretls.dylib (83.40.5) /usr/lib/system/libsystem_coretls.dylib
- 0x7fff919f3000 - 0x7fff919f3fff com.apple.ApplicationServices (48 - 48) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
- 0x7fff91b86000 - 0x7fff91bd2ffb com.apple.HIServices (1.22 - 550) <6B76B41C-CF5A-34C4-89F4-EFD7CA3D1C9D> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
- 0x7fff91c23000 - 0x7fff91c64ff7 libGLU.dylib (12.1) /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
- 0x7fff91c65000 - 0x7fff91c96ff7 libncurses.5.4.dylib (46) /usr/lib/libncurses.5.4.dylib
- 0x7fff91ef6000 - 0x7fff91f49ff7 libc++.1.dylib (120.1) <8FC3D139-8055-3498-9AC5-6467CB7F4D14> /usr/lib/libc++.1.dylib
- 0x7fff91f8c000 - 0x7fff91f8eff7 libquarantine.dylib (80) <0F4169F0-0C84-3A25-B3AE-E47B3586D908> /usr/lib/system/libquarantine.dylib
- 0x7fff91fc3000 - 0x7fff91fddfff com.apple.Kerberos (3.0 - 1) <1B4744BF-E5AE-38E2-AA56-E22D3270F2E8> /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
- 0x7fff9233c000 - 0x7fff9269ef3f libobjc.A.dylib (680) <7489D2D6-1EFD-3414-B18D-2AECCCC90286> /usr/lib/libobjc.A.dylib
- 0x7fff926df000 - 0x7fff926f0fff libcmph.dylib (6) /usr/lib/libcmph.dylib
- 0x7fff92756000 - 0x7fff9279bff3 libFontRegistry.dylib (155.2) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
- 0x7fff927b9000 - 0x7fff927c4ff7 libcommonCrypto.dylib (60075.50.1) <93732261-34B4-3914-B7A2-90A81A182DBA> /usr/lib/system/libcommonCrypto.dylib
- 0x7fff927c5000 - 0x7fff927c6ffb libremovefile.dylib (41) <552EF39E-14D7-363E-9059-4565AC2F894E> /usr/lib/system/libremovefile.dylib
- 0x7fff93126000 - 0x7fff93131ff7 libChineseTokenizer.dylib (16) <79B8C67A-3061-3C78-92CD-4650719E68D4> /usr/lib/libChineseTokenizer.dylib
- 0x7fff93132000 - 0x7fff9313cfff com.apple.NetAuth (6.0 - 6.0) /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
- 0x7fff931b3000 - 0x7fff93240fff libsystem_c.dylib (1082.50.1) /usr/lib/system/libsystem_c.dylib
- 0x7fff93250000 - 0x7fff935e5fdb com.apple.vImage (8.0 - 8.0) <4BAC9B6F-7482-3580-8787-AB0A5B4D331B> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
- 0x7fff9394a000 - 0x7fff939bffff com.apple.framework.IOKit (2.0.2 - 1179.50.2) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
- 0x7fff939e9000 - 0x7fff93a02fff com.apple.CFOpenDirectory (10.11 - 194) <11F95672-55E0-3F9D-9171-5E8C56AEE948> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
- 0x7fff93ad9000 - 0x7fff93ae1fff libGFXShared.dylib (12.1) <5A0C2493-200C-30BE-97D5-8E8C0B8E604D> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
- 0x7fff93ae2000 - 0x7fff93aeafff libsystem_networkextension.dylib (385.40.36) <66095DC7-6539-38F2-95EE-458F15F6D014> /usr/lib/system/libsystem_networkextension.dylib
- 0x7fff93d66000 - 0x7fff93d83ff7 com.apple.AppleVPAFramework (2.1.2 - 2.1.2) <41378C0B-B56A-3A73-9BD0-E06FA1F87B8C> /System/Library/PrivateFrameworks/AppleVPA.framework/Versions/A/AppleVPA
- 0x7fff94496000 - 0x7fff9449efff com.apple.NetFS (6.0 - 4.0) <842A5346-24C3-3F22-9ECF-E586A10EA1F2> /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
- 0x7fff9449f000 - 0x7fff944a4ff7 libmacho.dylib (875.1) <318264FA-58F1-39D8-8285-1F6254EE410E> /usr/lib/system/libmacho.dylib
- 0x7fff944a5000 - 0x7fff944cefff libsystem_info.dylib (477.50.4) /usr/lib/system/libsystem_info.dylib
- 0x7fff945f8000 - 0x7fff9466ffeb libcorecrypto.dylib (335.50.1) /usr/lib/system/libcorecrypto.dylib
- 0x7fff94672000 - 0x7fff9467afef libsystem_platform.dylib (74.40.2) <29A905EF-6777-3C33-82B0-6C3A88C4BA15> /usr/lib/system/libsystem_platform.dylib
- 0x7fff947a8000 - 0x7fff94835dd7 com.apple.AppleJPEG (1.0 - 1) <558ACADA-C41F-3EEF-82A0-C2D7B13C5428> /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG
- 0x7fff9490b000 - 0x7fff94914ff7 libsystem_pthread.dylib (138.10.4) <3DD1EF4C-1D1B-3ABF-8CC6-B3B1CEEE9559> /usr/lib/system/libsystem_pthread.dylib
- 0x7fff94915000 - 0x7fff94923ff7 libbz2.1.0.dylib (38) <28E54258-C0FE-38D4-AB76-1734CACCB344> /usr/lib/libbz2.1.0.dylib
- 0x7fff949d8000 - 0x7fff949e4fff com.apple.speech.synthesis.framework (5.4.12 - 5.4.12) <71DA00B8-5EA2-326B-8814-59DB25512F65> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
- 0x7fff949e5000 - 0x7fff94a43fff com.apple.CoreServices.OSServices (728.12 - 728.12) <776EBD4F-7052-377F-A70D-E2FDBD465A5E> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
- 0x7fff94c55000 - 0x7fff94c6dfef libcompression.dylib (28) /usr/lib/libcompression.dylib
- 0x7fff94d75000 - 0x7fff94d81ff7 com.apple.OpenDirectory (10.11 - 194) <31A67AD5-5CC2-350A-96D7-821DF4BC4196> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
- 0x7fff94dd2000 - 0x7fff94de9ff7 libsystem_asl.dylib (323.50.1) <41F8E11F-1BD0-3F1D-BA3A-AA1577ED98A9> /usr/lib/system/libsystem_asl.dylib
- 0x7fff95efc000 - 0x7fff96372fff com.apple.CoreFoundation (6.9 - 1258.1) <943A1383-DA6A-3DC0-ABCD-D9AEB3D0D34D> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
- 0x7fff96a8b000 - 0x7fff96a8cffb libSystem.B.dylib (1226.10.1) /usr/lib/libSystem.B.dylib
- 0x7fff96b0b000 - 0x7fff96b67fff libTIFF.dylib (1450) <14EB7C03-7DDA-3276-BAC5-D597913AC9C4> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
- 0x7fff9788c000 - 0x7fff97900ff3 com.apple.securityfoundation (6.0 - 55126) <130656AE-2711-3914-8736-D8B021C93FE0> /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
- 0x7fff97901000 - 0x7fff9796fff7 com.apple.ApplicationServices.ATS (377 - 394.4) <9779E916-0788-3CAC-B1EC-F68BCB12A2B6> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
- 0x7fff97970000 - 0x7fff979c1ff7 libcups.2.dylib (435.2) <91584A40-214D-33E8-A613-CE22289037C8> /usr/lib/libcups.2.dylib
- 0x7fff97acb000 - 0x7fff97ad4ff3 libsystem_notify.dylib (150.40.1) /usr/lib/system/libsystem_notify.dylib
- 0x7fff97c56000 - 0x7fff97c58fff libCVMSPluginSupport.dylib (12.1) /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
- 0x7fff97c59000 - 0x7fff97c5cff7 libCoreFSCache.dylib (119.5) <2389D7DA-B8EF-3EB4-AAAF-FBEDE01CDECA> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib
- 0x7fff97d7b000 - 0x7fff97d80ff7 libheimdal-asn1.dylib (453.40.10) <981DE40B-FA16-36F7-BE92-8C8A115D6CD9> /usr/lib/libheimdal-asn1.dylib
- 0x7fff97d81000 - 0x7fff97d9fffb libedit.3.dylib (43) <1D3E3152-4001-3C19-B56A-7543F1BBA47C> /usr/lib/libedit.3.dylib
- 0x7fff987b2000 - 0x7fff989bffff libicucore.A.dylib (551.51.3) <5BC80F94-C90D-3175-BD96-FF1DC222EC9C> /usr/lib/libicucore.A.dylib
- 0x7fff989c0000 - 0x7fff989c0ff7 liblaunch.dylib (765.50.8) <834ED605-5114-3641-AA4D-ECF31B801C50> /usr/lib/system/liblaunch.dylib
- 0x7fff98b55000 - 0x7fff98b8ffff com.apple.QD (3.12 - 302) <0FE53180-2895-3D14-A1E7-F82DE1D106E1> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
- 0x7fff98be1000 - 0x7fff98be1fff libenergytrace.dylib (10.40.1) <0A491CA7-3451-3FD5-999A-58AB4362682B> /usr/lib/libenergytrace.dylib
- 0x7fff98c36000 - 0x7fff98c41fff libGL.dylib (12.1) <70D51643-04AC-3400-8F11-A6FC25985289> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
- 0x7fff98c77000 - 0x7fff98ca0fff libc++abi.dylib (125) /usr/lib/libc++abi.dylib
- 0x7fff98cb0000 - 0x7fff98cdfff7 com.apple.DictionaryServices (1.2 - 250.3) <30250542-CBAA-39C1-91AA-B57A5DE17594> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
- 0x7fff98ce0000 - 0x7fff98ce7ff7 libcompiler_rt.dylib (62) /usr/lib/system/libcompiler_rt.dylib
- 0x7fff98d10000 - 0x7fff98fa6fff libmecabra.dylib (696.5) /usr/lib/libmecabra.dylib
- 0x7fff99bdb000 - 0x7fff99bdbfff com.apple.Accelerate (1.10 - Accelerate 1.10) <185EC96A-5AF0-3620-A4ED-4D3654D25B39> /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
- 0x7fff99bdc000 - 0x7fff99bddfff libsystem_blocks.dylib (65) <1244D9D5-F6AA-35BB-B307-86851C24B8E5> /usr/lib/system/libsystem_blocks.dylib
- 0x7fff99d2d000 - 0x7fff99e94fff libBLAS.dylib (1162.2) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
- 0x7fff99f74000 - 0x7fff9a259ffb com.apple.CoreServices.CarbonCore (1136.2 - 1136.2) <2DBAFC9A-6CD6-351D-B1F4-87D81AA6D640> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
- 0x7fff9a2cc000 - 0x7fff9a312ff7 libauto.dylib (186) <999E610F-41FC-32A3-ADCA-5EC049B65DFB> /usr/lib/libauto.dylib
- 0x7fff9a359000 - 0x7fff9a35ffff com.apple.IOAccelerator (205.10 - 205.10) /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator
- 0x7fff9a40b000 - 0x7fff9a410ff3 libunwind.dylib (35.3) /usr/lib/system/libunwind.dylib
- 0x7fff9a833000 - 0x7fff9a923fff libJP2.dylib (1450) /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
- 0x7fff9ab94000 - 0x7fff9aba5fff libSparseBLAS.dylib (1162.2) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib
- 0x7fff9abea000 - 0x7fff9ac8afff com.apple.Metadata (10.7.0 - 972.34) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
- 0x7fff9af5b000 - 0x7fff9af79ff7 libsystem_kernel.dylib (3248.50.21) <78E54D59-D2B0-3F54-9A4A-0A68D671F253> /usr/lib/system/libsystem_kernel.dylib
- 0x7fff9b073000 - 0x7fff9b159ff7 libcrypto.0.9.8.dylib (59.40.2) <2486D801-C756-3488-B519-1AA6807E8948> /usr/lib/libcrypto.0.9.8.dylib
- 0x7fff9b3c1000 - 0x7fff9b4bdff7 libFontParser.dylib (158.6) <267A9AE4-4138-3112-8D73-BDFDC96568FF> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
- 0x7fff9b4c2000 - 0x7fff9b4ddff7 libCRFSuite.dylib (34) <078B4CD8-6A8C-3067-B2BA-0C2A0BAB8AC3> /usr/lib/libCRFSuite.dylib
- 0x7fff9b625000 - 0x7fff9b8acff3 com.apple.CFNetwork (760.5.1 - 760.5.1) /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
- 0x7fff9b928000 - 0x7fff9baeefe7 com.apple.ImageIO.framework (3.3.0 - 1450) <18ABA1F4-43EC-3990-9777-C91FD3D6AF71> /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
- 0x7fff9bdf0000 - 0x7fff9be24ff7 com.apple.CoreVideo (1.8 - 191.3) <1AA24A1B-CB84-3F6B-B6DE-11494542649C> /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
- 0x7fff9bf5b000 - 0x7fff9bf60fff com.apple.DiskArbitration (2.7 - 2.7) /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
- 0x7fff9bf61000 - 0x7fff9c086fff com.apple.LaunchServices (728.12 - 728.12) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
- 0x7fff9c0e4000 - 0x7fff9c0effff libkxld.dylib (3248.50.21) <99195052-038E-3490-ACF8-76F9AC43897E> /usr/lib/system/libkxld.dylib
- 0x7fff9d382000 - 0x7fff9d386fff libpam.2.dylib (20) /usr/lib/libpam.2.dylib
- 0x7fff9d4b7000 - 0x7fff9d4c8ff7 libz.1.dylib (61.20.1) /usr/lib/libz.1.dylib
- 0x7fff9d4ca000 - 0x7fff9d4f8ff7 com.apple.CoreServicesInternal (248.2 - 248.2) <6E111F0A-D7F1-3738-ADE7-CF983BD4EC8B> /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal
- 0x7fff9d4f9000 - 0x7fff9d4fbff7 libsystem_configuration.dylib (802.40.13) <3DEB7DF9-6804-37E1-BC83-0166882FF0FF> /usr/lib/system/libsystem_configuration.dylib
- 0x7fff9d5ab000 - 0x7fff9d5acfff libsystem_secinit.dylib (20) <32B1A8C6-DC84-3F4F-B8CE-9A52B47C3E6B> /usr/lib/system/libsystem_secinit.dylib
-
-External Modification Summary:
- Calls made by other processes targeting this process:
- task_for_pid: 11
- thread_create: 0
- thread_set_state: 0
- Calls made by this process:
- task_for_pid: 0
- thread_create: 0
- thread_set_state: 0
- Calls made by all processes on this machine:
- task_for_pid: 199747
- thread_create: 0
- thread_set_state: 9181
-
-VM Region Summary:
-ReadOnly portion of Libraries: Total=231.3M resident=0K(0%) swapped_out_or_unallocated=231.3M(100%)
-Writable regions: Total=112.3M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=112.3M(100%)
-
- VIRTUAL REGION
-REGION TYPE SIZE COUNT (non-coalesced)
-=========== ======= =======
-Activity Tracing 2048K 2
-Dispatch continuations 16.0M 2
-Kernel Alloc Once 4K 2
-MALLOC 75.5M 22
-MALLOC guard page 32K 7
-STACK GUARD 56.0M 9
-Stack 11.1M 16
-VM_ALLOCATE 7448K 21
-__DATA 11.8M 183
-__LINKEDIT 101.5M 32
-__TEXT 129.8M 182
-__UNICODE 552K 2
-mapped file 47.0M 49
-shared memory 324K 9
-=========== ======= =======
-TOTAL 458.9M 524
-
-Model: MacBookPro11,5, BootROM MBP114.0172.B09, 4 processors, Intel Core i7, 2,5 GHz, 16 GB, SMC 2.30f2
-Graphics: AMD Radeon R9 M370X, AMD Radeon R9 M370X, PCIe, 2048 MB
-Graphics: Intel Iris Pro, Intel Iris Pro, Built-In
-Memory Module: BANK 0/DIMM0, 8 GB, DDR3, 1600 MHz, 0x80AD, 0x484D54343147533642465238412D50422020
-Memory Module: BANK 1/DIMM0, 8 GB, DDR3, 1600 MHz, 0x80AD, 0x484D54343147533642465238412D50422020
-AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0x152), Broadcom BCM43xx 1.0 (7.21.95.175.1a6)
-Bluetooth: Version 4.4.5f3 17904, 3 services, 27 devices, 1 incoming serial ports
-Network Service: Wi-Fi, AirPort, en0
-Serial ATA Device: APPLE SSD SM0512G, 500,28 GB
-USB Device: USB 3.0 Bus
-USB Device: Card Reader
-USB Device: Apple Internal Keyboard / Trackpad
-USB Device: Bluetooth USB Host Controller
-Thunderbolt Bus: MacBook Pro, Apple Inc., 27.1
diff --git a/cmake/Config.cmake b/cmake/Config.cmake
index 9c0abcae4..4b5c288fb 100644
--- a/cmake/Config.cmake
+++ b/cmake/Config.cmake
@@ -15,13 +15,15 @@ include(TestBigEndian)
include(GetGitRevisionDescription)
# modern systems do this.
+
set(MALLOC_T "void *")
OPTION(WITH_SYSTEM_MALLOC
"use malloc to allocate memory" ON)
OPTION(WITH_DL_MALLOC
"use malloc to allocate memory" OFF)
OPTION(WITH_YAP_MALLOC
- "use malloc to allocate memory" OFF)
+ "use malloc to allocate mem
+ ory" OFF)
if (WITH_SYSTEM_MALLOC)
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS USE_SYSTEM_MALLOC=1)
@@ -144,6 +146,7 @@ endif (HAVE_LIBDL)
if (WIN32)
check_library_exists(comdlg32 FindText "" HAVE_LIBCOMDLG32)
if (HAVE_LIBCOMDLG32)
+
set(EXTRALIBS ${EXTRALIBS} comdlg32)
endif (HAVE_LIBCOMDLG32)
check_library_exists(msvcrt strtok "" HAVE_LIBMSCRT)
@@ -215,6 +218,7 @@ if (HAVE_LIBPTHREAD)
endif (HAVE_LIBPTHREAD)
+
check_library_exists(unicode main "" HAVE_LIBUNICODE)
if (HAVE_LIBUNICODE)
set(EXTRALIBS ${EXTRALIBS} unicode)
@@ -255,6 +259,7 @@ check_function_exists(__builtin_ffsll HAVE___BUILTIN_FFSLL)
check_function_exists(fgetpos HAVE_FGETPOS)
check_function_exists(finite HAVE_FINITE)
check_function_exists(iswblank HAVE_ISWBLANK)
+check_function_exists(iswspace HAVE_ISWSPACE)
check_symbol_exists(flsl HAVE_FLSL)
check_symbol_exists(flsll HAVE_FLSLL)
check_function_exists(fmemopen HAVE_FMEMOPEN)
@@ -262,7 +267,7 @@ check_function_exists(fpclass HAVE_FPCLASS)
check_function_exists(ftime HAVE_FTIME)
check_function_exists(ftruncate HAVE_FTRUNCATE)
check_function_exists(funopen HAVE_FUNOPEN)
-check_function_exists(gcc HAVE_GCC)
+#check_function_exists(gcc HAVE_GCC)
check_function_exists(getcwd HAVE_GETCWD)
check_function_exists(getenv HAVE_GETENV)
check_function_exists(getexecname HAVE_GETEXECNAME)
@@ -336,10 +341,14 @@ check_function_exists(socklen_t HAVE_SOCKLEN_T)
check_function_exists(sqllen HAVE_SQLLEN)
check_function_exists(sqlulen HAVE_SQLULEN)
check_function_exists(srand HAVE_SRAND)
-check_function_exists(srand HAVE_SRAND48)
+check_function_exists(srand48 HAVE_SRAND48)
check_function_exists(srandom HAVE_SRANDOM)
+check_function_exists(stpcpy HAVE_STPCPY)
+check_function_exists(stpncpy HAVE_STPNCPY)
check_function_exists(ssize_t HAVE_SSIZE_T)
check_function_exists(stat HAVE_STAT)
+check_function_exists(strcat HAVE_STRCAT)
+check_function_exists(strncat HAVE_STRNCAT)
check_function_exists(strcasecmp HAVE_STRCASECMP)
check_function_exists(strcasestr HAVE_STRCASESTR)
check_function_exists(strchr HAVE_STRCHR)
@@ -395,5 +404,13 @@ configure_file(${CMAKE_CURRENT_LIST_DIR}/../YapTermConfig.h.cmake
configure_file(${CMAKE_CURRENT_LIST_DIR}/../config.h.cmake
${CMAKE_BINARY_DIR}/config.h)
configure_file(${CMAKE_CURRENT_LIST_DIR}/../GitSHA1.c.in GitSHA1.c @ONLY)
-
configure_file(${CMAKE_CURRENT_LIST_DIR}/../os/YapIOConfig.h.cmake ${CMAKE_BINARY_DIR}/os/YapIOConfig.h)
+
+check_include_files( "stdio.h;cudd.h" HAVE_CTYPE_HUDD_H )
+
+check_include_files( "stdio.h;cuddI.h" HAVE_CUDD_H )
+check_include_files( "cudd.h;cuddInt.h" HAVE_CUDDINT_H )
+check_include_files( "stdio.h;cudd/cudd.h" HAVE_CUDD_CUDD_H )
+check_include_files( "stdio.h;cudd/cuddInt.h" HAVE_CUDD_CUDDINT_H )
+configure_file (cmake/cudd_config.h.cmake
+ "${CMAKE_CURRENT_BINARY_DIR}/cudd_config.h" )
diff --git a/cmake/FindCUDD.cmake b/cmake/FindCUDD.cmake
index c8821176a..3ebf72b40 100644
--- a/cmake/FindCUDD.cmake
+++ b/cmake/FindCUDD.cmake
@@ -13,6 +13,7 @@
SET( CUDD_FOUND "NO" )
set (CUDD_INCLUDE_SEARCH_PATH
+ ${CUDD_ROOT_DIR}/include
${CMAKE_INSTALL_PREFIX}/include
/usr/local/yap/include
/usr/local/Yap/include
@@ -32,6 +33,7 @@ set (CUDD_INCLUDE_SEARCH_PATH
set (CUDD_LIB_SEARCH_PATH
+ ${CUDD_ROOT_DIR}/lib
${CMAKE_INSTALL_PREFIX}/lib
/usr/lib
/usr/local/lib/cudd
diff --git a/cmake/FindGecode.cmake b/cmake/FindGecode.cmake
index 5055b0de5..402767dee 100644
--- a/cmake/FindGecode.cmake
+++ b/cmake/FindGecode.cmake
@@ -1,12 +1,12 @@
#source from http://code.google.com/p/cpfloat-gecode/source/browse/trunk/cmake-support/FindGecode.cmake?r=9
-
+#
#Works under the assumption than when gecode is installed at least the kernel component exists
# Look for the header file
-find_path(GECODE_INCLUDE_DIR NAMES gecode/kernel.hh PATHS ${CMAKE_INSTALL_PREFIX}/include)
-find_file(GECODE_CONFIG gecode/support/config.hpp PATHS ${CMAKE_INSTALL_PREFIX}/include)
+find_path(GECODE_INCLUDE_DIR NAMES gecode/kernel.hh PATHS ${GECODE_ROOT_DIR}/include ${CMAKE_INSTALL_PREFIX}/include /usr/local/include /opt/local/include /usr}/include)
+find_file(GECODE_CONFIG gecode/support/config.hpp PATHS ${GECODE_ROOT_DIR}/include ${CMAKE_INSTALL_PREFIX}/include /usr/local/include /opt/local/include /usr}/include)
# Look for the library
-find_library(GECODE_LIBRARY NAMES gecodekernel PATHS ${CMAKE_INSTALL_PREFIX}/lib)
-find_library(GECODE_SUPPORT_LIBRARY NAMES gecodesupportl PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+find_library(GECODE_LIBRARY NAMES gecodekernel PATHS ${GECODE_ROOT_DIR}/lib ${CMAKE_INSTALL_PREFIX}/lib /usr/local/lib /opt/local/lib /usr}/lib)
+find_library(GECODE_SUPPORT_LIBRARY NAMES gecodesupport PATHS ${GECODE_ROOT_DIR}/lib ${CMAKE_INSTALL_PREFIX}/lib /usr/local/lib /opt/local/lib /usr}/include)
if(GECODE_CONFIG)
file(STRINGS ${GECODE_CONFIG} GECODE_LINE_VERSION REGEX "^#define GECODE_VERSION .*")
@@ -20,39 +20,39 @@ endif()
if(GECODE_FOUND)
set(GECODE_LIBRARIES ${GECODE_LIBRARY} ${GECODE_SUPPORT_LIBRARY})
set(GECODE_INCLUDE_DIRS ${GECODE_INCLUDE_DIR})
- find_library(GECODE_DRIVER_LIBRARY gecodedriverl PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+ find_library(GECODE_DRIVER_LIBRARY gecodedriver PATHS ${CMAKE_INSTALL_PREFIX}/lib)
if(GECODE_FZ_LIBRARY)
list(APPEND GECODE_LIBRARIES ${GECODE_FZ_LIBRARY})
endif()
- find_library(GECODE_GIST_LIBRARY gecodegistl PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+ find_library(GECODE_GIST_LIBRARY gecodegist PATHS ${CMAKE_INSTALL_PREFIX}/lib)
if(GECODE_GIST_LIBRARY)
list(APPEND GECODE_LIBRARIES ${GECODE_GIST_LIBRARY})
endif()
- find_library(GECODE_GRAPH_LIBRARY gecodegraphl PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+ find_library(GECODE_GRAPH_LIBRARY gecodegraph PATHS ${CMAKE_INSTALL_PREFIX}/lib)
if(GECODE_GRAPH_LIBRARY)
list(APPEND GECODE_LIBRARIES ${GECODE_GRAPH_LIBRARY})
endif()
- find_library(GECODE_INT_LIBRARY gecodeintl PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+ find_library(GECODE_INT_LIBRARY gecodeint PATHS ${CMAKE_INSTALL_PREFIX}/lib)
if(GECODE_INT_LIBRARY)
list(APPEND GECODE_LIBRARIES ${GECODE_INT_LIBRARY})
endif()
- find_library(GECODE_FLOAT_LIBRARY gecodefloatl PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+ find_library(GECODE_FLOAT_LIBRARY gecodefloat PATHS ${CMAKE_INSTALL_PREFIX}/lib)
if(GECODE_FLOAT_LIBRARY)
list(APPEND GECODE_LIBRARIES ${GECODE_FLOAT_LIBRARY})
endif()
- find_library(GECODE_MM_LIBRARY gecodeminimodell PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+ find_library(GECODE_MM_LIBRARY gecodeminimodel PATHS ${CMAKE_INSTALL_PREFIX}/lib)
if(GECODE_MM_LIBRARY)
list(APPEND GECODE_LIBRARIES ${GECODE_MM_LIBRARY})
endif()
- find_library(GECODE_SCHEDULING_LIBRARY gecodeschedulingl PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+ find_library(GECODE_SCHEDULING_LIBRARY gecodescheduling PATHS ${CMAKE_INSTALL_PREFIX}/lib)
if(GECODE_SCHEDULING_LIBRARY)
list(APPEND GECODE_LIBRARIES ${GECODE_SCHEDULING_LIBRARY})
endif()
- find_library(GECODE_SEARCH_LIBRARY gecodesearchl PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+ find_library(GECODE_SEARCH_LIBRARY gecodesearch PATHS ${CMAKE_INSTALL_PREFIX}/lib)
if(GECODE_SEARCH_LIBRARY)
list(APPEND GECODE_LIBRARIES ${GECODE_SEARCH_LIBRARY})
endif()
- find_library(GECODE_SET_LIBRARY gecodesetl PATHS ${CMAKE_INSTALL_PREFIX}/lib)
+ find_library(GECODE_SET_LIBRARY gecodeset PATHS ${CMAKE_INSTALL_PREFIX}/lib)
if(GECODE_SET_LIBRARY)
list(APPEND GECODE_LIBRARIES ${GECODE_SET_LIBRARY})
endif()
diff --git a/cmake/FindMySQL.cmake b/cmake/FindMySQL.cmake
index 0249c7f5a..eed370cfe 100644
--- a/cmake/FindMySQL.cmake
+++ b/cmake/FindMySQL.cmake
@@ -11,6 +11,7 @@ IF (MYSQL_INCLUDE_DIR)
ENDIF (MYSQL_INCLUDE_DIR)
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
+ ${MYSQL_ROOT_DIR}/include
/usr/local/include/mysql
/usr/include/mysql
/usr/include/mariadb
@@ -18,7 +19,8 @@ FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
SET(MYSQL_NAMES mysqlclient mysqlclient_r mariadb )
FIND_LIBRARY(MYSQL_LIBRARY
- NAMES ${MYSQL_NAMES}
+ NAMES ${MYSQL_ROOT_DIR}/lib
+ ${MYSQL_NAMES}
PATHS /usr/lib /usr/local/lib
PATH_SUFFIXES mysql mariadb
)
@@ -45,4 +47,4 @@ ENDIF (MYSQL_FOUND)
MARK_AS_ADVANCED(
MYSQL_LIBRARY
MYSQL_INCLUDE_DIR
- )
\ No newline at end of file
+ )
diff --git a/cmake/FindODBC.cmake b/cmake/FindODBC.cmake
index 9348a7163..667e44cd7 100644
--- a/cmake/FindODBC.cmake
+++ b/cmake/FindODBC.cmake
@@ -19,6 +19,7 @@
set(ODBC_FOUND FALSE)
find_path(ODBC_INCLUDE_DIRECTORIES sql.h
+ ${ODBC_ROOT_DIR}/include
/usr/include
/usr/include/odbc
/usr/local/include
@@ -34,6 +35,7 @@ find_path(ODBC_INCLUDE_DIRECTORIES sql.h
find_library(ODBC_LIBRARY
NAMES iodbc odbc odbcinst odbc32
PATHS
+ ${ODBC_ROOT_DIR}/lib
/usr/lib
/usr/lib/odbc
/usr/local/lib
diff --git a/cmake/Model.cmake b/cmake/Model.cmake
index 9533386e5..1ec8215ec 100644
--- a/cmake/Model.cmake
+++ b/cmake/Model.cmake
@@ -2,7 +2,7 @@ set(YAP_FOUND ON)
set(YAP_MAJOR_VERSION 6)
set(YAP_MINOR_VERSION 3)
-set(YAP_PATCH_VERSION 4)
+set(YAP_PATCH_VERSION 5)
set(YAP_FULL_VERSION
${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}.${YAP_PATCH_VERSION})
diff --git a/cmake/cudd.cmake b/cmake/cudd.cmake
index de2d30096..7345e360d 100644
--- a/cmake/cudd.cmake
+++ b/cmake/cudd.cmake
@@ -1,5 +1,5 @@
-
+
option (WITH_CUDD "BDD CUDD package" ON)
if (WITH_CUDD)
@@ -18,10 +18,7 @@ if (CUDD_FOUND)
set( CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${CUDD_INCLUDE_DIR} )
-check_include_files( "stdio.h;cudd.h" HAVE_CUDD_H )
-check_include_files( "stdio.h;cudd/cudd.h" HAVE_CUDD_CUDD_H )
-check_include_files( "cuddInt.h" HAVE_CUDDINT_H )
-check_include_files( "cudd/cuddInt.h" HAVE_CUDD_CUDDINT_H )
endif (CUDD_FOUND)
+
endif(WITH_CUDD)
diff --git a/packages/bdd/cudd_config.h.cmake b/cmake/cudd_config.h.cmake
similarity index 100%
rename from packages/bdd/cudd_config.h.cmake
rename to cmake/cudd_config.h.cmake
diff --git a/cmake/python.cmake b/cmake/python.cmake
index 3898249b1..288e2ca1e 100644
--- a/cmake/python.cmake
+++ b/cmake/python.cmake
@@ -1,4 +1,8 @@
+option (WITH_PYTHON
+ "Allow Python->YAP and YAP->Python" ON)
+
+IF (WITH_PYTHON)
#BREW install for Python3
@@ -31,3 +35,6 @@ find_package(PythonLibs)
set( CMAKE_REQUIRED_INCLUDES ${PYTHON_INCLUDE_DIRS} ${CMAKE_REQUIRED_INCLUDES} )
check_include_file(Python.h HAVE_PYTHON_H)
+
+endif(WITH_PYTHON)
+
diff --git a/config.h.cmake b/config.h.cmake
index 9f34be495..02fab125e 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -586,6 +586,11 @@ function. */
#cmakedefine HAVE_ISWBLANK ${HAVE_ISWBLANK}
#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 header file. */
#ifndef HAVE_JUDY_H
#cmakedefine HAVE_JUDY_H ${HAVE_JUDY_H}
diff --git a/configure b/configure
index 4c425b161..d93ba3d4d 100755
--- a/configure
+++ b/configure
@@ -22,7 +22,7 @@
# details, see
TOP_SRCDIR="$(dirname $0)"
-CMAKE_CMD="cmake ${TOP_SRCDIR}"
+CMAKE=cmake
BUILD_TYPE="Debug"
PREFIX=/usr/local
@@ -39,15 +39,19 @@ quote() {
extract_var_string() {
VAR_NAME=$1
- VAR_NAME=$(echo $1 | sed -e 's/[ \t]*$//')
- if [ "x$2" != "x" ]; then
- VAR_VALUE=$2
- else
- VAR_VALUE=yes
+ VAR_NAME=$(echo $1 | sed -e 's/[\\b]*$//')
+
+ if [ "x$VAR_VALUE" = "x" ]; then
+ if [ "x$2" != "x" ]; then
+ VAR_VALUE=$2
+ else
+ VAR_VALUE=yes
+ fi
fi
if [ "x$3" != "x" ]; then
VAR_UC_NAME=$3
+ VAR_UC=$(echo "$1" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]' '_' | sed 's/_$//g')
else
VAR_UC_NAME=$(echo "$1" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]' '_' | sed 's/_$//g')
fi
@@ -55,35 +59,73 @@ extract_var_string() {
set_config_var() {
is_with=n
+ found=y
+ arg=$(echo "${2}" | tr '[:upper:]' '[:lower:]' )
case "$1" in
"--enable-"*)
name="${1#--enable-}"
cfg="${ENABLE_VARS}"
+ case "x$arg" in
+ "xy"|"xyes"|"xtrue")
+ VAR_VALUE=yes
+ ;;
+ "xn"|"xno"|"xfalse")
+ found=y
+ VAR_VALUE=no
+ ;;
+ **)
+ VAR_VALUE=""
+ ;;
+ esac
;;
"--disable-"*)
name="${1#--disable-}";
- cfg="${DISABLE_VARS}";
+ cfg="${ENABLE_VARS}"
+ case "x$arg" in
+ "xy"|"xyes"|"xtrue")
+ VAR_VALUE=no
+ ;;
+ "xn"|"xno"|"xfalse")
+ VAR_VALUE=yes
+ ;;
+ **)
+ VAR_VALUE=""
+ ;;
+ esac
;;
"--with-"*)
# IFS="=" read -ra WITHARGS <<< "${1}"
name="${1#--with-}"
cfg="${WITH_VARS}"
- is_with=y
+ case "x$arg" in
+ "x"|"xy"|"xyes"|"xtrue")
+ is_with=n
+ VAR_VALUE=yes
+ ``;;
+ "xn"|"xno"|"xfalse")
+ is_with=n
+ VAR_VALUE=no
+ ;;
+ **)
+ is_with=y
+ VAR_VALUE=""
+ ;;
+ esac
+
;;
esac
- found=n
- for varstring in $cfg; do
- extract_var_string $(echo "${varstring}" | tr '|' ' ')
- if [ "x$VAR_NAME" = "x$name" ]; then
- found=y
- break;
- fi
- done
+ for varstring in $cfg; do
+ extract_var_string $(echo "${varstring}" | tr '|' ' ')
+ if [ "x$VAR_NAME" = "x$name" ]; then
+ found=y
+ break;
+ fi
+ done
if [ "$found" = "y" ]; then
if [ "x$is_with" = "xy" ]; then
- CMAKE_ARGS="$CMAKE_ARGS -D${VAR_UC_NAME}=$(quote "$2")"
+ CMAKE_ARGS="$CMAKE_ARGS -D${VAR_UC_NAME}=$(quote "$VAR_VALUE") -D${VAR_UC}_ROOT_DIR=$(quote "$2")"
else
CMAKE_ARGS="$CMAKE_ARGS -D${VAR_UC_NAME}=$(quote "${VAR_VALUE}")"
fi
@@ -100,6 +142,7 @@ prefix_to_offset() {
print_help() {
cat <&2
-h, --help display this help and exit
+ --cmake=CMAKE use a specific cmake, not the default
--disable-debug disable debugging mode
--pass-thru pass remaining arguments through to CMake
@@ -154,7 +197,6 @@ EOF
fi
done
- first=y
for varstring in ${WITH_VARS}; do
if [ $first = 'y' ]; then
echo ""
@@ -164,6 +206,7 @@ EOF
var_doc_name="WITH_${VAR_UC_NAME}_DOC"
eval "docstring=\$$var_doc_name"
paraminfo="${VAR_NAME}=${VAR_VALUE}"
+
if [ "x${docstring}" = "x" ]; then
printf " --with-%-16s enable %s support\n" "$paraminfo" "$(echo -n "${VAR_NAME}" | tr '-' ' ')"
else
@@ -176,6 +219,10 @@ EOF
while [ $# != 0 ]; do
case "$1" in
+ "--cmake="*)
+ CMAKE="${1#*=}";;
+ "--cmake")
+ CMAKE="${2}"; shift;;
"--prefix="*)
PREFIX="${1#*=}";;
"--prefix")
@@ -274,11 +321,13 @@ while [ $# != 0 ]; do
done;;
"--enable-"*)
- set_config_var "$1"
+ name=$(echo "${1#--enable-}" | awk '{split($1,v,"="); print v[1]}')
+ set_config_var "--with-${name}" "${1#--enable-${name}=}"
;;
"--disable-"*)
- set_config_var "$1"
+ name=$(echo "${1#--disable-}" | awk '{split($1,v,"="); print v[1]}')
+ set_config_var "--with-${name}" "${1#--disable-${name}=}"
;;
"--with-"*)
@@ -312,4 +361,5 @@ if [ "x${LDFLAGS}" != "x" ]; then
done
fi
-eval "cmake ${TOP_SRCDIR} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_INSTALL_LIBDIR=${LIBDIR} ${CMAKE_ARGS}"
+CMAKE_CMD="${CMAKE} ${TOP_SRCDIR}"
+${CMAKE_CMD} ${TOP_SRCDIR} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_INSTALL_LIBDIR=${LIBDIR} ${CMAKE_ARGS}
diff --git a/console/yap.c b/console/yap.c
index 9baf4d45b..a07ed8571 100755
--- a/console/yap.c
+++ b/console/yap.c
@@ -78,8 +78,7 @@ static int init_standard_system(int argc, char *argv[], YAP_init_args *iap) {
BootMode = YAP_parse_yap_arguments(argc, argv, iap);
iap->Embedded = false;
/* init memory */
- iap->boot_file_type =
- BootMode = YAP_Init(iap);
+ iap->boot_file_type = BootMode = YAP_Init(iap);
if (iap->ErrorNo) {
/* boot failed */
YAP_Error(iap->ErrorNo, 0L, iap->ErrorCause);
diff --git a/docs/Doxyfile b/docs/Doxyfile
index b56d7949a..b7bd6c4c3 100644
--- a/docs/Doxyfile
+++ b/docs/Doxyfile
@@ -785,9 +785,8 @@ INPUT = /Users/vsc/git/yap-6.3/pl \
/Users/vsc/git/yap-6.3/library \
/Users/vsc/git/yap-6.3/packages \
/Users/vsc/git/yap-6.3/swi/library \
- /Users/vsc/git/yap-6.3/docs/yap.md \
- /Users/vsc/git/yap-6.3/docs/chr.md \
- /Users/vsc/git/yap-6.3/docs/clpqr.md \
+ /Users/vsc/git/yap-6.3/docs/md \
+ /Users/vsc/git/yap-6.3/INSTALL.md \
# This tag can be used to specify the character encoding of the source files
@@ -937,7 +936,7 @@ FILTER_SOURCE_PATTERNS =
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.
-USE_MDFILE_AS_MAINPAGE =
+USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# Configuration options related to source browsing
diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in
index f18062fa2..c4338c1e1 100644
--- a/docs/Doxyfile.in
+++ b/docs/Doxyfile.in
@@ -384,7 +384,7 @@ INLINE_GROUPED_CLASSES = NO
# with only public data fields or simple typedef fields will be shown inline in
# the documentation of the scope in which they are defined (i.e. file,
# namespace, or group documentation), provided this scope is documented. If set
-v# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
# The default value is: NO.
@@ -785,9 +785,8 @@ INPUT = @PROJECT_SOURCE_DIR@/pl \
@PROJECT_SOURCE_DIR@/library \
@PROJECT_SOURCE_DIR@/packages \
@PROJECT_SOURCE_DIR@/swi/library \
- @PROJECT_SOURCE_DIR@/docs/yap.md \
- @PROJECT_SOURCE_DIR@/docs/chr.md \
- @PROJECT_SOURCE_DIR@/docs/clpqr.md \
+ @PROJECT_SOURCE_DIR@/docs/md \
+ @PROJECT_SOURCE_DIR@/INSTALL.md
# This tag can be used to specify the character encoding of the source files
@@ -828,7 +827,11 @@ RECURSIVE = YES
# Note that relative paths are relative to the directory from which doxygen is
# run.
-EXCLUDE = *pltotex.pl
+EXCLUDE = *pltotex.pl \
+@PROJECT_SOURCE_DIR@/packages/myddas/sqlite3/src \
+@PROJECT_SOURCE_DIR@/packages/gecode/4.0.* \
+@PROJECT_SOURCE_DIR@/packages/gecode/3,* \
+@PROJECT_SOURCE_DIR@/C/traced_absmi_insts.h
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
@@ -1134,7 +1137,7 @@ HTML_STYLESHEET =
# list). For an example see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
-HTML_EXTRA_STYLESHEET =
+HTML_EXTRA_STYLESHEET = @CMAKE_SOURCE_DIR@/docs/solarized-light.css
# @CMAKE_SOURCE_DIR@/docs/solarized-light.css
diff --git a/docs/install.md b/docs/install.md
deleted file mode 100644
index e69de29bb..000000000
diff --git a/docs/jquery-2.0.3.min.js b/docs/jquery-2.0.3.min.js
deleted file mode 100644
index 2be209dd2..000000000
--- a/docs/jquery-2.0.3.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery-2.0.3.min.map
-*/
-(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t)
-};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*\s*$/g,ct={option:[1,""],thead:[1,"