# HG changeset patch # User Jaroslav Hajek # Date 1244465861 -7200 # Node ID 73e36b147e45258a2a881d7aae73d1fd6ceed4c9 # Parent 3a447ea9e77b7e4c0162c068485485b7580f52d5 properly clear global variables diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2009-06-08 Jaroslav Hajek + + * symtab.h (symbol_table::do_clear_global, + symbol_table::do_clear_global_pattern): Properly erase from both local + and global table. + 2009-06-08 Jaroslav Hajek * variables.cc (Fclear): Clear also globals when called without diff --git a/src/symtab.h b/src/symtab.h --- a/src/symtab.h +++ b/src/symtab.h @@ -2143,15 +2143,14 @@ symbol_record& sr = p->second; if (sr.is_global ()) - { - global_table_iterator q = global_table.find (name); - - if (q != global_table.end ()) - global_table.erase (q); - - sr.unmark_global (); - } + sr.unmark_global (); } + + global_table_iterator q = global_table.find (name); + + if (q != global_table.end ()) + global_table.erase (q); + } void do_clear_variable (const std::string& name) @@ -2170,19 +2169,18 @@ { symbol_record& sr = p->second; - if (sr.is_global ()) - { - if (pattern.match (sr.name ())) - { - global_table_iterator q = global_table.find (sr.name ()); - - if (q != global_table.end ()) - global_table.erase (q); - - sr.unmark_global (); - } - } + if (sr.is_global () && pattern.match (sr.name ())) + sr.unmark_global (); } + + for (global_table_iterator q = global_table.begin (); + q != global_table.end (); q++) + { + if (pattern.match (q->first)) + global_table.erase (q); + } + + } void do_clear_variable_pattern (const std::string& pat)