-/* 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)
-# define IDS_VRFY(id) ((void)0)
-
-#ifdef STATS
-# define id_stats() set_stats (id_set)
-#else
-# define id_stats() ((void)0)
-#endif
+/* 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)
+{
+ set *id_set = handle;
+
+ /* GL: Who added this assert? And why? */
+ //assert(len > 0);
+ return (ident *)set_hinsert0(id_set, str, len, ID_HASH(unsigned char, str, len));
+}
+
+/**
+ * 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 (or whatever) which shall be stored
+ *
+ * Default implementation using libfirm sets.
+ */
+static ident *set_new_id_from_str(void *handle, const char *str)
+{
+ assert(str);
+ return (ident *)set_new_id_from_chars(handle, str, strlen(str));
+}
+
+/**
+ * Returns a string represented by an ident.
+ *
+ * @param handle the handle for the set
+ * @param id the ident
+ *
+ * Default implementation using libfirm sets.
+ */
+static const char *set_get_id_str(void *handle, ident *id)
+{
+ struct set_entry *entry = (struct set_entry *)id;
+
+ return (const char *)entry->dptr;
+}
+
+/**
+ * Returns the length of the string represented by an ident.
+ *
+ * @param handle the handle for the set
+ * @param id the ident
+ *
+ * Default implementation using libfirm sets.
+ */
+static int set_get_id_strlen(void *handle, ident *id)
+{
+ struct set_entry *entry = (struct set_entry *)id;