# HG changeset patch # User Jaroslav Hajek # Date 1244521990 -7200 # Node ID 28d4a6acbf0ace4a41f48563d3c0310991706984 # Parent 5b967e2c319a7a6367f2ee6cf8fa67182b99142b properly clear global variables diff -r 5b967e2c319a -r 28d4a6acbf0a src/ChangeLog --- a/src/ChangeLog Mon Jun 08 08:00:13 2009 +0200 +++ b/src/ChangeLog Tue Jun 09 06:33:10 2009 +0200 @@ -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 -r 5b967e2c319a -r 28d4a6acbf0a src/symtab.h --- a/src/symtab.h Mon Jun 08 08:00:13 2009 +0200 +++ b/src/symtab.h Tue Jun 09 06:33:10 2009 +0200 @@ -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)