diff libinterp/parse-tree/lex.h @ 16224:4a848eb52de2

use stack for tracking lexer start states * lex.h (octave_lexer::start_state_stack): New member variable. (octave_lexer::push_start_state, octave_lexer::pop_start_state, octave_lexer::clear_start_state, octave_lexer::start_state, octave_lexer::display_start_state): New functions. * lex.ll (INPUT_FILE_START): Rename from INPUT_FILE_BEGIN. Use push_start_state and pop_start_state instead of switching flex start states directly with the flex BEGIN macro. (octave_lexer::init, octave_lexer::reset): Clear start state stack. (octave_lexer::prep_for_file, octave_lexer::process_comment, octave_lexer::handle_close_bracket): Don't use OCTAVE_YYG macro. (octave_lexer::display_start_state): Rename from display_state. Eliminate argument. Display current start state.
author John W. Eaton <jwe@octave.org>
date Fri, 08 Mar 2013 10:46:13 -0500
parents e7ff32e7cf82
children e19b1632d7c1
line wrap: on
line diff
--- a/libinterp/parse-tree/lex.h	Thu Mar 07 16:35:12 2013 -0500
+++ b/libinterp/parse-tree/lex.h	Fri Mar 08 10:46:13 2013 -0500
@@ -524,11 +524,23 @@
     return input_source () == "eval_string";
   }
 
+  void push_start_state (int state);
+
+  void pop_start_state (void);
+
+  void clear_start_state (void);
+
+  int start_state (void) const { return start_state_stack.top (); }
+
+  void display_start_state (void) const;
+
   // For unwind protect.
   static void cleanup (octave_lexer *lexer) { delete lexer; }
 
 private:
 
+  std::stack<int> start_state_stack;
+
   // No copying!
 
   octave_lexer (const octave_lexer&);