changeset 21168:26f85aa072de

maint: Replace instances of goto in liboctave where convenient. * CMatrix.cc (operator >>): Replace "goto done;" with "return is;". * CNDArray.cc (operator >>): Replace "goto done;" with "return is;". * lo-specfun.cc (gammainc (various)) : Rename return variable result to retval. Replace "goto done;" with "return XXX ();" where XXX is a container such as Matrix, NDArray, FloatMatrix, FloatNDArray. * lo-specfun.cc (gammainc (double, double, err), gammainc (float,float, err)): Move input validation to top of function. * randpoisson.c (poisson_cdf_lookup): Place action of if statement on separate line. * cmd-edit.cc (do_decode_prompt_string): Replace goto statement with break. Rename variable result to retval. Rename variable temp to tmpstr. Place cases of switch statement in mostly alphabetical order. Use single quotes when describing a single character. Use temporary number buffer of 32, not 128. * oct-sort.cc (sort): Replace "goto fail;" with "return;"
author Rik <rik@octave.org>
date Mon, 01 Feb 2016 13:29:21 -0800
parents 7705a858262b
children 40051830f89b
files liboctave/array/CMatrix.cc liboctave/array/CNDArray.cc liboctave/numeric/lo-specfun.cc liboctave/numeric/randpoisson.c liboctave/util/cmd-edit.cc liboctave/util/oct-sort.cc
diffstat 6 files changed, 150 insertions(+), 232 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/CMatrix.cc	Sun Jan 31 19:26:47 2016 -0800
+++ b/liboctave/array/CMatrix.cc	Mon Feb 01 13:29:21 2016 -0800
@@ -3452,12 +3452,10 @@
             if (is)
               a.elem (i, j) = tmp;
             else
-              goto done;
+              return is;
           }
     }
 
-done:
-
   return is;
 }
 
--- a/liboctave/array/CNDArray.cc	Sun Jan 31 19:26:47 2016 -0800
+++ b/liboctave/array/CNDArray.cc	Mon Feb 01 13:29:21 2016 -0800
@@ -865,12 +865,10 @@
           if (is)
             a.elem (i) = tmp;
           else
-            goto done;
+            return is;
         }
     }
 
-done:
-
   return is;
 }
 
--- a/liboctave/numeric/lo-specfun.cc	Sun Jan 31 19:26:47 2016 -0800
+++ b/liboctave/numeric/lo-specfun.cc	Mon Feb 01 13:29:21 2016 -0800
@@ -2563,14 +2563,14 @@
 double
 gammainc (double x, double a, bool& err)
 {
-  double retval;
-
-  err = false;
-
   if (a < 0.0 || x < 0.0)
     (*current_liboctave_error_handler)
       ("gammainc: A and X must be non-negative");
 
+  err = false;
+
+  double retval;
+
   F77_XFCN (xgammainc, XGAMMAINC, (a, x, retval));
 
   return retval;
@@ -2582,24 +2582,19 @@
   octave_idx_type nr = a.rows ();
   octave_idx_type nc = a.cols ();
 
-  Matrix result (nr, nc);
-  Matrix retval;
+  Matrix retval (nr, nc);
 
   bool err;
 
   for (octave_idx_type j = 0; j < nc; j++)
     for (octave_idx_type i = 0; i < nr; i++)
       {
-        result(i,j) = gammainc (x, a(i,j), err);
+        retval(i,j) = gammainc (x, a(i,j), err);
 
         if (err)
-          goto done;  // FIXME: why not just use return to exit?
+          return Matrix ();
       }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
@@ -2609,33 +2604,25 @@
   octave_idx_type nr = x.rows ();
   octave_idx_type nc = x.cols ();
 
-  Matrix result (nr, nc);
-  Matrix retval;
+  Matrix retval (nr, nc);
 
   bool err;
 
   for (octave_idx_type j = 0; j < nc; j++)
     for (octave_idx_type i = 0; i < nr; i++)
       {
-        result(i,j) = gammainc (x(i,j), a, err);
+        retval(i,j) = gammainc (x(i,j), a, err);
 
         if (err)
-          goto done;  // FIXME: why not just use return to exit?
+          return Matrix ();
       }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
 Matrix
 gammainc (const Matrix& x, const Matrix& a)
 {
-  Matrix result;
-  Matrix retval;
-
   octave_idx_type nr = x.rows ();
   octave_idx_type nc = x.cols ();
 
@@ -2647,23 +2634,19 @@
       ("gammainc: nonconformant arguments (arg 1 is %dx%d, arg 2 is %dx%d)",
        nr, nc, a_nr, a_nc);
 
-  result.resize (nr, nc);
+  Matrix retval (nr, nc);
 
   bool err;
 
   for (octave_idx_type j = 0; j < nc; j++)
     for (octave_idx_type i = 0; i < nr; i++)
       {
-        result(i,j) = gammainc (x(i,j), a(i,j), err);
+        retval(i,j) = gammainc (x(i,j), a(i,j), err);
 
         if (err)
-          goto done;  // FIXME: why not just use return to exit?
+          return Matrix ();
       }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
@@ -2673,23 +2656,18 @@
   dim_vector dv = a.dims ();
   octave_idx_type nel = dv.numel ();
 
-  NDArray retval;
-  NDArray result (dv);
+  NDArray retval (dv);
 
   bool err;
 
   for (octave_idx_type i = 0; i < nel; i++)
     {
-      result(i) = gammainc (x, a(i), err);
+      retval(i) = gammainc (x, a(i), err);
 
       if (err)
-        goto done;  // FIXME: why not just use return to exit?
+        return NDArray ();
     }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
@@ -2699,23 +2677,18 @@
   dim_vector dv = x.dims ();
   octave_idx_type nel = dv.numel ();
 
-  NDArray retval;
-  NDArray result (dv);
+  NDArray retval (dv);
 
   bool err;
 
   for (octave_idx_type i = 0; i < nel; i++)
     {
-      result(i) = gammainc (x(i), a, err);
+      retval(i) = gammainc (x(i), a, err);
 
       if (err)
-        goto done;  // FIXME: why not just use return to exit?
+        return NDArray ();
     }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
@@ -2735,37 +2708,32 @@
          x_str.c_str (), a_str. c_str ());
     }
 
-  NDArray retval;
-  NDArray result (dv);
+  NDArray retval (dv);
 
   bool err;
 
   for (octave_idx_type i = 0; i < nel; i++)
     {
-      result(i) = gammainc (x(i), a(i), err);
+      retval(i) = gammainc (x(i), a(i), err);
 
       if (err)
-        goto done;  // FIXME: why not just use return to exit?
+        return NDArray ();
     }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
 float
 gammainc (float x, float a, bool& err)
 {
-  float retval;
-
-  err = false;
-
   if (a < 0.0 || x < 0.0)
     (*current_liboctave_error_handler)
       ("gammainc: A and X must be non-negative");
 
+  err = false;
+
+  float retval;
+
   F77_XFCN (xsgammainc, XSGAMMAINC, (a, x, retval));
 
   return retval;
@@ -2777,24 +2745,19 @@
   octave_idx_type nr = a.rows ();
   octave_idx_type nc = a.cols ();
 
-  FloatMatrix result (nr, nc);
-  FloatMatrix retval;
+  FloatMatrix retval (nr,  nc);
 
   bool err;
 
   for (octave_idx_type j = 0; j < nc; j++)
     for (octave_idx_type i = 0; i < nr; i++)
       {
-        result(i,j) = gammainc (x, a(i,j), err);
+        retval(i,j) = gammainc (x, a(i,j), err);
 
         if (err)
-          goto done;  // FIXME: why not just use return to exit?
+          return FloatMatrix ();
       }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
@@ -2804,33 +2767,25 @@
   octave_idx_type nr = x.rows ();
   octave_idx_type nc = x.cols ();
 
-  FloatMatrix result (nr, nc);
-  FloatMatrix retval;
+  FloatMatrix retval (nr, nc);
 
   bool err;
 
   for (octave_idx_type j = 0; j < nc; j++)
     for (octave_idx_type i = 0; i < nr; i++)
       {
-        result(i,j) = gammainc (x(i,j), a, err);
+        retval(i,j) = gammainc (x(i,j), a, err);
 
         if (err)
-          goto done;  // FIXME: why not just use return to exit?
+          return FloatMatrix ();
       }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
 FloatMatrix
 gammainc (const FloatMatrix& x, const FloatMatrix& a)
 {
-  FloatMatrix result;
-  FloatMatrix retval;
-
   octave_idx_type nr = x.rows ();
   octave_idx_type nc = x.cols ();
 
@@ -2842,23 +2797,19 @@
       ("gammainc: nonconformant arguments (arg 1 is %dx%d, arg 2 is %dx%d)",
        nr, nc, a_nr, a_nc);
 
-  result.resize (nr, nc);
+  FloatMatrix retval (nr, nc);
 
   bool err;
 
   for (octave_idx_type j = 0; j < nc; j++)
     for (octave_idx_type i = 0; i < nr; i++)
       {
-        result(i,j) = gammainc (x(i,j), a(i,j), err);
+        retval(i,j) = gammainc (x(i,j), a(i,j), err);
 
         if (err)
-          goto done;  // FIXME: why not just use return to exit?
+          return FloatMatrix ();
       }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
@@ -2868,23 +2819,18 @@
   dim_vector dv = a.dims ();
   octave_idx_type nel = dv.numel ();
 
-  FloatNDArray retval;
-  FloatNDArray result (dv);
+  FloatNDArray retval (dv);
 
   bool err;
 
   for (octave_idx_type i = 0; i < nel; i++)
     {
-      result(i) = gammainc (x, a(i), err);
+      retval(i) = gammainc (x, a(i), err);
 
       if (err)
-        goto done;  // FIXME: why not just use return to exit?
+        return FloatNDArray ();
     }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
@@ -2894,23 +2840,18 @@
   dim_vector dv = x.dims ();
   octave_idx_type nel = dv.numel ();
 
-  FloatNDArray retval;
-  FloatNDArray result (dv);
+  FloatNDArray retval (dv);
 
   bool err;
 
   for (octave_idx_type i = 0; i < nel; i++)
     {
-      result(i) = gammainc (x(i), a, err);
+      retval(i) = gammainc (x(i), a, err);
 
       if (err)
-        goto done;  // FIXME: why not just use return to exit?
+        return FloatNDArray ();
     }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
@@ -2920,9 +2861,6 @@
   dim_vector dv = x.dims ();
   octave_idx_type nel = dv.numel ();
 
-  FloatNDArray retval;
-  FloatNDArray result;
-
   if (dv != a.dims ())
     {
       std::string x_str = dv.str ();
@@ -2933,22 +2871,18 @@
          x_str.c_str (), a_str.c_str ());
     }
 
-  result.resize (dv);
+  FloatNDArray retval (dv);
 
   bool err;
 
   for (octave_idx_type i = 0; i < nel; i++)
     {
-      result(i) = gammainc (x(i), a(i), err);
+      retval(i) = gammainc (x(i), a(i), err);
 
       if (err)
-        goto done;  // FIXME: why not just use return to exit?
+        return FloatNDArray ();
     }
 
-  retval = result;
-
-done:
-
   return retval;
 }
 
--- a/liboctave/numeric/randpoisson.c	Sun Jan 31 19:26:47 2016 -0800
+++ b/liboctave/numeric/randpoisson.c	Mon Feb 01 13:29:21 2016 -0800
@@ -350,7 +350,8 @@
           p[i] = (double) k;
           continue;
         }
-      if (++k < tableidx) goto nextk;
+      if (++k < tableidx)
+        goto nextk;
 
       /* We only need high values of the table very rarely so we
        * don't automatically compute the entire table. */
@@ -401,7 +402,8 @@
           p[i] = (float) k;
           continue;
         }
-      if (++k < tableidx) goto nextk;
+      if (++k < tableidx)
+        goto nextk;
 
       while (tableidx < TABLESIZE)
         {
--- a/liboctave/util/cmd-edit.cc	Sun Jan 31 19:26:47 2016 -0800
+++ b/liboctave/util/cmd-edit.cc	Mon Feb 01 13:29:21 2016 -0800
@@ -1556,8 +1556,8 @@
 std::string
 command_editor::do_decode_prompt_string (const std::string& s)
 {
-  std::string result;
-  std::string temp;
+  std::string retval;
+  std::string tmpstr;
   size_t i = 0;
   size_t slen = s.length ();
   int c;
@@ -1586,37 +1586,22 @@
               {
                 int n = read_octal (s.substr (i, 3));
 
-                temp = "\\";
+                tmpstr = "\\";
 
                 if (n != -1)
                   {
-                    i += 3;
-                    temp[0] = n;
+                    tmpstr[0] = n;
+                    i += 2;   // i++ makes this += 3 later
                   }
 
-                c = 0;
-                goto add_string;
+                break;
               }
 
             case 'a':
               {
-                temp = '\a';
-
-                goto add_string;
-              }
-
-            case 'e':
-              {
-                temp = '\033';
+                tmpstr = '\a';
 
-                goto add_string;
-              }
-
-            case 'r':
-              {
-                temp = '\r';
-
-                goto add_string;
+                break;
               }
 
             case 'd':
@@ -1629,32 +1614,72 @@
                 octave_localtime now;
 
                 if (c == 'd')
-                  temp = now.strftime ("%a %b %d");
+                  tmpstr = now.strftime ("%a %b %d");
                 else if (c == 't')
-                  temp = now.strftime ("%H:%M:%S");
+                  tmpstr = now.strftime ("%H:%M:%S");
                 else if (c == 'T')
-                  temp = now.strftime ("%I:%M:%S");
+                  tmpstr = now.strftime ("%I:%M:%S");
                 else if (c == '@')
-                  temp = now.strftime ("%I:%M %p");
+                  tmpstr = now.strftime ("%I:%M %p");
                 else if (c == 'A')
-                  temp = now.strftime ("%H:%M");
+                  tmpstr = now.strftime ("%H:%M");
+
+                break;
+              }
+
+            case 'e':
+              {
+                tmpstr = '\033';
+
+                break;
+              }
 
-                goto add_string;
+            case 'h':
+              {
+                tmpstr = octave_env::get_host_name ();
+
+                size_t pos = tmpstr.find ('.');
+
+                if (pos != std::string::npos)
+                  tmpstr.resize (pos);
+
+                break;
+              }
+
+            case 'H':
+              {
+                tmpstr = octave_env::get_host_name ();
+
+                break;
               }
 
             case 'n':
               {
-                temp = newline_chars ();
+                tmpstr = newline_chars ();
+
+                break;
+              }
 
-                goto add_string;
+            case 'r':
+              {
+                tmpstr = '\r';
+
+                break;
               }
 
             case 's':
               {
-                temp = octave_env::get_program_name ();
-                temp = octave_env::base_pathname (temp);
+                tmpstr = octave_env::get_program_name ();
+                tmpstr = octave_env::base_pathname (tmpstr);
+
+                break;
+              }
 
-                goto add_string;
+            case 'u':
+              {
+                tmpstr = octave_env::get_user_name ();
+
+                break;
               }
 
             case 'w':
@@ -1662,135 +1687,102 @@
               {
                 try
                   {
-                    temp = octave_env::get_current_directory ();
+                    tmpstr = octave_env::get_current_directory ();
                   }
                 catch (const octave_execution_exception&)
                   {
-                    temp = "";
+                    tmpstr = "";
                   }
 
                 std::string home_dir = octave_env::get_home_directory ();
 
-                if (c == 'W' && (home_dir.empty () || temp != home_dir))
+                if (c == 'W' && (home_dir.empty () || tmpstr != home_dir))
                   {
-                    if (temp != "/" && temp != "//")
+                    if (tmpstr != "/" && tmpstr != "//")
                       {
-                        size_t pos = temp.rfind ('/');
+                        size_t pos = tmpstr.rfind ('/');
 
                         if (pos != std::string::npos && pos != 0)
-                          temp = temp.substr (pos + 1);
+                          tmpstr = tmpstr.substr (pos + 1);
                       }
                   }
                 else
-                  temp = octave_env::polite_directory_format (temp);
-
-                goto add_string;
-              }
-
-            case 'u':
-              {
-                temp = octave_env::get_user_name ();
-
-                goto add_string;
-              }
-
-            case 'H':
-              {
-                temp = octave_env::get_host_name ();
-
-                goto add_string;
-              }
+                  tmpstr = octave_env::polite_directory_format (tmpstr);
 
-            case 'h':
-              {
-                temp = octave_env::get_host_name ();
-
-                size_t pos = temp.find ('.');
-
-                if (pos != std::string::npos)
-                  temp.resize (pos);
-
-                goto add_string;
-              }
-
-            case '#':
-              {
-                char number_buffer[128];
-                sprintf (number_buffer, "%d", command_number);
-                temp = number_buffer;
-
-                goto add_string;
+                break;
               }
 
             case '!':
               {
-                char number_buffer[128];
+                char number_buffer[32];
                 int num = command_history::current_number ();
                 if (num > 0)
                   sprintf (number_buffer, "%d", num);
                 else
                   strcpy (number_buffer, "!");
-                temp = number_buffer;
+                tmpstr = number_buffer;
+
+                break;
+              }
 
-                goto add_string;
+            case '#':
+              {
+                char number_buffer[32];
+                sprintf (number_buffer, "%d", command_number);
+                tmpstr = number_buffer;
+
+                break;
               }
 
             case '$':
               {
 #if defined (HAVE_GETEUID)
-                temp = (::geteuid () == 0 ? "#" : "$");
+                tmpstr = (::geteuid () == 0 ? '#' : '$');
 #else
-                temp = "$";
+                tmpstr = '$';
 #endif
 
-                goto add_string;
+                break;
               }
 
 #if defined (USE_READLINE)
             case '[':
             case ']':
               {
-                temp.resize (1);
+                tmpstr.resize (1);
 
-                temp[0] = ((c == '[')
-                           ? ::octave_rl_prompt_start_ignore ()
-                           : ::octave_rl_prompt_end_ignore ());
+                tmpstr[0] = ((c == '[')
+                             ? ::octave_rl_prompt_start_ignore ()
+                             : ::octave_rl_prompt_end_ignore ());
 
-                goto add_string;
+                break;
               }
 #endif
 
             case '\\':
               {
-                temp = "\\";
+                tmpstr = "\\";
 
-                goto add_string;
+                break;
               }
 
             default:
               {
-                temp = "\\ ";
-                temp[1] = c;
-
-                goto add_string;
-              }
-
-            add_string:
-              {
-                if (c)
-                  i++;
-
-                result.append (temp);
+                tmpstr = "\\ ";
+                tmpstr[1] = c;
 
                 break;
               }
             }
+
+          retval.append (tmpstr);
+          i++;   // Move past processed escape character
         }
       else
-        result += c;
+        retval += c;
     }
 
-  return result;
+  return retval;
 }
 
 int
--- a/liboctave/util/oct-sort.cc	Sun Jan 31 19:26:47 2016 -0800
+++ b/liboctave/util/oct-sort.cc	Mon Feb 01 13:29:21 2016 -0800
@@ -1415,7 +1415,7 @@
           /* Identify next run. */
           n = count_run (data + lo, nremaining, descending, comp);
           if (n < 0)
-            goto fail;
+            return;
           if (descending)
             std::reverse (data + lo, data + lo + n);
           /* If short, extend to min (minrun, nremaining). */
@@ -1432,7 +1432,7 @@
           ms->pending[ms->n].len = n;
           ms->n++;
           if (merge_collapse (data, comp) < 0)
-            goto fail;
+            return;
           /* Advance to find next run. */
           lo += n;
           nremaining -= n;
@@ -1441,9 +1441,6 @@
 
       merge_force_collapse (data, comp);
     }
-
-fail:
-  return;
 }
 
 template <typename T>
@@ -1475,7 +1472,7 @@
           /* Identify next run. */
           n = count_run (data + lo, nremaining, descending, comp);
           if (n < 0)
-            goto fail;
+            return;
           if (descending)
             {
               std::reverse (data + lo, data + lo + n);
@@ -1495,7 +1492,7 @@
           ms->pending[ms->n].len = n;
           ms->n++;
           if (merge_collapse (data, idx, comp) < 0)
-            goto fail;
+            return;
           /* Advance to find next run. */
           lo += n;
           nremaining -= n;
@@ -1504,9 +1501,6 @@
 
       merge_force_collapse (data, idx, comp);
     }
-
-fail:
-  return;
 }
 
 template <typename T>