Esempio n. 1
0
void
initReservedSymbols(void)
{ PL_register_blob_type(&reserved_symbol);
  atomValue(ATOM_dict)->type     = &reserved_symbol;
  atomValue(ATOM_trienode)->type = &reserved_symbol;

  if ( !GD->options.traditional )
  { const atom_t *ap;

    for(ap=reserved_symbols; *ap; ap++)
    { Atom a = atomValue(*ap);
      a->type = &reserved_symbol;
    }
  }
}
Esempio n. 2
0
int
PL_unregister_blob_type(PL_blob_t *type)
{ size_t index;
  int i, last=FALSE;
  PL_blob_t **t;
  int discarded = 0;

  PL_LOCK(L_MISC);
  for(t = &GD->atoms.types; *t; t = &(*t)->next)
  { if ( *t == type )
    { *t = type->next;
      type->next = NULL;
    }
  }
  PL_UNLOCK(L_MISC);

  PL_register_blob_type(&unregistered_blob_atom);

  LOCK();
  for(index=1, i=0; !last; i++)
  { size_t upto = (size_t)2<<i;
    Atom *b = GD->atoms.array.blocks[i];

    if ( upto >= GD->atoms.highest )
    { upto = GD->atoms.highest;
      last = TRUE;
    }

    for(; index<upto; index++)
    { Atom atom = b[index];

      if ( atom && atom->type == type )
      { atom->type = &unregistered_blob_atom;

	atom->name = "<discarded blob>";
	atom->length = strlen(atom->name);

	discarded++;
      }
    }
  }
  UNLOCK();

  return discarded == 0 ? TRUE : FALSE;
}
Esempio n. 3
0
void
initDBRef(void)
{ PL_register_blob_type(&record_blob);
  PL_register_blob_type(&clause_blob);
}