+/*------------.
+| Free THIS. |
+`------------*/
+
+static void
+symbol_free (symbol_t *this)
+{
+#if 0
+ /* This causes crashes because one string can appear more
+ than once. */
+ XFREE (this->type_name);
+#endif
+ XFREE (this->tag);
+ XFREE (this);
+}
+
+
+
+/*----------------------.
+| A symbol_t hash table. |
+`----------------------*/
+
+/* Initial capacity of symbols hash table. */
+#define HT_INITIAL_CAPACITY 257
+
+static struct hash_table *symbol_table = NULL;
+
+static bool
+hash_compare_symbol_t (const symbol_t *m1, const symbol_t *m2)