+#ifdef FIRM_ENABLE_WCHAR
+/**
+ * Stores a wide character string in the ident module and returns a
+ * handle for the string.
+ *
+ * @param handle the handle for the set
+ * @param wstr the wide character string which shall be stored
+ * @param len length of wstr
+ *
+ * @return id - a handle for the generated ident
+ *
+ * Default implementation using libfirm sets.
+ */
+static ident *set_new_id_from_wchars(void *handle, const wchar_t *wstr, int len)
+{
+ set *id_set = handle;
+ wchar_t *tmp;
+
+ /* can't use hinsert0 here, so copy and add a 0 */
+ tmp = alloca((len + 1) * sizeof(*tmp));
+ memcpy(tmp, wstr, len * sizeof(*tmp));
+ tmp[len] = L'\0';
+
+ return (ident *)set_hinsert(id_set, tmp, (len + 1) * sizeof(wchar_t), ID_HASH(wchar_t, tmp, len));
+}
+
+/**
+ * Stores a wide character string in the ident module and
+ * returns a handle for the string.
+ *
+ * @param handle the handle for the set
+ * @param wstr the wide character string which shall be stored
+ *
+ * Default implementation using libfirm sets.
+ */
+static ident *set_new_id_from_wcs(void *handle, const wchar_t *wstr)
+{
+ assert(wstr);
+ return (ident *)set_new_id_from_wchars(handle, wstr, wcslen(wstr));
+}
+
+/**
+ * Returns a wide character string represented by an ident.
+ *
+ * @param handle the handle for the set
+ * @param id the ident
+ *
+ * Default implementation using libfirm sets.
+ */
+static const wchar_t *set_get_id_wcs(void *handle, ident *id)
+{
+ struct set_entry *entry = (struct set_entry *)id;
+
+ return (const wchar_t *)entry->dptr;