octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

parse errors do not use error handling routines


From: John W. Eaton
Subject: parse errors do not use error handling routines
Date: Mon, 2 Feb 2004 14:21:51 -0600

On 29-Jan-2004, Paul Kienzle <address@hidden> wrote:

| Syntax errors don't set lasterr in octave-2.1.53.  E.g.,
| 
| octave> error('this is the last error')
| error: this is the last error
| octave> try eval('if'); catch lasterr, end
| ans = error: this is the last error

Please try the following patch.

Thanks,

jwe


2004-02-02  John W. Eaton  <address@hidden>

        * error.cc (verror): New arg, save_last_error.  Change all callers.
        (usage): Set error_state after calling verror.


Index: src/error.cc
===================================================================
RCS file: /usr/local/cvsroot/octave/src/error.cc,v
retrieving revision 1.94
diff -u -r1.94 error.cc
--- src/error.cc        23 Jan 2004 04:08:27 -0000      1.94
+++ src/error.cc        2 Feb 2004 20:20:39 -0000
@@ -154,7 +154,7 @@
 }
 
 static void
-verror (const char *name, const char *fmt, va_list args)
+verror (bool save_last_error, const char *name, const char *fmt, va_list args)
 {
   if (discard_error_messages)
     return;
@@ -184,7 +184,7 @@
 
   OSSTREAM_FREEZE (output_buf);
 
-  if (! error_state && name && ! strcmp (name, "error"))
+  if (! error_state && save_last_error)
     {
       // This is the first error in a possible series.
       Vlast_error_message = msg_string;
@@ -240,14 +240,14 @@
                    {
                      char *tmp_fmt = strsave (fmt);
                      tmp_fmt[len - 1] = '\0';
-                     verror (name, tmp_fmt, args);
+                     verror (true, name, tmp_fmt, args);
                      delete [] tmp_fmt;
                    }
 
                  error_state = -2;
                }
              else
-               verror (name, fmt, args);
+               verror (true, name, fmt, args);
            }
        }
       else
@@ -263,7 +263,7 @@
 {
   va_list args;
   va_start (args, fmt);
-  verror (name, fmt, args);
+  verror (false, name, fmt, args);
   va_end (args);
 }
 
@@ -272,8 +272,8 @@
 {
   va_list args;
   va_start (args, fmt);
+  verror (true, "usage", fmt, args);
   error_state = -1;
-  verror ("usage", fmt, args);
   va_end (args);
 }
 
@@ -291,12 +291,12 @@
                {
                  char *tmp_fmt = strsave (fmt);
                  tmp_fmt[len - 1] = '\0';
-                 verror (0, tmp_fmt, args);
+                 verror (false, 0, tmp_fmt, args);
                  delete [] tmp_fmt;
                }
            }
          else
-           verror (0, fmt, args);
+           verror (false, 0, fmt, args);
        }
     }
   else
@@ -433,7 +433,7 @@
   va_start (args, fmt);
   buffer_error_messages = 0;
   discard_error_messages = false;
-  verror ("panic", fmt, args);
+  verror (false, "panic", fmt, args);
   va_end (args);
   abort ();
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]