diff --git a/library/dialect/swi/fli/swi.c b/library/dialect/swi/fli/swi.c index 5946702b4..c7266cefe 100755 --- a/library/dialect/swi/fli/swi.c +++ b/library/dialect/swi/fli/swi.c @@ -50,12 +50,12 @@ extern X_API Int YAP_PLArityOfSWIFunctor(functor_t at); X_API Int -YAP_PLArityOfSWIFunctor(functor_t at) { - if (IsAtomTerm(at)) +YAP_PLArityOfSWIFunctor(functor_t f) { + if (IsAtomTerm(f)) return 0; - if ((CELL)(at) & 2) - return ArityOfFunctor(SWI_Functors[((CELL)at)/4]); - return ArityOfFunctor((Functor)at); + if ((CELL)f < N_SWI_FUNCTORS*(LowTagBits+1)) + return ArityOfFunctor(SWI_Functors[(CELL)f/(LowTagBits+1)]); + return ArityOfFunctor((Functor)f); } void @@ -64,10 +64,10 @@ Yap_InitSWIHash(void) int i, j; memset(SWI_ReverseHash, 0, N_SWI_HASH*sizeof(swi_rev_hash)); for (i=0; i < N_SWI_ATOMS; i++) { - add_to_hash(i*2+1, (ADDR)SWI_Atoms[i]); + add_to_hash(i, (ADDR)SWI_Atoms[i]); } for (j=0; j < N_SWI_FUNCTORS; j++) { - add_to_hash((((CELL)(j))*4+2), (ADDR)SWI_Functors[j]); + add_to_hash(j, (ADDR)SWI_Functors[j]); } } diff --git a/library/dialect/swi/fli/swi.h b/library/dialect/swi/fli/swi.h index 3032aece8..9fd1a3c4c 100644 --- a/library/dialect/swi/fli/swi.h +++ b/library/dialect/swi/fli/swi.h @@ -83,15 +83,15 @@ AtomToSWIAtom(Atom at) { atom_t ats; if ((ats = in_hash((ADDR)at))) - return ats; + return (atom_t)((CELL)at*(LowTagBits+1)); return (atom_t)at; } static inline Atom SWIAtomToAtom(atom_t at) { - if ((CELL)at & 1) - return SWI_Atoms[at>>1]; + if ((CELL)at < N_SWI_ATOMS*(LowTagBits+1)) + return SWI_Atoms[((CELL)at)/(LowTagBits+1)]; return (Atom)at; } @@ -110,17 +110,17 @@ FunctorToSWIFunctor(Functor at) { atom_t ats; if ((ats = in_hash((ADDR)at))) - return (functor_t)ats; + return (functor_t)((CELL)at*(LowTagBits+1)); return (functor_t)at; } static inline Functor -SWIFunctorToFunctor(functor_t at) +SWIFunctorToFunctor(functor_t f) { - if (IsAtomTerm(at)) - return (Functor)at; - if ((CELL)(at) & 2) - return SWI_Functors[((CELL)at)/4]; - return (Functor)at; + if (IsAtomTerm(f)) + return (Functor)f; + if ((CELL)f < N_SWI_FUNCTORS*(LowTagBits+1)) + return SWI_Functors[(CELL)f/(LowTagBits+1)]; + return (Functor)f; }