fix unify functor
This commit is contained in:
parent
a46e5b313d
commit
99cbe94bed
|
@ -314,27 +314,6 @@ X_API int PL_get_atom_nchars(term_t ts, size_t *len, char **s) /* SAM check typ
|
||||||
#define snprintf(X,Y,Z,A) sprintf(X,Z,A)
|
#define snprintf(X,Y,Z,A) sprintf(X,Z,A)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This does not understand UNICODE yet */
|
|
||||||
static int do_yap_putc(int sno, wchar_t ch) {
|
|
||||||
if (putc_curp < putc_cur_lim) {
|
|
||||||
*putc_curp++ = ch;
|
|
||||||
return TRUE;
|
|
||||||
} else if (putc_cur_flags & BUF_MALLOC) {
|
|
||||||
/* handle overflow by using realloc(); */
|
|
||||||
UInt bufsize = putc_cur_lim-putc_cur_buf;
|
|
||||||
UInt bufpos = putc_curp-putc_cur_buf;
|
|
||||||
|
|
||||||
if (!(putc_cur_buf = PL_realloc(putc_cur_buf, bufsize+SWI_BUF_SIZE))) {
|
|
||||||
/* we can+t go forever */
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
putc_curp = putc_cur_buf+bufpos;
|
|
||||||
putc_cur_lim = putc_cur_buf+(bufsize+SWI_BUF_SIZE);
|
|
||||||
return do_yap_putc(sno, ch);
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SWI: int PL_get_functor(term_t t, functor_t *f)
|
/* SWI: int PL_get_functor(term_t t, functor_t *f)
|
||||||
YAP: YAP_Functor YAP_FunctorOfTerm(Term) */
|
YAP: YAP_Functor YAP_FunctorOfTerm(Term) */
|
||||||
X_API int PL_get_functor(term_t ts, functor_t *f)
|
X_API int PL_get_functor(term_t ts, functor_t *f)
|
||||||
|
@ -1082,18 +1061,19 @@ X_API int PL_unify_integer(term_t t, long n)
|
||||||
YAP long int unify(YAP_Term* a, Term* b) */
|
YAP long int unify(YAP_Term* a, Term* b) */
|
||||||
X_API int PL_unify_functor(term_t t, functor_t f)
|
X_API int PL_unify_functor(term_t t, functor_t f)
|
||||||
{
|
{
|
||||||
YAP_Term tt = Yap_GetFromSlot(t);
|
Term tt = Yap_GetFromSlot(t);
|
||||||
Functor ff = SWIFunctorToFunctor(f);
|
Functor ff = SWIFunctorToFunctor(f);
|
||||||
if (Unsigned(H) > Unsigned(ASP)-CreepFlag) {
|
if (IsVarTerm(tt)) {
|
||||||
if (!Yap_gc(0, ENV, CP)) {
|
while (Unsigned(H)+ArityOfFunctor(ff) > Unsigned(ASP)-CreepFlag) {
|
||||||
return FALSE;
|
if (!Yap_gc(ArityOfFunctor(ff)*sizeof(CELL), ENV, CP)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return Yap_unify(tt, Yap_MkNewApplTerm(ff,ArityOfFunctor(ff)));
|
||||||
}
|
}
|
||||||
if (YAP_IsVarTerm(tt))
|
if (IsPairTerm(tt))
|
||||||
return YAP_Unify(tt, YAP_MkNewApplTerm((YAP_Functor)ff,YAP_ArityOfFunctor((YAP_Functor)f)));
|
|
||||||
if (YAP_IsPairTerm(tt))
|
|
||||||
return ff == FunctorDot;
|
return ff == FunctorDot;
|
||||||
if (!YAP_IsApplTerm(tt))
|
if (!IsApplTerm(tt))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return ff == FunctorOfTerm(tt);
|
return ff == FunctorOfTerm(tt);
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue