changeset 20588:4bed806ee3d4

eliminate more simple uses of error_state * daspk.cc, dassl.cc, dot.cc, luinc.cc, sylvester.cc, variables.cc, __eigs__.cc: Eliminate simple uses of error_state.
author John W. Eaton <jwe@octave.org>
date Mon, 05 Oct 2015 20:21:55 -0400
parents f90c8372b7ba
children b10432a40432
files libinterp/corefcn/daspk.cc libinterp/corefcn/dassl.cc libinterp/corefcn/dot.cc libinterp/corefcn/luinc.cc libinterp/corefcn/sylvester.cc libinterp/corefcn/variables.cc libinterp/dldfcn/__eigs__.cc
diffstat 7 files changed, 495 insertions(+), 602 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/daspk.cc	Mon Oct 05 19:29:36 2015 -0400
+++ b/libinterp/corefcn/daspk.cc	Mon Oct 05 20:21:55 2015 -0400
@@ -364,31 +364,28 @@
                   {
                     string_vector tmp = f_arg.all_strings ();
 
-                    if (! error_state)
+                    fcn_name = unique_symbol_name ("__daspk_fcn__");
+                    fname = "function y = ";
+                    fname.append (fcn_name);
+                    fname.append (" (x, xdot, t) y = ");
+                    daspk_fcn = extract_function (tmp(0), "daspk", fcn_name,
+                                                  fname, "; endfunction");
+
+                    if (daspk_fcn)
                       {
-                        fcn_name = unique_symbol_name ("__daspk_fcn__");
-                        fname = "function y = ";
-                        fname.append (fcn_name);
-                        fname.append (" (x, xdot, t) y = ");
-                        daspk_fcn = extract_function (tmp(0), "daspk", fcn_name,
-                                                      fname, "; endfunction");
+                        jac_name = unique_symbol_name ("__daspk_jac__");
+                        jname = "function jac = ";
+                        jname.append (jac_name);
+                        jname.append (" (x, xdot, t, cj) jac = ");
+                        daspk_jac = extract_function (tmp(1), "daspk",
+                                                      jac_name, jname,
+                                                      "; endfunction");
 
-                        if (daspk_fcn)
+                        if (!daspk_jac)
                           {
-                            jac_name = unique_symbol_name ("__daspk_jac__");
-                            jname = "function jac = ";
-                            jname.append (jac_name);
-                            jname.append (" (x, xdot, t, cj) jac = ");
-                            daspk_jac = extract_function (tmp(1), "daspk",
-                                                          jac_name, jname,
-                                                          "; endfunction");
-
-                            if (!daspk_jac)
-                              {
-                                if (fcn_name.length ())
-                                  clear_function (fcn_name);
-                                daspk_fcn = 0;
-                              }
+                            if (fcn_name.length ())
+                              clear_function (fcn_name);
+                            daspk_fcn = 0;
                           }
                       }
                   }
@@ -451,26 +448,23 @@
       if (jac_name.length ())
         clear_function (jac_name);
 
-      if (! error_state)
-        {
-          std::string msg = dae.error_message ();
+      std::string msg = dae.error_message ();
 
-          retval(3) = msg;
-          retval(2) = static_cast<double> (dae.integration_state ());
+      retval(3) = msg;
+      retval(2) = static_cast<double> (dae.integration_state ());
 
-          if (dae.integration_ok ())
-            {
-              retval(1) = deriv_output;
-              retval(0) = output;
-            }
-          else
-            {
-              retval(1) = Matrix ();
-              retval(0) = Matrix ();
+      if (dae.integration_ok ())
+        {
+          retval(1) = deriv_output;
+          retval(0) = output;
+        }
+      else
+        {
+          retval(1) = Matrix ();
+          retval(0) = Matrix ();
 
-              if (nargout < 3)
-                error ("daspk: %s", msg.c_str ());
-            }
+          if (nargout < 3)
+            error ("daspk: %s", msg.c_str ());
         }
     }
   else
--- a/libinterp/corefcn/dassl.cc	Mon Oct 05 19:29:36 2015 -0400
+++ b/libinterp/corefcn/dassl.cc	Mon Oct 05 20:21:55 2015 -0400
@@ -365,31 +365,28 @@
                   {
                     string_vector tmp = f_arg.all_strings ();
 
-                    if (! error_state)
+                    fcn_name = unique_symbol_name ("__dassl_fcn__");
+                    fname = "function y = ";
+                    fname.append (fcn_name);
+                    fname.append (" (x, xdot, t) y = ");
+                    dassl_fcn = extract_function (tmp(0), "dassl", fcn_name,
+                                                  fname, "; endfunction");
+
+                    if (dassl_fcn)
                       {
-                        fcn_name = unique_symbol_name ("__dassl_fcn__");
-                        fname = "function y = ";
-                        fname.append (fcn_name);
-                        fname.append (" (x, xdot, t) y = ");
-                        dassl_fcn = extract_function (tmp(0), "dassl", fcn_name,
-                                                      fname, "; endfunction");
+                        jac_name = unique_symbol_name ("__dassl_jac__");
+                        jname = "function jac = ";
+                        jname.append (jac_name);
+                        jname.append (" (x, xdot, t, cj) jac = ");
+                        dassl_jac = extract_function (tmp(1), "dassl",
+                                                      jac_name, jname,
+                                                      "; endfunction");
 
-                        if (dassl_fcn)
+                        if (!dassl_jac)
                           {
-                            jac_name = unique_symbol_name ("__dassl_jac__");
-                            jname = "function jac = ";
-                            jname.append (jac_name);
-                            jname.append (" (x, xdot, t, cj) jac = ");
-                            dassl_jac = extract_function (tmp(1), "dassl",
-                                                          jac_name, jname,
-                                                          "; endfunction");
-
-                            if (!dassl_jac)
-                              {
-                                if (fcn_name.length ())
-                                  clear_function (fcn_name);
-                                dassl_fcn = 0;
-                              }
+                            if (fcn_name.length ())
+                              clear_function (fcn_name);
+                            dassl_fcn = 0;
                           }
                       }
                   }
@@ -453,26 +450,23 @@
       if (jac_name.length ())
         clear_function (jac_name);
 
-      if (! error_state)
-        {
-          std::string msg = dae.error_message ();
+      std::string msg = dae.error_message ();
 
-          retval(3) = msg;
-          retval(2) = static_cast<double> (dae.integration_state ());
+      retval(3) = msg;
+      retval(2) = static_cast<double> (dae.integration_state ());
 
-          if (dae.integration_ok ())
-            {
-              retval(1) = deriv_output;
-              retval(0) = output;
-            }
-          else
-            {
-              retval(1) = Matrix ();
-              retval(0) = Matrix ();
+      if (dae.integration_ok ())
+        {
+          retval(1) = deriv_output;
+          retval(0) = output;
+        }
+      else
+        {
+          retval(1) = Matrix ();
+          retval(0) = Matrix ();
 
-              if (nargout < 3)
-                error ("dassl: %s", msg.c_str ());
-            }
+          if (nargout < 3)
+            error ("dassl: %s", msg.c_str ());
         }
     }
   else
--- a/libinterp/corefcn/dot.cc	Mon Oct 05 19:29:36 2015 -0400
+++ b/libinterp/corefcn/dot.cc	Mon Oct 05 20:21:55 2015 -0400
@@ -147,7 +147,7 @@
           argx = argx.reshape (dimx);
           dimy = dimy.redim (1);
           argy = argy.reshape (dimy);
-          match = ! error_state && (dimx == dimy);
+          match = dimx == dimy;
         }
 
       if (match)
@@ -158,9 +158,7 @@
           else
             dim = args(2).int_value (true) - 1;
 
-          if (error_state)
-            ;
-          else if (dim < 0)
+          if (dim < 0)
             error ("dot: DIM must be a valid dimension");
           else
             {
@@ -174,10 +172,10 @@
                       FloatComplexNDArray y = argy.float_complex_array_value ();
                       get_red_dims (dimx, dimy, dim, dimz, m, n, k);
                       FloatComplexNDArray z (dimz);
-                      if (! error_state)
-                        F77_XFCN (cdotc3, CDOTC3, (m, n, k,
-                                                   x.data (), y.data (),
-                                                   z.fortran_vec ()));
+
+                      F77_XFCN (cdotc3, CDOTC3, (m, n, k,
+                                                 x.data (), y.data (),
+                                                 z.fortran_vec ()));
                       retval = z;
                     }
                   else
@@ -186,10 +184,10 @@
                       ComplexNDArray y = argy.complex_array_value ();
                       get_red_dims (dimx, dimy, dim, dimz, m, n, k);
                       ComplexNDArray z (dimz);
-                      if (! error_state)
-                        F77_XFCN (zdotc3, ZDOTC3, (m, n, k,
-                                                   x.data (), y.data (),
-                                                   z.fortran_vec ()));
+
+                      F77_XFCN (zdotc3, ZDOTC3, (m, n, k,
+                                                 x.data (), y.data (),
+                                                 z.fortran_vec ()));
                       retval = z;
                     }
                 }
@@ -201,9 +199,9 @@
                       FloatNDArray y = argy.float_array_value ();
                       get_red_dims (dimx, dimy, dim, dimz, m, n, k);
                       FloatNDArray z (dimz);
-                      if (! error_state)
-                        F77_XFCN (sdot3, SDOT3, (m, n, k, x.data (), y.data (),
-                                                 z.fortran_vec ()));
+
+                      F77_XFCN (sdot3, SDOT3, (m, n, k, x.data (), y.data (),
+                                               z.fortran_vec ()));
                       retval = z;
                     }
                   else
@@ -212,9 +210,9 @@
                       NDArray y = argy.array_value ();
                       get_red_dims (dimx, dimy, dim, dimz, m, n, k);
                       NDArray z (dimz);
-                      if (! error_state)
-                        F77_XFCN (ddot3, DDOT3, (m, n, k, x.data (), y.data (),
-                                                 z.fortran_vec ()));
+
+                      F77_XFCN (ddot3, DDOT3, (m, n, k, x.data (), y.data (),
+                                               z.fortran_vec ()));
                       retval = z;
                     }
                 }
@@ -224,12 +222,10 @@
                   octave_value_list tmp;
                   tmp(1) = dim + 1;
                   tmp(0) = do_binary_op (octave_value::op_el_mul, argx, argy);
-                  if (! error_state)
-                    {
-                      tmp = feval ("sum", tmp, 1);
-                      if (! tmp.empty ())
-                        retval = tmp(0);
-                    }
+
+                  tmp = feval ("sum", tmp, 1);
+                  if (! tmp.empty ())
+                    retval = tmp(0);
                 }
             }
         }
@@ -341,10 +337,10 @@
                   FloatComplexNDArray x = argx.float_complex_array_value ();
                   FloatComplexNDArray y = argy.float_complex_array_value ();
                   FloatComplexNDArray z (dimz);
-                  if (! error_state)
-                    F77_XFCN (cmatm3, CMATM3, (m, n, k, np,
-                                               x.data (), y.data (),
-                                               z.fortran_vec ()));
+
+                  F77_XFCN (cmatm3, CMATM3, (m, n, k, np,
+                                             x.data (), y.data (),
+                                             z.fortran_vec ()));
                   retval = z;
                 }
               else
@@ -352,10 +348,10 @@
                   ComplexNDArray x = argx.complex_array_value ();
                   ComplexNDArray y = argy.complex_array_value ();
                   ComplexNDArray z (dimz);
-                  if (! error_state)
-                    F77_XFCN (zmatm3, ZMATM3, (m, n, k, np,
-                                               x.data (), y.data (),
-                                               z.fortran_vec ()));
+
+                  F77_XFCN (zmatm3, ZMATM3, (m, n, k, np,
+                                             x.data (), y.data (),
+                                             z.fortran_vec ()));
                   retval = z;
                 }
             }
@@ -366,10 +362,10 @@
                   FloatNDArray x = argx.float_array_value ();
                   FloatNDArray y = argy.float_array_value ();
                   FloatNDArray z (dimz);
-                  if (! error_state)
-                    F77_XFCN (smatm3, SMATM3, (m, n, k, np,
-                                               x.data (), y.data (),
-                                               z.fortran_vec ()));
+
+                  F77_XFCN (smatm3, SMATM3, (m, n, k, np,
+                                             x.data (), y.data (),
+                                             z.fortran_vec ()));
                   retval = z;
                 }
               else
@@ -377,10 +373,10 @@
                   NDArray x = argx.array_value ();
                   NDArray y = argy.array_value ();
                   NDArray z (dimz);
-                  if (! error_state)
-                    F77_XFCN (dmatm3, DMATM3, (m, n, k, np,
-                                               x.data (), y.data (),
-                                               z.fortran_vec ()));
+
+                  F77_XFCN (dmatm3, DMATM3, (m, n, k, np,
+                                             x.data (), y.data (),
+                                             z.fortran_vec ()));
                   retval = z;
                 }
             }
--- a/libinterp/corefcn/luinc.cc	Mon Oct 05 19:29:36 2015 -0400
+++ b/libinterp/corefcn/luinc.cc	Mon Oct 05 20:21:55 2015 -0400
@@ -179,200 +179,170 @@
         {
           std::string tmp = args(2).string_value ();
 
-          if (! error_state)
-            {
-              if (tmp.compare ("vector") == 0)
-                vecout = true;
-              else
-                error ("luinc: unrecognized string argument");
-            }
+          if (tmp.compare ("vector") == 0)
+            vecout = true;
+          else
+            error ("luinc: unrecognized string argument");
         }
 
       // FIXME: Add code for zero-level factorization
       if (zero_level)
         error ("luinc: zero-level factorization not implemented");
 
-      if (!error_state)
+      if (args(0).type_name () == "sparse matrix")
         {
-          if (args(0).type_name () == "sparse matrix")
+          SparseMatrix sm = args(0).sparse_matrix_value ();
+          octave_idx_type sm_nr = sm.rows ();
+          octave_idx_type sm_nc = sm.cols ();
+          ColumnVector Qinit (sm_nc);
+
+          for (octave_idx_type i = 0; i < sm_nc; i++)
+            Qinit (i) = i;
+
+          switch (nargout)
             {
-              SparseMatrix sm = args(0).sparse_matrix_value ();
-              octave_idx_type sm_nr = sm.rows ();
-              octave_idx_type sm_nc = sm.cols ();
-              ColumnVector Qinit (sm_nc);
+            case 0:
+            case 1:
+            case 2:
+              {
+                SparseLU fact (sm, Qinit, thresh, false, true, droptol,
+                               milu, udiag);
 
-              for (octave_idx_type i = 0; i < sm_nc; i++)
-                Qinit (i) = i;
+                SparseMatrix P = fact.Pr ();
+                SparseMatrix L = P.transpose () * fact.L ();
 
-              if (! error_state)
-                {
-                  switch (nargout)
-                    {
-                    case 0:
-                    case 1:
-                    case 2:
-                      {
-                        SparseLU fact (sm, Qinit, thresh, false, true, droptol,
-                                       milu, udiag);
+                retval(1)
+                  = octave_value (fact.U (), MatrixType (MatrixType::Upper));
+
+                retval(0)
+                  = octave_value (L, MatrixType (MatrixType::Permuted_Lower,
+                                                 sm_nr, fact.row_perm ()));
+              }
+              break;
 
-                        if (! error_state)
-                          {
-                            SparseMatrix P = fact.Pr ();
-                            SparseMatrix L = P.transpose () * fact.L ();
-                            retval(1)
-                              = octave_value (fact.U (),
-                                              MatrixType (MatrixType::Upper));
-                            retval(0)
-                              = octave_value (L, MatrixType
-                                                   (MatrixType::Permuted_Lower,
-                                                    sm_nr, fact.row_perm ()));
-                          }
-                      }
-                      break;
+            case 3:
+              {
+                SparseLU fact (sm, Qinit, thresh, false, true, droptol,
+                               milu, udiag);
 
-                    case 3:
-                      {
-                        SparseLU fact (sm, Qinit, thresh, false, true, droptol,
-                                       milu, udiag);
+                if (vecout)
+                  retval(2) = fact.Pr_vec ();
+                else
+                  retval(2) = fact.Pr_mat ();
+
+                retval(1)
+                  = octave_value (fact.U (), MatrixType (MatrixType::Upper));
 
-                        if (! error_state)
-                          {
-                            if (vecout)
-                              retval(2) = fact.Pr_vec ();
-                            else
-                              retval(2) = fact.Pr_mat ();
-                            retval(1)
-                              = octave_value (fact.U (),
-                                              MatrixType (MatrixType::Upper));
-                            retval(0)
-                              = octave_value (fact.L (),
-                                              MatrixType (MatrixType::Lower));
-                          }
-                      }
-                      break;
+                retval(0)
+                  = octave_value (fact.L (), MatrixType (MatrixType::Lower));
+              }
+              break;
+
+            case 4:
+            default:
+              {
+                SparseLU fact (sm, Qinit, thresh, false, false, droptol,
+                               milu, udiag);
 
-                    case 4:
-                    default:
-                      {
-                        SparseLU fact (sm, Qinit, thresh, false, false, droptol,
-                                       milu, udiag);
+                if (vecout)
+                  {
+                    retval(3) = fact.Pc_vec ();
+                    retval(2) = fact.Pr_vec ();
+                  }
+                else
+                  {
+                    retval(3) = fact.Pc_mat ();
+                    retval(2) = fact.Pr_mat ();
+                  }
+
+                retval(1)
+                  = octave_value (fact.U (), MatrixType (MatrixType::Upper));
 
-                        if (! error_state)
-                          {
-                            if (vecout)
-                              {
-                                retval(3) = fact.Pc_vec ();
-                                retval(2) = fact.Pr_vec ();
-                              }
-                            else
-                              {
-                                retval(3) = fact.Pc_mat ();
-                                retval(2) = fact.Pr_mat ();
-                              }
-                            retval(1)
-                              = octave_value (fact.U (),
-                                              MatrixType (MatrixType::Upper));
-                            retval(0)
-                              = octave_value (fact.L (),
-                                              MatrixType (MatrixType::Lower));
-                          }
-                      }
-                      break;
-                    }
-                }
+                retval(0)
+                  = octave_value (fact.L (), MatrixType (MatrixType::Lower));
+              }
+              break;
             }
-          else if (args(0).type_name () == "sparse complex matrix")
-            {
-              SparseComplexMatrix sm =
-                args(0).sparse_complex_matrix_value ();
-              octave_idx_type sm_nr = sm.rows ();
-              octave_idx_type sm_nc = sm.cols ();
-              ColumnVector Qinit (sm_nc);
-
-              for (octave_idx_type i = 0; i < sm_nc; i++)
-                Qinit (i) = i;
+        }
+      else if (args(0).type_name () == "sparse complex matrix")
+        {
+          SparseComplexMatrix sm =
+            args(0).sparse_complex_matrix_value ();
+          octave_idx_type sm_nr = sm.rows ();
+          octave_idx_type sm_nc = sm.cols ();
+          ColumnVector Qinit (sm_nc);
 
-              if (! error_state)
-                {
-                  switch (nargout)
-                    {
-                    case 0:
-                    case 1:
-                    case 2:
-                      {
-                        SparseComplexLU fact (sm, Qinit, thresh, false, true,
-                                              droptol, milu, udiag);
+          for (octave_idx_type i = 0; i < sm_nc; i++)
+            Qinit (i) = i;
+
+          switch (nargout)
+            {
+            case 0:
+            case 1:
+            case 2:
+              {
+                SparseComplexLU fact (sm, Qinit, thresh, false, true,
+                                      droptol, milu, udiag);
 
 
-                        if (! error_state)
-                          {
-                            SparseMatrix P = fact.Pr ();
-                            SparseComplexMatrix L = P.transpose () * fact.L ();
-                            retval(1)
-                              = octave_value (fact.U (),
-                                              MatrixType (MatrixType::Upper));
-                            retval(0)
-                              = octave_value (L, MatrixType
-                                                  (MatrixType::Permuted_Lower,
-                                                   sm_nr, fact.row_perm ()));
-                          }
-                      }
-                      break;
+                SparseMatrix P = fact.Pr ();
+                SparseComplexMatrix L = P.transpose () * fact.L ();
+
+                retval(1)
+                  = octave_value (fact.U (), MatrixType (MatrixType::Upper));
+
+                retval(0)
+                  = octave_value (L, MatrixType (MatrixType::Permuted_Lower,
+                                                 sm_nr, fact.row_perm ()));
+              }
+              break;
 
-                    case 3:
-                      {
-                        SparseComplexLU fact (sm, Qinit, thresh, false, true,
-                                              droptol, milu, udiag);
+            case 3:
+              {
+                SparseComplexLU fact (sm, Qinit, thresh, false, true,
+                                      droptol, milu, udiag);
+
+                if (vecout)
+                  retval(2) = fact.Pr_vec ();
+                else
+                  retval(2) = fact.Pr_mat ();
+
+                retval(1)
+                  = octave_value (fact.U (), MatrixType (MatrixType::Upper));
 
-                        if (! error_state)
-                          {
-                            if (vecout)
-                              retval(2) = fact.Pr_vec ();
-                            else
-                              retval(2) = fact.Pr_mat ();
-                            retval(1)
-                              = octave_value (fact.U (),
-                                              MatrixType (MatrixType::Upper));
-                            retval(0)
-                              = octave_value (fact.L (),
-                                              MatrixType (MatrixType::Lower));
-                          }
-                      }
-                      break;
+                retval(0)
+                  = octave_value (fact.L (), MatrixType (MatrixType::Lower));
+              }
+              break;
 
-                    case 4:
-                    default:
-                      {
-                        SparseComplexLU fact (sm, Qinit, thresh, false, false,
-                                              droptol, milu, udiag);
+            case 4:
+            default:
+              {
+                SparseComplexLU fact (sm, Qinit, thresh, false, false,
+                                      droptol, milu, udiag);
 
-                        if (! error_state)
-                          {
-                            if (vecout)
-                              {
-                                retval(3) = fact.Pc_vec ();
-                                retval(2) = fact.Pr_vec ();
-                              }
-                            else
-                              {
-                                retval(3) = fact.Pc_mat ();
-                                retval(2) = fact.Pr_mat ();
-                              }
-                            retval(1)
-                              = octave_value (fact.U (),
-                                              MatrixType (MatrixType::Upper));
-                            retval(0)
-                              = octave_value (fact.L (),
-                                              MatrixType (MatrixType::Lower));
-                          }
-                      }
-                      break;
-                    }
-                }
+                if (vecout)
+                  {
+                    retval(3) = fact.Pc_vec ();
+                    retval(2) = fact.Pr_vec ();
+                  }
+                else
+                  {
+                    retval(3) = fact.Pc_mat ();
+                    retval(2) = fact.Pr_mat ();
+                  }
+
+                retval(1)
+                  = octave_value (fact.U (), MatrixType (MatrixType::Upper));
+
+                retval(0)
+                  = octave_value (fact.L (), MatrixType (MatrixType::Lower));
+              }
+              break;
             }
-          else
-            error ("luinc: matrix A must be sparse");
         }
+      else
+        error ("luinc: matrix A must be sparse");
     }
 
   return retval;
--- a/libinterp/corefcn/sylvester.cc	Mon Oct 05 19:29:36 2015 -0400
+++ b/libinterp/corefcn/sylvester.cc	Mon Oct 05 20:21:55 2015 -0400
@@ -126,20 +126,9 @@
           // Do everything in complex arithmetic;
 
           FloatComplexMatrix ca = arg_a.float_complex_matrix_value ();
-
-          if (error_state)
-            return retval;
-
           FloatComplexMatrix cb = arg_b.float_complex_matrix_value ();
-
-          if (error_state)
-            return retval;
-
           FloatComplexMatrix cc = arg_c.float_complex_matrix_value ();
 
-          if (error_state)
-            return retval;
-
           retval = Sylvester (ca, cb, cc);
         }
       else
@@ -147,20 +136,9 @@
           // Do everything in real arithmetic.
 
           FloatMatrix ca = arg_a.float_matrix_value ();
-
-          if (error_state)
-            return retval;
-
           FloatMatrix cb = arg_b.float_matrix_value ();
-
-          if (error_state)
-            return retval;
-
           FloatMatrix cc = arg_c.float_matrix_value ();
 
-          if (error_state)
-            return retval;
-
           retval = Sylvester (ca, cb, cc);
         }
     }
@@ -173,20 +151,9 @@
           // Do everything in complex arithmetic;
 
           ComplexMatrix ca = arg_a.complex_matrix_value ();
-
-          if (error_state)
-            return retval;
-
           ComplexMatrix cb = arg_b.complex_matrix_value ();
-
-          if (error_state)
-            return retval;
-
           ComplexMatrix cc = arg_c.complex_matrix_value ();
 
-          if (error_state)
-            return retval;
-
           retval = Sylvester (ca, cb, cc);
         }
       else
@@ -194,20 +161,9 @@
           // Do everything in real arithmetic.
 
           Matrix ca = arg_a.matrix_value ();
-
-          if (error_state)
-            return retval;
-
           Matrix cb = arg_b.matrix_value ();
-
-          if (error_state)
-            return retval;
-
           Matrix cc = arg_c.matrix_value ();
 
-          if (error_state)
-            return retval;
-
           retval = Sylvester (ca, cb, cc);
         }
     }
--- a/libinterp/corefcn/variables.cc	Mon Oct 05 19:29:36 2015 -0400
+++ b/libinterp/corefcn/variables.cc	Mon Oct 05 20:21:55 2015 -0400
@@ -267,8 +267,6 @@
 
           unwind_protect frame;
 
-          frame.protect_var (error_state);
-
           frame.protect_var (discard_error_messages);
           frame.protect_var (discard_warning_messages);
 
@@ -309,7 +307,6 @@
       unwind_protect frame;
 
       frame.protect_var (discard_error_messages);
-      frame.protect_var (error_state);
 
       discard_error_messages = true;
 
@@ -1696,13 +1693,10 @@
 
               feval ("load", octave_value (nm), 0);
 
-              if (! error_state)
-                {
-                  std::string newmsg = std::string ("Variables in the file ") +
-                                       nm + ":\n\n";
-
-                  retval =  do_who (i, argv, return_list, verbose, newmsg);
-                }
+              std::string newmsg = std::string ("Variables in the file ")
+                + nm + ":\n\n";
+
+              retval =  do_who (i, argv, return_list, verbose, newmsg);
             }
 
           return retval;
@@ -1786,10 +1780,7 @@
                           octave_value expr_val
                             = eval_string (pat, true, parse_status);
 
-                          if (! error_state)
-                            symbol_stats.append (sr, pat, expr_val);
-                          else
-                            return retval;
+                          symbol_stats.append (sr, pat, expr_val);
                         }
                     }
                 }
@@ -1897,8 +1888,7 @@
 
       string_vector argv = args.make_argv ("who");
 
-      if (! error_state)
-        retval = do_who (argc, argv, nargout == 1);
+      retval = do_who (argc, argv, nargout == 1);
     }
   else
     print_usage ();
@@ -1978,8 +1968,7 @@
 
       string_vector argv = args.make_argv ("whos");
 
-      if (! error_state)
-        retval = do_who (argc, argv, nargout == 1, true);
+      retval = do_who (argc, argv, nargout == 1, true);
     }
   else
     print_usage ();
@@ -2468,129 +2457,126 @@
 
   string_vector argv = args.make_argv ("clear");
 
-  if (! error_state)
+  if (argc == 1)
+    {
+      do_clear_globals (argv, argc, true);
+      do_clear_variables (argv, argc, true);
+
+      octave_link::clear_workspace ();
+    }
+  else
     {
-      if (argc == 1)
-        {
-          do_clear_globals (argv, argc, true);
-          do_clear_variables (argv, argc, true);
-
-          octave_link::clear_workspace ();
-        }
-      else
+      int idx = 0;
+
+      bool clear_all = false;
+      bool clear_functions = false;
+      bool clear_globals = false;
+      bool clear_variables = false;
+      bool clear_objects = false;
+      bool exclusive = false;
+      bool have_regexp = false;
+      bool have_dash_option = false;
+
+      while (++idx < argc)
         {
-          int idx = 0;
-
-          bool clear_all = false;
-          bool clear_functions = false;
-          bool clear_globals = false;
-          bool clear_variables = false;
-          bool clear_objects = false;
-          bool exclusive = false;
-          bool have_regexp = false;
-          bool have_dash_option = false;
-
-          while (++idx < argc)
+          if (argv[idx] == "-all" || argv[idx] == "-a")
+            {
+              CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
+
+              have_dash_option = true;
+              clear_all = true;
+            }
+          else if (argv[idx] == "-exclusive" || argv[idx] == "-x")
+            {
+              have_dash_option = true;
+              exclusive = true;
+            }
+          else if (argv[idx] == "-functions" || argv[idx] == "-f")
+            {
+              CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
+
+              have_dash_option = true;
+              clear_functions = true;
+            }
+          else if (argv[idx] == "-global" || argv[idx] == "-g")
+            {
+              CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
+
+              have_dash_option = true;
+              clear_globals = true;
+            }
+          else if (argv[idx] == "-variables" || argv[idx] == "-v")
             {
-              if (argv[idx] == "-all" || argv[idx] == "-a")
-                {
-                  CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
-
-                  have_dash_option = true;
-                  clear_all = true;
-                }
-              else if (argv[idx] == "-exclusive" || argv[idx] == "-x")
-                {
-                  have_dash_option = true;
-                  exclusive = true;
-                }
-              else if (argv[idx] == "-functions" || argv[idx] == "-f")
+              CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
+
+              have_dash_option = true;
+              clear_variables = true;
+            }
+          else if (argv[idx] == "-classes" || argv[idx] == "-c")
+            {
+              CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
+
+              have_dash_option = true;
+              clear_objects = true;
+            }
+          else if (argv[idx] == "-regexp" || argv[idx] == "-r")
+            {
+              CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
+
+              have_dash_option = true;
+              have_regexp = true;
+            }
+          else
+            break;
+        }
+
+      if (idx <= argc)
+        {
+          if (! have_dash_option)
+            {
+              do_matlab_compatible_clear (argv, argc, idx);
+            }
+          else
+            {
+              if (clear_all)
                 {
-                  CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
-
-                  have_dash_option = true;
-                  clear_functions = true;
+                  maybe_warn_exclusive (exclusive);
+
+                  if (++idx < argc)
+                    warning
+                      ("clear: ignoring extra arguments after -all");
+
+                  symbol_table::clear_all ();
                 }
-              else if (argv[idx] == "-global" || argv[idx] == "-g")
+              else if (have_regexp)
                 {
-                  CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
-
-                  have_dash_option = true;
-                  clear_globals = true;
+                  do_clear_variables (argv, argc, idx, exclusive, true);
                 }
-              else if (argv[idx] == "-variables" || argv[idx] == "-v")
-                {
-                  CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
-
-                  have_dash_option = true;
-                  clear_variables = true;
-                }
-              else if (argv[idx] == "-classes" || argv[idx] == "-c")
+              else if (clear_functions)
                 {
-                  CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
-
-                  have_dash_option = true;
-                  clear_objects = true;
+                  do_clear_functions (argv, argc, idx, exclusive);
                 }
-              else if (argv[idx] == "-regexp" || argv[idx] == "-r")
+              else if (clear_globals)
+                {
+                  do_clear_globals (argv, argc, idx, exclusive);
+                }
+              else if (clear_variables)
                 {
-                  CLEAR_OPTION_ERROR (have_dash_option && ! exclusive);
-
-                  have_dash_option = true;
-                  have_regexp = true;
+                  do_clear_variables (argv, argc, idx, exclusive);
                 }
-              else
-                break;
-            }
-
-          if (idx <= argc)
-            {
-              if (! have_dash_option)
+              else if (clear_objects)
                 {
-                  do_matlab_compatible_clear (argv, argc, idx);
+                  symbol_table::clear_objects ();
+                  octave_class::clear_exemplar_map ();
+                  symbol_table::clear_all ();
                 }
               else
                 {
-                  if (clear_all)
-                    {
-                      maybe_warn_exclusive (exclusive);
-
-                      if (++idx < argc)
-                        warning
-                          ("clear: ignoring extra arguments after -all");
-
-                      symbol_table::clear_all ();
-                    }
-                  else if (have_regexp)
-                    {
-                      do_clear_variables (argv, argc, idx, exclusive, true);
-                    }
-                  else if (clear_functions)
-                    {
-                      do_clear_functions (argv, argc, idx, exclusive);
-                    }
-                  else if (clear_globals)
-                    {
-                      do_clear_globals (argv, argc, idx, exclusive);
-                    }
-                  else if (clear_variables)
-                    {
-                      do_clear_variables (argv, argc, idx, exclusive);
-                    }
-                  else if (clear_objects)
-                    {
-                      symbol_table::clear_objects ();
-                      octave_class::clear_exemplar_map ();
-                      symbol_table::clear_all ();
-                    }
-                  else
-                    {
-                      do_clear_symbols (argv, argc, idx, exclusive);
-                    }
+                  do_clear_symbols (argv, argc, idx, exclusive);
                 }
-
-              octave_link::set_workspace ();
             }
+
+          octave_link::set_workspace ();
         }
     }
 
--- a/libinterp/dldfcn/__eigs__.cc	Mon Oct 05 19:29:36 2015 -0400
+++ b/libinterp/dldfcn/__eigs__.cc	Mon Oct 05 20:21:55 2015 -0400
@@ -270,7 +270,7 @@
 
   // Note hold off reading B till later to avoid issues of double
   // copies of the matrix if B is full/real while A is complex.
-  if (! error_state && nargin > 1 + arg_offset
+  if (nargin > 1 + arg_offset
       && ! (args(1 + arg_offset).is_real_scalar ()))
     {
       if (args(1+arg_offset).is_complex_type ())
@@ -288,10 +288,10 @@
         }
     }
 
-  if (!error_state && nargin > (1+arg_offset))
+  if (nargin > (1+arg_offset))
     k = args(1+arg_offset).nint_value ();
 
-  if (!error_state && nargin > (2+arg_offset))
+  if (nargin > (2+arg_offset))
     {
       if (args(2+arg_offset).is_string ())
         {
@@ -319,7 +319,7 @@
   sigmar = std::real (sigma);
   sigmai = std::imag (sigma);
 
-  if (!error_state && nargin > (3+arg_offset))
+  if (nargin > (3+arg_offset))
     {
       if (args(3+arg_offset).is_map ())
         {
@@ -423,48 +423,128 @@
 
   // Mode 1 for SM mode seems unstable for some reason.
   // Use Mode 3 instead, with sigma = 0.
-  if (!error_state && !have_sigma && typ == "SM")
+  if (! have_sigma && typ == "SM")
     have_sigma = true;
 
-  if (!error_state)
+  octave_idx_type nconv;
+  if (a_is_complex || b_is_complex)
     {
-      octave_idx_type nconv;
-      if (a_is_complex || b_is_complex)
-        {
-          ComplexMatrix eig_vec;
-          ComplexColumnVector eig_val;
+      ComplexMatrix eig_vec;
+      ComplexColumnVector eig_val;
 
 
+      if (have_a_fun)
+        nconv = EigsComplexNonSymmetricFunc
+          (eigs_complex_func, n, typ, sigma, k, p, info, eig_vec,
+           eig_val, cresid, octave_stdout, tol, (nargout > 1), cholB,
+           disp, maxit);
+      else if (have_sigma)
+        {
+          if (a_is_sparse)
+            nconv = EigsComplexNonSymmetricMatrixShift
+              (ascm, sigma, k, p, info, eig_vec, eig_val, bscm, permB,
+               cresid, octave_stdout, tol, (nargout > 1), cholB, disp,
+               maxit);
+          else
+            nconv = EigsComplexNonSymmetricMatrixShift
+              (acm, sigma, k, p, info, eig_vec, eig_val, bcm, permB,
+               cresid, octave_stdout, tol, (nargout > 1), cholB, disp,
+               maxit);
+        }
+      else
+        {
+          if (a_is_sparse)
+            nconv = EigsComplexNonSymmetricMatrix
+              (ascm, typ, k, p, info, eig_vec, eig_val, bscm, permB,
+               cresid, octave_stdout, tol, (nargout > 1), cholB, disp,
+               maxit);
+          else
+            nconv = EigsComplexNonSymmetricMatrix
+              (acm, typ, k, p, info, eig_vec, eig_val, bcm, permB,
+               cresid, octave_stdout, tol, (nargout > 1), cholB, disp,
+               maxit);
+        }
+
+      if (nargout < 2)
+        retval(0) = eig_val;
+      else
+        {
+          retval(2) = double (info);
+          retval(1) = ComplexDiagMatrix (eig_val);
+          retval(0) = eig_vec;
+        }
+    }
+  else if (sigmai != 0.)
+    {
+      // Promote real problem to a complex one.
+      ComplexMatrix eig_vec;
+      ComplexColumnVector eig_val;
+
+      if (have_a_fun)
+        nconv = EigsComplexNonSymmetricFunc
+          (eigs_complex_func, n, typ,  sigma, k, p, info, eig_vec,
+           eig_val, cresid, octave_stdout, tol, (nargout > 1), cholB,
+           disp, maxit);
+      else
+        {
+          if (a_is_sparse)
+            nconv = EigsComplexNonSymmetricMatrixShift
+              (SparseComplexMatrix (asmm), sigma, k, p, info, eig_vec,
+               eig_val, SparseComplexMatrix (bsmm), permB, cresid,
+               octave_stdout, tol, (nargout > 1), cholB, disp, maxit);
+          else
+            nconv = EigsComplexNonSymmetricMatrixShift
+              (ComplexMatrix (amm), sigma, k, p, info, eig_vec,
+               eig_val, ComplexMatrix (bmm), permB, cresid,
+               octave_stdout, tol, (nargout > 1), cholB, disp, maxit);
+        }
+
+      if (nargout < 2)
+        retval(0) = eig_val;
+      else
+        {
+          retval(2) = double (info);
+          retval(1) = ComplexDiagMatrix (eig_val);
+          retval(0) = eig_vec;
+        }
+    }
+  else
+    {
+      if (symmetric)
+        {
+          Matrix eig_vec;
+          ColumnVector eig_val;
+
           if (have_a_fun)
-            nconv = EigsComplexNonSymmetricFunc
-                    (eigs_complex_func, n, typ, sigma, k, p, info, eig_vec,
-                     eig_val, cresid, octave_stdout, tol, (nargout > 1), cholB,
-                     disp, maxit);
+            nconv = EigsRealSymmetricFunc
+              (eigs_func, n, typ, sigmar, k, p, info, eig_vec,
+               eig_val, resid, octave_stdout, tol, (nargout > 1),
+               cholB, disp, maxit);
           else if (have_sigma)
             {
               if (a_is_sparse)
-                nconv = EigsComplexNonSymmetricMatrixShift
-                        (ascm, sigma, k, p, info, eig_vec, eig_val, bscm, permB,
-                         cresid, octave_stdout, tol, (nargout > 1), cholB, disp,
-                         maxit);
+                nconv = EigsRealSymmetricMatrixShift
+                  (asmm, sigmar, k, p, info, eig_vec, eig_val, bsmm,
+                   permB, resid, octave_stdout, tol, (nargout > 1),
+                   cholB, disp, maxit);
               else
-                nconv = EigsComplexNonSymmetricMatrixShift
-                        (acm, sigma, k, p, info, eig_vec, eig_val, bcm, permB,
-                         cresid, octave_stdout, tol, (nargout > 1), cholB, disp,
-                         maxit);
+                nconv = EigsRealSymmetricMatrixShift
+                  (amm, sigmar, k, p, info, eig_vec, eig_val, bmm,
+                   permB, resid, octave_stdout, tol, (nargout > 1),
+                   cholB, disp, maxit);
             }
           else
             {
               if (a_is_sparse)
-                nconv = EigsComplexNonSymmetricMatrix
-                        (ascm, typ, k, p, info, eig_vec, eig_val, bscm, permB,
-                         cresid, octave_stdout, tol, (nargout > 1), cholB, disp,
-                         maxit);
+                nconv = EigsRealSymmetricMatrix
+                  (asmm, typ, k, p, info, eig_vec, eig_val, bsmm,
+                   permB, resid, octave_stdout, tol, (nargout > 1),
+                   cholB, disp, maxit);
               else
-                nconv = EigsComplexNonSymmetricMatrix
-                        (acm, typ, k, p, info, eig_vec, eig_val, bcm, permB,
-                         cresid, octave_stdout, tol, (nargout > 1), cholB, disp,
-                         maxit);
+                nconv = EigsRealSymmetricMatrix
+                  (amm, typ, k, p, info, eig_vec, eig_val, bmm, permB,
+                   resid, octave_stdout, tol, (nargout > 1), cholB,
+                   disp, maxit);
             }
 
           if (nargout < 2)
@@ -472,33 +552,45 @@
           else
             {
               retval(2) = double (info);
-              retval(1) = ComplexDiagMatrix (eig_val);
+              retval(1) = DiagMatrix (eig_val);
               retval(0) = eig_vec;
             }
         }
-      else if (sigmai != 0.)
+      else
         {
-          // Promote real problem to a complex one.
           ComplexMatrix eig_vec;
           ComplexColumnVector eig_val;
 
           if (have_a_fun)
-            nconv = EigsComplexNonSymmetricFunc
-                    (eigs_complex_func, n, typ,  sigma, k, p, info, eig_vec,
-                     eig_val, cresid, octave_stdout, tol, (nargout > 1), cholB,
-                     disp, maxit);
+            nconv = EigsRealNonSymmetricFunc
+              (eigs_func, n, typ, sigmar, k, p, info, eig_vec,
+               eig_val, resid, octave_stdout, tol, (nargout > 1),
+               cholB, disp, maxit);
+          else if (have_sigma)
+            {
+              if (a_is_sparse)
+                nconv = EigsRealNonSymmetricMatrixShift
+                  (asmm, sigmar, k, p, info, eig_vec, eig_val, bsmm,
+                   permB, resid, octave_stdout, tol, (nargout > 1),
+                   cholB, disp, maxit);
+              else
+                nconv = EigsRealNonSymmetricMatrixShift
+                  (amm, sigmar, k, p, info, eig_vec, eig_val, bmm,
+                   permB, resid, octave_stdout, tol, (nargout > 1),
+                   cholB, disp, maxit);
+            }
           else
             {
               if (a_is_sparse)
-                nconv = EigsComplexNonSymmetricMatrixShift
-                        (SparseComplexMatrix (asmm), sigma, k, p, info, eig_vec,
-                         eig_val, SparseComplexMatrix (bsmm), permB, cresid,
-                         octave_stdout, tol, (nargout > 1), cholB, disp, maxit);
+                nconv = EigsRealNonSymmetricMatrix
+                  (asmm, typ, k, p, info, eig_vec, eig_val, bsmm,
+                   permB, resid, octave_stdout, tol, (nargout > 1),
+                   cholB, disp, maxit);
               else
-                nconv = EigsComplexNonSymmetricMatrixShift
-                        (ComplexMatrix (amm), sigma, k, p, info, eig_vec,
-                         eig_val, ComplexMatrix (bmm), permB, cresid,
-                         octave_stdout, tol, (nargout > 1), cholB, disp, maxit);
+                nconv = EigsRealNonSymmetricMatrix
+                  (amm, typ, k, p, info, eig_vec, eig_val, bmm, permB,
+                   resid, octave_stdout, tol, (nargout > 1), cholB,
+                   disp, maxit);
             }
 
           if (nargout < 2)
@@ -510,108 +602,13 @@
               retval(0) = eig_vec;
             }
         }
-      else
-        {
-          if (symmetric)
-            {
-              Matrix eig_vec;
-              ColumnVector eig_val;
-
-              if (have_a_fun)
-                nconv = EigsRealSymmetricFunc
-                        (eigs_func, n, typ, sigmar, k, p, info, eig_vec,
-                         eig_val, resid, octave_stdout, tol, (nargout > 1),
-                         cholB, disp, maxit);
-              else if (have_sigma)
-                {
-                  if (a_is_sparse)
-                    nconv = EigsRealSymmetricMatrixShift
-                            (asmm, sigmar, k, p, info, eig_vec, eig_val, bsmm,
-                             permB, resid, octave_stdout, tol, (nargout > 1),
-                             cholB, disp, maxit);
-                  else
-                    nconv = EigsRealSymmetricMatrixShift
-                            (amm, sigmar, k, p, info, eig_vec, eig_val, bmm,
-                             permB, resid, octave_stdout, tol, (nargout > 1),
-                             cholB, disp, maxit);
-                }
-              else
-                {
-                  if (a_is_sparse)
-                    nconv = EigsRealSymmetricMatrix
-                            (asmm, typ, k, p, info, eig_vec, eig_val, bsmm,
-                             permB, resid, octave_stdout, tol, (nargout > 1),
-                             cholB, disp, maxit);
-                  else
-                    nconv = EigsRealSymmetricMatrix
-                            (amm, typ, k, p, info, eig_vec, eig_val, bmm, permB,
-                             resid, octave_stdout, tol, (nargout > 1), cholB,
-                             disp, maxit);
-                }
+    }
 
-              if (nargout < 2)
-                retval(0) = eig_val;
-              else
-                {
-                  retval(2) = double (info);
-                  retval(1) = DiagMatrix (eig_val);
-                  retval(0) = eig_vec;
-                }
-            }
-          else
-            {
-              ComplexMatrix eig_vec;
-              ComplexColumnVector eig_val;
-
-              if (have_a_fun)
-                nconv = EigsRealNonSymmetricFunc
-                        (eigs_func, n, typ, sigmar, k, p, info, eig_vec,
-                         eig_val, resid, octave_stdout, tol, (nargout > 1),
-                         cholB, disp, maxit);
-              else if (have_sigma)
-                {
-                  if (a_is_sparse)
-                    nconv = EigsRealNonSymmetricMatrixShift
-                            (asmm, sigmar, k, p, info, eig_vec, eig_val, bsmm,
-                             permB, resid, octave_stdout, tol, (nargout > 1),
-                             cholB, disp, maxit);
-                  else
-                    nconv = EigsRealNonSymmetricMatrixShift
-                            (amm, sigmar, k, p, info, eig_vec, eig_val, bmm,
-                             permB, resid, octave_stdout, tol, (nargout > 1),
-                             cholB, disp, maxit);
-                }
-              else
-                {
-                  if (a_is_sparse)
-                    nconv = EigsRealNonSymmetricMatrix
-                            (asmm, typ, k, p, info, eig_vec, eig_val, bsmm,
-                             permB, resid, octave_stdout, tol, (nargout > 1),
-                             cholB, disp, maxit);
-                  else
-                    nconv = EigsRealNonSymmetricMatrix
-                            (amm, typ, k, p, info, eig_vec, eig_val, bmm, permB,
-                             resid, octave_stdout, tol, (nargout > 1), cholB,
-                             disp, maxit);
-                }
-
-              if (nargout < 2)
-                retval(0) = eig_val;
-              else
-                {
-                  retval(2) = double (info);
-                  retval(1) = ComplexDiagMatrix (eig_val);
-                  retval(0) = eig_vec;
-                }
-            }
-        }
-
-      if (nconv <= 0)
-        warning ("eigs: None of the %d requested eigenvalues converged", k);
-      else if (nconv < k)
-        warning ("eigs: Only %d of the %d requested eigenvalues converged",
-                 nconv, k);
-    }
+  if (nconv <= 0)
+    warning ("eigs: None of the %d requested eigenvalues converged", k);
+  else if (nconv < k)
+    warning ("eigs: Only %d of the %d requested eigenvalues converged",
+             nconv, k);
 
   if (! fcn_name.empty ())
     clear_function (fcn_name);