error handling bugs in is/2 and =.., found by Paulo Moura.
This commit is contained in:
parent
b2caf2da77
commit
c13bf88377
5
C/eval.c
5
C/eval.c
@ -97,7 +97,6 @@ Eval(Term t USES_REGS)
|
||||
{
|
||||
|
||||
if (IsVarTerm(t)) {
|
||||
LOCAL_ArithError = TRUE;
|
||||
return Yap_ArithError(INSTANTIATION_ERROR,t,"in arithmetic");
|
||||
} else if (IsNumTerm(t)) {
|
||||
return t;
|
||||
@ -220,7 +219,7 @@ X is 2+3*4
|
||||
static Int
|
||||
p_is( USES_REGS1 )
|
||||
{ /* X is Y */
|
||||
Term out = 0L;
|
||||
Term out;
|
||||
yap_error_number err;
|
||||
|
||||
Term t = Deref(ARG2);
|
||||
@ -241,7 +240,7 @@ p_is( USES_REGS1 )
|
||||
}
|
||||
} else {
|
||||
Yap_EvalError(err, ARG2, "X is Exp");
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
} while (TRUE);
|
||||
return Yap_unify_constant(ARG1,out);
|
||||
|
21
C/stdpreds.c
21
C/stdpreds.c
@ -606,22 +606,35 @@ p_univ( USES_REGS1 )
|
||||
}
|
||||
if (IsNumTerm(twork)) {
|
||||
Term tt = TailOfTerm(t2);
|
||||
if (IsVarTerm(tt) || tt != MkAtomTerm(AtomNil)) {
|
||||
if (IsVarTerm(tt)) {
|
||||
Yap_Error(INSTANTIATION_ERROR, tt, "(=..)/2");
|
||||
return (FALSE);
|
||||
}
|
||||
if ( tt != MkAtomTerm(AtomNil)) {
|
||||
Yap_Error(TYPE_ERROR_ATOMIC, twork, "(=..)/2");
|
||||
return (FALSE);
|
||||
}
|
||||
return (Yap_unify_constant(ARG1, twork));
|
||||
}
|
||||
if (!IsAtomTerm(twork)) {
|
||||
Yap_Error(TYPE_ERROR_ATOMIC, twork, "(=..)/2");
|
||||
return (FALSE);
|
||||
Term tt = TailOfTerm(t2);
|
||||
if (IsVarTerm(tt)) {
|
||||
Yap_Error(INSTANTIATION_ERROR, twork, "(=..)/2");
|
||||
return(FALSE);
|
||||
} else if (tt == MkAtomTerm(AtomNil)) {
|
||||
Yap_Error(TYPE_ERROR_ATOMIC, twork, "(=..)/2");
|
||||
return (FALSE);
|
||||
} else {
|
||||
Yap_Error(TYPE_ERROR_ATOM, twork, "(=..)/2");
|
||||
return (FALSE);
|
||||
}
|
||||
}
|
||||
at = AtomOfTerm(twork);
|
||||
twork = TailOfTerm(t2);
|
||||
if (IsVarTerm(twork)) {
|
||||
Yap_Error(INSTANTIATION_ERROR, twork, "(=..)/2");
|
||||
return(FALSE);
|
||||
} else if (!IsPairTerm(twork)) {
|
||||
} else if (!IsPairTerm(twork)) {
|
||||
if (twork != TermNil) {
|
||||
Yap_Error(TYPE_ERROR_LIST, ARG2, "(=..)/2");
|
||||
return(FALSE);
|
||||
|
Reference in New Issue
Block a user