/*-------------------------------------------------------------------------* * PL_ATOM_LENGTH_2 * * * *-------------------------------------------------------------------------*/ Bool Pl_Atom_Length_2(WamWord atom_word, WamWord length_word) { int atom; atom = Pl_Rd_Atom_Check(atom_word); return Pl_Un_Positive_Check(pl_atom_tbl[atom].prop.length, length_word); }
/*-------------------------------------------------------------------------* * PL_TERM_REF_2 * * * *-------------------------------------------------------------------------*/ Bool Pl_Term_Ref_2(WamWord term_word, WamWord ref_word) { WamWord word, tag_mask; WamWord word1, *adr; int ref; /* my own DEREF here to get the address */ adr = NULL; /* added this */ word = term_word; do { word1 = word; tag_mask = Tag_Mask_Of(word); if (tag_mask != TAG_REF_MASK) break; adr = UnTag_REF(word); /* added this */ word = *adr; } while (word != word1); if (tag_mask == TAG_REF_MASK) { ref = Pl_Rd_Positive_Check(ref_word); adr = Global_Stack + ref; return Pl_Unify(word, *adr); } if (adr < Global_Stack || adr > H) { adr = H; Global_Push(word); } ref = Global_Offset(adr); return Pl_Un_Positive_Check(ref, ref_word); }