Yap_unifiable and TagOfTerm
This commit is contained in:
parent
980c79359f
commit
8785108e66
@ -425,6 +425,7 @@ X_API Int STD_PROTO(YAP_ArityOfFunctor,(Functor));
|
|||||||
X_API void *STD_PROTO(YAP_ExtraSpace,(void));
|
X_API void *STD_PROTO(YAP_ExtraSpace,(void));
|
||||||
X_API void STD_PROTO(YAP_cut_up,(void));
|
X_API void STD_PROTO(YAP_cut_up,(void));
|
||||||
X_API Int STD_PROTO(YAP_Unify,(Term,Term));
|
X_API Int STD_PROTO(YAP_Unify,(Term,Term));
|
||||||
|
X_API int STD_PROTO(YAP_Unifiable,(Term,Term));
|
||||||
X_API int STD_PROTO(YAP_Reset,(void));
|
X_API int STD_PROTO(YAP_Reset,(void));
|
||||||
X_API Int STD_PROTO(YAP_Init,(YAP_init_args *));
|
X_API Int STD_PROTO(YAP_Init,(YAP_init_args *));
|
||||||
X_API Int STD_PROTO(YAP_FastInit,(char *));
|
X_API Int STD_PROTO(YAP_FastInit,(char *));
|
||||||
@ -545,6 +546,7 @@ X_API int STD_PROTO(YAP_NewOpaqueType,(void *));
|
|||||||
X_API Term STD_PROTO(YAP_NewOpaqueObject,(int, size_t));
|
X_API Term STD_PROTO(YAP_NewOpaqueObject,(int, size_t));
|
||||||
X_API void *STD_PROTO(YAP_OpaqueObjectFromTerm,(Term));
|
X_API void *STD_PROTO(YAP_OpaqueObjectFromTerm,(Term));
|
||||||
X_API int STD_PROTO(YAP_Argv,(char *** argvp));
|
X_API int STD_PROTO(YAP_Argv,(char *** argvp));
|
||||||
|
X_API YAP_tag_t STD_PROTO(YAP_TagOfTerm,(Term));
|
||||||
|
|
||||||
static int
|
static int
|
||||||
dogc( USES_REGS1 )
|
dogc( USES_REGS1 )
|
||||||
@ -1180,6 +1182,18 @@ YAP_Unify(Term t1, Term t2)
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
X_API int
|
||||||
|
YAP_Unifiable(Term t1, Term t2)
|
||||||
|
{
|
||||||
|
int out;
|
||||||
|
BACKUP_MACHINE_REGS();
|
||||||
|
|
||||||
|
out = Yap_unifiable(t1, t2);
|
||||||
|
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
/* == */
|
/* == */
|
||||||
X_API int
|
X_API int
|
||||||
YAP_ExactlyEqual(Term t1, Term t2)
|
YAP_ExactlyEqual(Term t1, Term t2)
|
||||||
@ -3788,7 +3802,6 @@ YAP_OpInfo(Atom at, Term module, int opkind, int *yap_type, int *prio)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
YAP_Argv(char ***argvp)
|
YAP_Argv(char ***argvp)
|
||||||
{
|
{
|
||||||
@ -3797,3 +3810,47 @@ YAP_Argv(char ***argvp)
|
|||||||
}
|
}
|
||||||
return GLOBAL_argc;
|
return GLOBAL_argc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
YAP_tag_t
|
||||||
|
YAP_TagOfTerm(Term t)
|
||||||
|
{
|
||||||
|
if (IsVarTerm(t)) {
|
||||||
|
CELL *pt = VarOfTerm(t);
|
||||||
|
if (IsUnboundVar(pt)) {
|
||||||
|
if (IsAttVar(pt))
|
||||||
|
return YAP_TAG_ATT;
|
||||||
|
return YAP_TAG_UNBOUND;
|
||||||
|
}
|
||||||
|
return YAP_TAG_REF;
|
||||||
|
}
|
||||||
|
if (IsPairTerm(t))
|
||||||
|
return YAP_TAG_PAIR;
|
||||||
|
if (IsAtomOrIntTerm(t)) {
|
||||||
|
if (IsAtomTerm(t))
|
||||||
|
return YAP_TAG_ATOM;
|
||||||
|
return YAP_TAG_INT;
|
||||||
|
} else {
|
||||||
|
Functor f = FunctorOfTerm(t);
|
||||||
|
|
||||||
|
if (IsExtensionFunctor(f)) {
|
||||||
|
if (f == FunctorDBRef) {
|
||||||
|
return YAP_TAG_DBREF;
|
||||||
|
}
|
||||||
|
if (f == FunctorLongInt) {
|
||||||
|
return YAP_TAG_LONG_INT;
|
||||||
|
}
|
||||||
|
if (f == FunctorBigInt) {
|
||||||
|
big_blob_type bt = RepAppl(t)[1];
|
||||||
|
switch (bt) {
|
||||||
|
case BIG_INT:
|
||||||
|
return YAP_TAG_BIG_INT;
|
||||||
|
case BIG_RATIONAL:
|
||||||
|
return YAP_TAG_RATIONAL;
|
||||||
|
default:
|
||||||
|
return YAP_TAG_OPAQUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return YAP_TAG_APPL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user