Add destructor for symbol_table
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 27 Jul 2009 19:19:14 +0000 (12:19 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 27 Jul 2009 19:19:14 +0000 (12:19 -0700)
src/mesa/shader/symbol_table.c
src/mesa/shader/symbol_table.h

index b90c495cdb70a6e523149393b74288edcc4ed1ea..71ce1287f54ef22e5c6357eab071a0676260e754 100644 (file)
@@ -325,10 +325,24 @@ _mesa_symbol_table_ctor(void)
 {
     struct _mesa_symbol_table *table = calloc(1, sizeof(*table));
 
-    table->ht = hash_table_ctor(32, hash_table_string_hash,
-                                hash_table_string_compare);
+    if (table != NULL) {
+       table->ht = hash_table_ctor(32, hash_table_string_hash,
+                                  hash_table_string_compare);
 
-    _mesa_symbol_table_push_scope(table);
+       _mesa_symbol_table_push_scope(table);
+    }
 
     return table;
 }
+
+
+void
+_mesa_symbol_table_dtor(struct _mesa_symbol_table *table)
+{
+   while (table->current_scope != NULL) {
+      _mesa_symbol_table_pop_scope(table);
+   }
+
+   hash_table_dtor(table->ht);
+   free(table);
+}
index c543615761de9db28209abaf5009b933fa733213..0c054ef13967842eae26ade55ebe29eda0b662f4 100644 (file)
@@ -38,6 +38,7 @@ extern void *_mesa_symbol_table_find_symbol(
 
 extern struct _mesa_symbol_table *_mesa_symbol_table_ctor(void);
 
+extern void _mesa_symbol_table_dtor(struct _mesa_symbol_table *);
 
 extern struct _mesa_symbol_table_iterator *_mesa_symbol_table_iterator_ctor(
     struct _mesa_symbol_table *table, int name_space, const char *name);