static void registerFunctor(FunctorDef fd) { size_t index = GD->functors.highest++; int amask = (fd->arity < F_ARITY_MASK ? fd->arity : F_ARITY_MASK); fd->functor = MK_FUNCTOR(index, amask); putFunctorArray(index, fd); DEBUG(CHK_SECURE, assert(fd->arity == arityFunctor(fd->functor))); }
static void registerFunctor(FunctorDef fd) { size_t index; int idx, amask; index = ATOMIC_INC(&GD->functors.highest) - 1; idx = MSB(index); if ( !GD->functors.array.blocks[idx] ) { allocateFunctorBlock(idx); } amask = (fd->arity < F_ARITY_MASK ? fd->arity : F_ARITY_MASK); fd->functor = MK_FUNCTOR(index, amask); GD->functors.array.blocks[idx][index] = fd; fd->flags |= VALID_F; DEBUG(CHK_SECURE, assert(fd->arity == arityFunctor(fd->functor))); }