Mercurial > hg > octave-nkf
diff src/variables.cc @ 3681:df54d394acc0
[project @ 2000-06-26 17:46:58 by jwe]
author | jwe |
---|---|
date | Mon, 26 Jun 2000 17:47:00 +0000 |
parents | 8cea69ad95ae |
children | f9ea3dcf58ee |
line wrap: on
line diff
--- a/src/variables.cc +++ b/src/variables.cc @@ -1078,6 +1078,31 @@ // Deleting names from the symbol tables. +static inline bool +var_matches_any_pattern (const std::string& nm, + const string_vector& argv, int argc, int idx) +{ + bool retval = false; + + for (int k = idx; k < argc; k++) + { + std::string patstr = argv[k]; + + if (! patstr.empty ()) + { + glob_match pattern (patstr); + + if (pattern.match (nm)) + { + retval = true; + break; + } + } + } + + return retval; +} + DEFUN_TEXT (clear, args, , "-*- texinfo -*-\n\ @deffn {Command} clear [-x] pattern @dots{}\n\ @@ -1181,46 +1206,94 @@ // pattern matching code if the string doesn't contain any // globbing patterns. - for (int k = idx; k < argc; k++) + if (exclusive) { - std::string patstr = argv[k]; + int lcount = lvars.length (); + + for (int i = 0; i < lcount; i++) + { + std::string nm = lvars[i]; - if (! patstr.empty ()) + if (! var_matches_any_pattern (nm, argv, argc, idx)) + curr_sym_tab->clear (nm); + } + + int gcount = gvars.length (); + + for (int i = 0; i < gcount; i++) { - glob_match pattern (patstr); + std::string nm = gvars[i]; - int lcount = lvars.length (); - - for (int i = 0; i < lcount; i++) + if (! var_matches_any_pattern (nm, argv, argc, idx)) { - std::string nm = lvars[i]; - int match = pattern.match (nm); - if ((exclusive && ! match) || (! exclusive && match)) - curr_sym_tab->clear (nm); + int count = curr_sym_tab->clear (nm); + + if (count > 0) + global_sym_tab->clear (nm, clear_user_functions); } + } + + int fcount = fcns.length (); + + for (int i = 0; i < fcount; i++) + { + std::string nm = fcns[i]; + + if (! var_matches_any_pattern (nm, argv, argc, idx)) + { + curr_sym_tab->clear (nm); - int gcount = gvars.length (); - for (int i = 0; i < gcount; i++) + global_sym_tab->clear (nm, clear_user_functions); + } + } + } + else + { + for (int k = idx; k < argc; k++) + { + std::string patstr = argv[k]; + + if (! patstr.empty ()) { - std::string nm = gvars[i]; - int match = pattern.match (nm); - if ((exclusive && ! match) || (! exclusive && match)) + glob_match pattern (patstr); + + int lcount = lvars.length (); + + for (int i = 0; i < lcount; i++) { - int count = curr_sym_tab->clear (nm); - if (count > 0) - global_sym_tab->clear (nm, clear_user_functions); + std::string nm = lvars[i]; + + if (pattern.match (nm)) + curr_sym_tab->clear (nm); } - } + + int gcount = gvars.length (); + + for (int i = 0; i < gcount; i++) + { + std::string nm = gvars[i]; + + if (pattern.match (nm)) + { + int count = curr_sym_tab->clear (nm); - int fcount = fcns.length (); - for (int i = 0; i < fcount; i++) - { - std::string nm = fcns[i]; - int match = pattern.match (nm); - if ((exclusive && ! match) || (! exclusive && match)) + if (count > 0) + global_sym_tab->clear (nm, clear_user_functions); + } + } + + int fcount = fcns.length (); + + for (int i = 0; i < fcount; i++) { - curr_sym_tab->clear (nm); - global_sym_tab->clear (nm, clear_user_functions); + std::string nm = fcns[i]; + + if (pattern.match (nm)) + { + curr_sym_tab->clear (nm); + + global_sym_tab->clear (nm, clear_user_functions); + } } } }