static htab_t symbol_table;
/* Symbol table global context. */ symbol_table *symtab;
general_init()
symtab = new (ggc_cleared_alloc <symbol_table> ()) symbol_table ();
/* Hash tables are of the following type. The structure (implementation) of this type is not needed for using the hash tables. All work with hash table should be executed only through functions mentioned below. The size of this structure is subject to change. */
struct htab { /* Pointer to hash function. */ htab_hash hash_f;
/* Pointer to comparison function. */ htab_eq eq_f;
/* Pointer to cleanup function. */ htab_del del_f;
/* Table itself. */ void **entries;
/* Current size (in entries) of the hash table. */ size_t size;
/* Current number of elements including also deleted elements. */ size_t n_elements;
/* Current number of deleted elements in the table. */ size_t n_deleted;
/* The following member is used for debugging. Its value is number of all calls of `htab_find_slot' for the hash table. */ unsigned int searches;
/* The following member is used for debugging. Its value is number of collisions fixed for time of work with the hash table. */ unsigned int collisions;
/* Pointers to allocate/free functions. */ htab_alloc alloc_f; htab_free free_f;
/* Alternate allocate/free functions, which take an extra argument. */ void *alloc_arg; htab_alloc_with_arg alloc_with_arg_f; htab_free_with_arg free_with_arg_f;
/* Current size (in entries) of the hash table, as an index into the table of primes. */ unsigned int size_prime_index; };