- return_item_set = goto_item_set;
- goto_state = item_collection_lookup (collection, goto_item_set);
- g_hash_table_insert (state->symbols, symbol,
- GINT_TO_POINTER (goto_state->code));
- return return_item_set;
+ {
+ g_hash_table_insert (symbols, symbol, goto_item_set);
+ return goto_item_set;
+ }
+}
+
+void get_symbol_at_dot (gpointer key, gpointer val, gpointer data)
+{
+ item_t* item;
+ GHashTable* symbols;
+ symbol_t* symbol;
+ item = (item_t*) key;
+ symbols = (GHashTable*) data;
+ if (item->dot != NULL)
+ {
+ symbol = item->dot->data;
+ if (!g_hash_table_lookup_extended (symbols, symbol, NULL, NULL))
+ {
+ g_hash_table_insert (symbols, symbol, NULL);
+ }
+ }
+}
+
+/* Get the symbols at the dot in this item set */
+GList* item_set_symbols_at_dot (GHashTable* item_set)
+{
+ GHashTable* symbols;
+ GList* symbols_list;
+ symbols_list = NULL;
+ symbols = g_hash_table_new_full (symbol_hash, symbol_equal,
+ NULL, NULL);
+ g_hash_table_foreach (item_set, get_symbol_at_dot, symbols);
+ g_hash_table_foreach (symbols, put_key_on_list, &symbols_list);
+ g_hash_table_destroy (symbols);
+ return symbols_list;