Fixed code in first
[cascardo/grammar.git] / first.c
diff --git a/first.c b/first.c
index febcc2e..e79d98d 100644 (file)
--- a/first.c
+++ b/first.c
@@ -477,8 +477,8 @@ GHashTable* grammar_first (Grammar* grammar)
 void put_key_on_list (gpointer key, gpointer val, gpointer data)
 {
   GList** l;
-  l = (GList**) l;
-  *l = g_list_prepend (*l, key);
+  l = (GList**) data;
+  *l = g_list_prepend (*l, symbol_copy (key));
 }
 
 GList* first_get (GHashTable* first, symbol_t* symbol)
@@ -490,7 +490,9 @@ GList* first_get (GHashTable* first, symbol_t* symbol)
   if (g_hash_table_lookup_extended (first, symbol, NULL,
                                    (gpointer*) &first_set))
     {
-      g_hash_table_foreach (first->terminals, put_key_on_list, &l);
+      if (first_set->has_empty)
+       l = g_list_prepend (l, symbol_new (TRUE, 0));
+      g_hash_table_foreach (first_set->terminals, put_key_on_list, &l);
     }
   return l;