+ return symbols;
+}
+
+#define HASH_ITEM_SET(item_set) (item_set)
+#ifdef DEBUG
+void item_collection_print_each (gpointer key, gpointer val, gpointer data)
+{
+ GHashTable* item_set;
+ item_set = (GHashTable*) key;
+ fprintf (stdout, "Item %p:\n", HASH_ITEM_SET(key));
+ item_set_print (item_set);
+ fprintf (stdout, "\n");
+}
+
+void item_set_print_goto (gpointer key, gpointer val, gpointer data)
+{
+ symbol_t* symbol;
+ symbol = (symbol_t*) key;
+ fprintf (stdout, "GOTO (%p, %s) =\t %p\n", HASH_ITEM_SET(data),
+ g_quark_to_string (symbol->value), HASH_ITEM_SET(val));
+}
+
+void item_collection_print_goto (gpointer key, gpointer val, gpointer data)
+{
+ GHashTable* symbols;
+ symbols = (GHashTable*) val;
+ g_hash_table_foreach (symbols, item_set_print_goto, key);
+ fprintf (stdout, "\n");
+}
+
+void item_collection_print (GHashTable* collection)
+{
+ g_hash_table_foreach (collection, item_collection_print_each, NULL);
+ g_hash_table_foreach (collection, item_collection_print_goto, NULL);