|
From: Vitor S. C. <vs...@us...> - 2008-08-01 21:44:18
|
Update of /cvsroot/yap/C In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv11953/C Modified Files: c_interface.c Log Message: swi compatibility support Index: c_interface.c =================================================================== RCS file: /cvsroot/yap/C/c_interface.c,v retrieving revision 1.121 retrieving revision 1.122 diff -u -r1.121 -r1.122 --- c_interface.c 24 Jul 2008 16:02:00 -0000 1.121 +++ c_interface.c 1 Aug 2008 21:44:24 -0000 1.122 @@ -12,6 +12,9 @@ * * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.122 2008/08/01 21:44:24 vsc +* swi compatibility support +* * Revision 1.121 2008/07/24 16:02:00 vsc * improve C-interface and SWI comptaibility a bit. * @@ -479,6 +482,7 @@ #endif X_API Term STD_PROTO(YAP_CurrentModule,(void)); X_API Term STD_PROTO(YAP_CreateModule,(Atom)); +X_API Term STD_PROTO(YAP_StripModule,(Term, Term *)); X_API int STD_PROTO(YAP_ThreadSelf,(void)); X_API int STD_PROTO(YAP_GetThreadRefCount,(int)); X_API void STD_PROTO(YAP_SetThreadRefCount,(int,int)); @@ -2291,6 +2295,39 @@ } +X_API Term +YAP_StripModule(Term t, Term *modp) +{ + Term tmod; + + tmod = CurrentModule; + restart: + if (IsVarTerm(t)) { + return 0L; + } else if (IsAtomTerm(t)) { + *modp = tmod; + return t; + } else if (IsApplTerm(t)) { + Functor fun = FunctorOfTerm(t); + if (fun == FunctorModule) { + tmod = ArgOfTerm(1, t); + if (IsVarTerm(tmod) ) { + return 0L; + } + if (!IsAtomTerm(tmod) ) { + return 0L; + } + t = ArgOfTerm(2, t); + goto restart; + } + *modp = tmod; + return t; + } + return 0L; +} + + + X_API int YAP_ThreadSelf(void) { |