+static struct fml_sym *sym_alloc (struct fml_sym_tab *tab)
+{
+ struct fml_sym *p = tab->free_list;
+ if (!p)
+ {
+ int i;
+
+ tab->free_list = p = malloc (sizeof(*p) * SYM_CHUNK);
+ assert (p);
+ for (i = 0; i<SYM_CHUNK-1; i++)
+ p[i].next = p+i+1;
+ p[i].next = NULL;
+ }
+ tab->free_list = p->next;
+ return p;
+}
+
+static void sym_release (struct fml_sym_tab *tab, struct fml_sym *p)
+{
+ p->next = tab->free_list;
+ tab->free_list = p;
+}
+