changeset 3681:df54d394acc0

[project @ 2000-06-26 17:46:58 by jwe]
author jwe
date Mon, 26 Jun 2000 17:47:00 +0000
parents b8b0f5ff28e2
children 19e1ac7359fb
files ChangeLog examples/oregonator.cc octave-bug.in src/ChangeLog src/variables.cc
diffstat 5 files changed, 115 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2000-06-26  John W. Eaton  <jwe@bevo.che.wisc.edu>
+
+	* octave-bug.in: Substitute correct values for config_opts,
+	MACHINE, and CXXFLAGS.
+
 2000-06-07  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
 	* Makeconf.in (GPERF): Allow substitution.
--- 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;
--- 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%
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2000-06-26  John W. Eaton  <jwe@bevo.che.wisc.edu>
+
+	* variables.cc (var_matches_any_pattern): New function.
+	(Fclear): Use it to make exclusive clear work correctly.
+
 2000-06-08  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
 	* ov-range.h (octave_range::is_numeric_type): New function.
--- 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);
+			}
 		    }
 		}
 	    }