-
-/* Caution: strings _not_ zero-terminated! */
-#define ID_FROM_STR(str, len) \
- (assert ((len) > 0), \
- (const set_entry *)set_hinsert (id_set, (str), (len), ID_HASH ((str), (len))))
-#define ID_TO_STR(id) ((const char *)&(id)->dptr[0])
-#define ID_TO_STRLEN(id) ((id)->size)
-#define ID_TO_HASH(id) ((long)(id) + (id)->hash)
-
-/* Vormals Debugunterstuetzung, entfernt (debug.h). */
-# define ID_VRFY(id) ((void)0)
-
-#ifdef NDEBUG
-# define IDS_VRFY(id) ((void)0)
-#else
-# define IDS_VRFY(id) ids_vrfy ((id))
-static void ids_vrfy (ident **id);
-#endif
-
-#ifdef STATS
-# define id_stats() set_stats (id_set)
-#else
-# define id_stats() ((void)0)
-#endif
-
-extern set *id_set;
-
-#define XX_USER(name) ident *id_##name;
-#define XX_INTERNAL(name, str) XX_USER(name)
-#undef XX_USER
-#undef XX_INTERNAL
-
-static set *id_set;
-
-#if 0 /* nowhere used */
-static ident *
-new_id_derived (const char *pfx, ident *id)
+#include "xmalloc.h"
+
+/* for debugging only, not the real implementation */
+struct _ident {
+ char reserved[sizeof(unsigned) + sizeof(size_t)];
+ char data[1];
+};
+
+/** The current ident module implementation. */
+static ident_if_t impl;
+
+/**
+ * Stores a string in the ident module and returns a handle for the string.
+ *
+ * @param handle the handle for the set
+ * @param str the string which shall be stored
+ * @param len length of str in bytes
+ *
+ * @return id - a handle for the generated ident
+ *
+ * Default implementation using libfirm sets.
+ */
+static ident *set_new_id_from_chars(void *handle, const char *str, int len)