# HG changeset patch # User jwe # Date 962041620 0 # Node ID df54d394acc01d62e096345fd0fa142a856d888d # Parent b8b0f5ff28e2d33ac53dd7de4ef7397b991b2810 [project @ 2000-06-26 17:46:58 by jwe] diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2000-06-26 John W. Eaton + + * octave-bug.in: Substitute correct values for config_opts, + MACHINE, and CXXFLAGS. + 2000-06-07 John W. Eaton * Makeconf.in (GPERF): Allow substitution. diff --git a/examples/oregonator.cc b/examples/oregonator.cc --- a/examples/oregonator.cc +++ b/examples/oregonator.cc @@ -12,7 +12,7 @@ { ColumnVector dx (3); - ColumnVector x = args(0).column_vector_value (); + ColumnVector x (args(0).vector_value ()); dx(0) = 77.27 * (x(1) - x(0)*x(1) + x(0) - 8.375e-06*pow (x(0), 2)); dx(1) = (x(2) - x(0)*x(1) - x(1)) / 77.27; diff --git a/octave-bug.in b/octave-bug.in --- a/octave-bug.in +++ b/octave-bug.in @@ -13,9 +13,9 @@ # Configuration: these variables are filled in when running make to # compile Octave. -config_opts=%config_opts% +config_opts=%OCTAVE_CONF_config_opts% VERSION=%OCTAVE_CONF_VERSION% -MACHINE=%OCTAVE_CONF_CANONICAL_HOST_TYPE% +MACHINE=%OCTAVE_CANONICAL_HOST_TYPE% F77=%OCTAVE_CONF_F77% FFLAGS=%OCTAVE_CONF_FFLAGS% FPICFLAG=%OCTAVE_CONF_FPICFLAG% @@ -30,7 +30,7 @@ CPICFLAG=%OCTAVE_CONF_CPICFLAG% CXX=%OCTAVE_CONF_CXX% CXX_VERSION=%OCTAVE_CONF_CXX_VERSION% -CXXFLAGS=%OCTAVE_CONF_BUG_CXXFLAGS% +CXXFLAGS=%OCTAVE_CONF_CXXFLAGS% CXXPICFLAG=%OCTAVE_CONF_CXXPICFLAG% LDFLAGS=%OCTAVE_CONF_LDFLAGS% LIBFLAGS=%OCTAVE_CONF_LIBFLAGS% diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2000-06-26 John W. Eaton + + * variables.cc (var_matches_any_pattern): New function. + (Fclear): Use it to make exclusive clear work correctly. + 2000-06-08 John W. Eaton * ov-range.h (octave_range::is_numeric_type): New function. diff --git a/src/variables.cc b/src/variables.cc --- 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); + } } } }