diff src/toplev.cc @ 4180:84fe3ca3a246

[project @ 2002-11-15 04:47:01 by jwe]
author jwe
date Fri, 15 Nov 2002 04:47:02 +0000
parents 2aea727f516f
children dd2abf428f5d
line wrap: on
line diff
--- a/src/toplev.cc
+++ b/src/toplev.cc
@@ -90,6 +90,18 @@
 // Original value of TEXMFDBS environment variable.
 std::string octave_original_texmfdbs;
 
+static void
+recover_from_exception (void)
+{
+  unwind_protect::run_all ();
+  can_interrupt = true;
+  SET_OCTAVE_INTERRUPT_IMMEDIATELY (0);
+  octave_interrupt_state = 0;
+  octave_allocation_error = 0;
+  octave_restore_signal_mask ();
+  octave_catch_interrupts ();
+}
+
 int
 main_loop (void)
 {
@@ -118,7 +130,7 @@
   int retval = 0;
   do
     {
-      OCTAVE_TRY_WITH_INTERRUPTS
+      try
 	{
 	  curr_sym_tab = top_level_sym_tab;
 
@@ -176,13 +188,14 @@
 	}
       OCTAVE_CATCH_INTERRUPTS
 	{
-	  unwind_protect::run_all ();
-	  can_interrupt = true;
-	  SET_OCTAVE_INTERRUPT_IMMEDIATELY (0);
-	  octave_interrupt_state = 0;
+	  recover_from_exception ();
 	  std::cout << "\n";
-	  octave_restore_signal_mask ();
-	  octave_catch_interrupts ();
+	}
+      catch (bad_alloc)
+	{
+	  recover_from_exception ();
+	  std::cerr
+	    << "error: memory exhausted -- trying to return to prompt\n";
 	}
     }
   while (retval == 0);