changeset 16151:e309eb7940be

parser tweaks * input.cc (get_debug_input): Create parser outside of loop. * toplev.cc (main_loop): Likewise. * oct-parse.yy (parse_fcn_file): Don't reset newly created parser.
author John W. Eaton <jwe@octave.org>
date Wed, 27 Feb 2013 20:32:42 -0500
parents 891a2a4df71f
children c48847a781d5
files libinterp/interpfcn/input.cc libinterp/interpfcn/toplev.cc libinterp/parse-tree/oct-parse.yy
diffstat 3 files changed, 17 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/interpfcn/input.cc	Wed Feb 27 18:52:46 2013 -0500
+++ b/libinterp/interpfcn/input.cc	Wed Feb 27 20:32:42 2013 -0500
@@ -669,16 +669,16 @@
       get_input_from_eval_string = false;
     }
 
+  // octave_parser constructor sets this for us.
+  frame.protect_var (CURR_LEXER);
+
+  octave_parser *curr_parser = new octave_parser ();
+  frame.add_fcn (octave_parser::cleanup, curr_parser);
+
   while (Vdebugging)
     {
       unwind_protect middle_frame;
 
-      // octave_parser constructor sets this for us.
-      middle_frame.protect_var (CURR_LEXER);
-
-      octave_parser *curr_parser = new octave_parser ();
-      middle_frame.add_fcn (octave_parser::cleanup, curr_parser);
-
       reset_error_handler ();
 
       curr_parser->reset ();
--- a/libinterp/interpfcn/toplev.cc	Wed Feb 27 18:52:46 2013 -0500
+++ b/libinterp/interpfcn/toplev.cc	Wed Feb 27 20:32:42 2013 -0500
@@ -559,18 +559,20 @@
 
   // The big loop.
 
+  unwind_protect frame;
+
+  // octave_parser constructor sets this for us.
+  frame.protect_var (CURR_LEXER);
+
+  octave_parser *curr_parser = new octave_parser ();
+  frame.add_fcn (octave_parser::cleanup, curr_parser);
+
   int retval = 0;
   do
     {
       try
         {
-          unwind_protect frame;
-
-          // octave_parser constructor sets this for us.
-          frame.protect_var (CURR_LEXER);
-
-          octave_parser *curr_parser = new octave_parser ();
-          frame.add_fcn (octave_parser::cleanup, curr_parser);
+          unwind_protect inner_frame;
 
           reset_error_handler ();
 
@@ -583,9 +585,9 @@
           // the forced variables will be unmarked in the event of an
           // interrupt.
           symbol_table::scope_id scope = symbol_table::top_scope ();
-          frame.add_fcn (symbol_table::unmark_forced_variables, scope);
+          inner_frame.add_fcn (symbol_table::unmark_forced_variables, scope);
 
-          frame.protect_var (global_command);
+          inner_frame.protect_var (global_command);
 
           global_command = 0;
 
--- a/libinterp/parse-tree/oct-parse.yy	Wed Feb 27 18:52:46 2013 -0500
+++ b/libinterp/parse-tree/oct-parse.yy	Wed Feb 27 20:32:42 2013 -0500
@@ -3407,8 +3407,6 @@
       octave_parser *curr_parser = new octave_parser ();
       frame.add_fcn (octave_parser::cleanup, curr_parser);
 
-      curr_parser->reset ();
-
       std::string help_txt
         = gobble_leading_white_space
             (ffile, eof,