diff libinterp/parse-tree/lex.ll @ 16110:7302f8a4df83

use pointer for global lexical_feedback structure * lex.h, lex.ll (curr_lexer): Rename from lexer_flags. Declare as pointer. Change all uses. * lex.h (lexical_feedback): Make copy constructor and operator= private. * toplev.cc (main_loop): Protect existing and initialize new curr_lexer. * input.cc (get_debug_input): Likewise.
author John W. Eaton <jwe@octave.org>
date Tue, 26 Feb 2013 01:10:08 -0500
parents 031117f4db7c
children 3ec4f6488569
line wrap: on
line diff
--- a/libinterp/parse-tree/lex.ll	Tue Feb 26 00:45:43 2013 -0500
+++ b/libinterp/parse-tree/lex.ll	Tue Feb 26 01:10:08 2013 -0500
@@ -148,9 +148,9 @@
 #define TOK_RETURN(tok) \
   do \
     { \
-      lexer_flags.current_input_column += yyleng; \
-      lexer_flags.quote_is_transpose = false; \
-      lexer_flags.convert_spaces_to_comma = true; \
+      curr_lexer->current_input_column += yyleng; \
+      curr_lexer->quote_is_transpose = false; \
+      curr_lexer->convert_spaces_to_comma = true; \
       COUNT_TOK_AND_RETURN (tok); \
     } \
   while (0)
@@ -158,8 +158,8 @@
 #define TOK_PUSH_AND_RETURN(name, tok) \
   do \
     { \
-      yylval.tok_val = new token (name, lexer_flags.input_line_number, \
-                                  lexer_flags.current_input_column); \
+      yylval.tok_val = new token (name, curr_lexer->input_line_number, \
+                                  curr_lexer->current_input_column); \
       token_stack.push (yylval.tok_val); \
       TOK_RETURN (tok); \
     } \
@@ -168,14 +168,14 @@
 #define BIN_OP_RETURN_INTERNAL(tok, convert, bos, qit) \
   do \
     { \
-      yylval.tok_val = new token (lexer_flags.input_line_number, \
-                                  lexer_flags.current_input_column); \
+      yylval.tok_val = new token (curr_lexer->input_line_number, \
+                                  curr_lexer->current_input_column); \
       token_stack.push (yylval.tok_val); \
-      lexer_flags.current_input_column += yyleng; \
-      lexer_flags.quote_is_transpose = qit; \
-      lexer_flags.convert_spaces_to_comma = convert; \
-      lexer_flags.looking_for_object_index = false; \
-      lexer_flags.at_beginning_of_statement = bos; \
+      curr_lexer->current_input_column += yyleng; \
+      curr_lexer->quote_is_transpose = qit; \
+      curr_lexer->convert_spaces_to_comma = convert; \
+      curr_lexer->looking_for_object_index = false; \
+      curr_lexer->at_beginning_of_statement = bos; \
       COUNT_TOK_AND_RETURN (tok); \
     } \
   while (0)
@@ -212,7 +212,7 @@
   while (0)
 
 // The state of the lexer.
-lexical_feedback lexer_flags;
+lexical_feedback *curr_lexer = 0;
 
 // Stack to hold tokens so that we can delete them when the parser is
 // reset and avoid growing forever just because we are stashing some
@@ -315,13 +315,13 @@
     LEXER_DEBUG ("<COMMAND_START>{NL}");
 
     BEGIN (INITIAL);
-    lexer_flags.input_line_number++;
-    lexer_flags.current_input_column = 1;
-
-    lexer_flags.quote_is_transpose = false;
-    lexer_flags.convert_spaces_to_comma = true;
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = true;
+    curr_lexer->input_line_number++;
+    curr_lexer->current_input_column = 1;
+
+    curr_lexer->quote_is_transpose = false;
+    curr_lexer->convert_spaces_to_comma = true;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = true;
 
     COUNT_TOK_AND_RETURN ('\n');
   }
@@ -329,8 +329,8 @@
 <COMMAND_START>[\;\,] {
     LEXER_DEBUG ("<COMMAND_START>[\\;\\,]");
 
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = true;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = true;
 
     BEGIN (INITIAL);
 
@@ -343,9 +343,9 @@
 <COMMAND_START>[\"\'] {
     LEXER_DEBUG ("<COMMAND_START>[\\\"\\']");
 
-    lexer_flags.at_beginning_of_statement = false;
-
-    lexer_flags.current_input_column++;
+    curr_lexer->at_beginning_of_statement = false;
+
+    curr_lexer->current_input_column++;
     int tok = handle_string (yytext[0]);
 
     COUNT_TOK_AND_RETURN (tok);
@@ -356,8 +356,8 @@
 
     std::string tok = strip_trailing_whitespace (yytext);
 
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = false;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = false;
 
     TOK_PUSH_AND_RETURN (tok, SQ_STRING);
   }
@@ -382,10 +382,10 @@
     scan_for_comments (yytext);
     fixup_column_count (yytext);
 
-    lexer_flags.looking_at_object_index.pop_front ();
-
-    lexer_flags.looking_for_object_index = true;
-    lexer_flags.at_beginning_of_statement = false;
+    curr_lexer->looking_at_object_index.pop_front ();
+
+    curr_lexer->looking_for_object_index = true;
+    curr_lexer->at_beginning_of_statement = false;
 
     int c = yytext[yyleng-1];
     bool cont_is_spc = (eat_continuation () != lexical_feedback::NO_WHITESPACE);
@@ -408,10 +408,10 @@
     scan_for_comments (yytext);
     fixup_column_count (yytext);
 
-    lexer_flags.looking_at_object_index.pop_front ();
-
-    lexer_flags.looking_for_object_index = true;
-    lexer_flags.at_beginning_of_statement = false;
+    curr_lexer->looking_at_object_index.pop_front ();
+
+    curr_lexer->looking_for_object_index = true;
+    curr_lexer->at_beginning_of_statement = false;
 
     int c = yytext[yyleng-1];
     bool cont_is_spc = (eat_continuation () != lexical_feedback::NO_WHITESPACE);
@@ -433,16 +433,16 @@
 <MATRIX_START>{S}*\,{S}* {
     LEXER_DEBUG ("<MATRIX_START>{S}*\\,{S}*");
 
-    lexer_flags.current_input_column += yyleng;
+    curr_lexer->current_input_column += yyleng;
 
     int tmp = eat_continuation ();
 
-    lexer_flags.quote_is_transpose = false;
-    lexer_flags.convert_spaces_to_comma = true;
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = false;
-
-    if (! lexer_flags.looking_at_object_index.front ())
+    curr_lexer->quote_is_transpose = false;
+    curr_lexer->convert_spaces_to_comma = true;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = false;
+
+    if (! curr_lexer->looking_at_object_index.front ())
       {
         if ((tmp & lexical_feedback::NEWLINE) == lexical_feedback::NEWLINE)
           {
@@ -465,21 +465,21 @@
 <MATRIX_START>{S}+ {
     LEXER_DEBUG ("<MATRIX_START>{S}+");
 
-    lexer_flags.current_input_column += yyleng;
-
-    lexer_flags.at_beginning_of_statement = false;
+    curr_lexer->current_input_column += yyleng;
+
+    curr_lexer->at_beginning_of_statement = false;
 
     int tmp = eat_continuation ();
 
-    if (! lexer_flags.looking_at_object_index.front ())
+    if (! curr_lexer->looking_at_object_index.front ())
       {
         bool bin_op = next_token_is_bin_op (true);
         bool postfix_un_op = next_token_is_postfix_unary_op (true);
         bool sep_op = next_token_is_sep_op ();
 
         if (! (postfix_un_op || bin_op || sep_op)
-            && lexer_flags.nesting_level.is_bracket_or_brace ()
-            && lexer_flags.convert_spaces_to_comma)
+            && curr_lexer->nesting_level.is_bracket_or_brace ()
+            && curr_lexer->convert_spaces_to_comma)
           {
             if ((tmp & lexical_feedback::NEWLINE) == lexical_feedback::NEWLINE)
               {
@@ -488,9 +488,9 @@
                 xunput (';', yytext);
               }
 
-            lexer_flags.quote_is_transpose = false;
-            lexer_flags.convert_spaces_to_comma = true;
-            lexer_flags.looking_for_object_index = false;
+            curr_lexer->quote_is_transpose = false;
+            curr_lexer->convert_spaces_to_comma = true;
+            curr_lexer->looking_for_object_index = false;
 
             maybe_warn_separator_insert (',');
 
@@ -514,10 +514,10 @@
     fixup_column_count (yytext);
     eat_whitespace ();
 
-    lexer_flags.quote_is_transpose = false;
-    lexer_flags.convert_spaces_to_comma = true;
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = false;
+    curr_lexer->quote_is_transpose = false;
+    curr_lexer->convert_spaces_to_comma = true;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = false;
 
     COUNT_TOK_AND_RETURN (';');
   }
@@ -538,15 +538,15 @@
     fixup_column_count (yytext);
     eat_whitespace ();
 
-    lexer_flags.quote_is_transpose = false;
-    lexer_flags.convert_spaces_to_comma = true;
-    lexer_flags.at_beginning_of_statement = false;
-
-    if (lexer_flags.nesting_level.none ())
+    curr_lexer->quote_is_transpose = false;
+    curr_lexer->convert_spaces_to_comma = true;
+    curr_lexer->at_beginning_of_statement = false;
+
+    if (curr_lexer->nesting_level.none ())
       return LEXICAL_ERROR;
 
-    if (! lexer_flags.looking_at_object_index.front ()
-        && lexer_flags.nesting_level.is_bracket_or_brace ())
+    if (! curr_lexer->looking_at_object_index.front ()
+        && curr_lexer->nesting_level.is_bracket_or_brace ())
       {
         maybe_warn_separator_insert (';');
 
@@ -557,26 +557,26 @@
 \[{S}* {
     LEXER_DEBUG ("\\[{S}*");
 
-    lexer_flags.nesting_level.bracket ();
-
-    lexer_flags.looking_at_object_index.push_front (false);
-
-    lexer_flags.current_input_column += yyleng;
-    lexer_flags.quote_is_transpose = false;
-    lexer_flags.convert_spaces_to_comma = true;
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = false;
-
-    if (lexer_flags.defining_func
-        && ! lexer_flags.parsed_function_name.top ())
-      lexer_flags.looking_at_return_list = true;
+    curr_lexer->nesting_level.bracket ();
+
+    curr_lexer->looking_at_object_index.push_front (false);
+
+    curr_lexer->current_input_column += yyleng;
+    curr_lexer->quote_is_transpose = false;
+    curr_lexer->convert_spaces_to_comma = true;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = false;
+
+    if (curr_lexer->defining_func
+        && ! curr_lexer->parsed_function_name.top ())
+      curr_lexer->looking_at_return_list = true;
     else
-      lexer_flags.looking_at_matrix_or_assign_lhs = true;
+      curr_lexer->looking_at_matrix_or_assign_lhs = true;
 
     promptflag--;
     eat_whitespace ();
 
-    lexer_flags.bracketflag++;
+    curr_lexer->bracketflag++;
     BEGIN (MATRIX_START);
     COUNT_TOK_AND_RETURN ('[');
   }
@@ -584,12 +584,12 @@
 \] {
     LEXER_DEBUG ("\\]");
 
-    lexer_flags.nesting_level.remove ();
-
-    lexer_flags.looking_at_object_index.pop_front ();
-
-    lexer_flags.looking_for_object_index = true;
-    lexer_flags.at_beginning_of_statement = false;
+    curr_lexer->nesting_level.remove ();
+
+    curr_lexer->looking_at_object_index.pop_front ();
+
+    curr_lexer->looking_for_object_index = true;
+    curr_lexer->at_beginning_of_statement = false;
 
     TOK_RETURN (']');
   }
@@ -623,7 +623,7 @@
 %}
 
 {S}* {
-    lexer_flags.current_input_column += yyleng;
+    curr_lexer->current_input_column += yyleng;
   }
 
 %{
@@ -638,8 +638,8 @@
       gripe_matlab_incompatible_continuation ();
     scan_for_comments (yytext);
     promptflag--;
-    lexer_flags.input_line_number++;
-    lexer_flags.current_input_column = 1;
+    curr_lexer->input_line_number++;
+    curr_lexer->current_input_column = 1;
   }
 
 %{
@@ -649,14 +649,14 @@
 <<EOF>> {
     LEXER_DEBUG ("<<EOF>>");
 
-    if (lexer_flags.block_comment_nesting_level != 0)
+    if (curr_lexer->block_comment_nesting_level != 0)
       {
         warning ("block comment open at end of input");
 
         if ((reading_fcn_file || reading_script_file || reading_classdef_file)
             && ! curr_fcn_file_name.empty ())
           warning ("near line %d of file '%s.m'",
-                   lexer_flags.input_line_number, curr_fcn_file_name.c_str ());
+                   curr_lexer->input_line_number, curr_fcn_file_name.c_str ());
       }
 
     TOK_RETURN (END_OF_INPUT);
@@ -688,7 +688,7 @@
 
     if (id_tok >= 0)
       {
-        lexer_flags.looking_for_object_index = true;
+        curr_lexer->looking_for_object_index = true;
 
         COUNT_TOK_AND_RETURN (SUPERCLASSREF);
       }
@@ -706,7 +706,7 @@
 
     if (id_tok >= 0)
       {
-        lexer_flags.looking_for_object_index = true;
+        curr_lexer->looking_for_object_index = true;
 
         COUNT_TOK_AND_RETURN (METAQUERY);
       }
@@ -719,13 +719,13 @@
 "@" {
     LEXER_DEBUG ("@");
 
-    lexer_flags.current_input_column++;
-
-    lexer_flags.quote_is_transpose = false;
-    lexer_flags.convert_spaces_to_comma = false;
-    lexer_flags.looking_at_function_handle++;
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = false;
+    curr_lexer->current_input_column++;
+
+    curr_lexer->quote_is_transpose = false;
+    curr_lexer->convert_spaces_to_comma = false;
+    curr_lexer->looking_at_function_handle++;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = false;
 
     COUNT_TOK_AND_RETURN ('@');
 
@@ -740,23 +740,23 @@
 {NL} {
     LEXER_DEBUG ("{NL}");
 
-    lexer_flags.input_line_number++;
-    lexer_flags.current_input_column = 1;
-
-    lexer_flags.quote_is_transpose = false;
-    lexer_flags.convert_spaces_to_comma = true;
-
-    if (lexer_flags.nesting_level.none ())
+    curr_lexer->input_line_number++;
+    curr_lexer->current_input_column = 1;
+
+    curr_lexer->quote_is_transpose = false;
+    curr_lexer->convert_spaces_to_comma = true;
+
+    if (curr_lexer->nesting_level.none ())
       {
-        lexer_flags.at_beginning_of_statement = true;
+        curr_lexer->at_beginning_of_statement = true;
         COUNT_TOK_AND_RETURN ('\n');
       }
-    else if (lexer_flags.nesting_level.is_paren ())
+    else if (curr_lexer->nesting_level.is_paren ())
       {
-        lexer_flags.at_beginning_of_statement = false;
+        curr_lexer->at_beginning_of_statement = false;
         gripe_matlab_incompatible ("bare newline inside parentheses");
       }
-    else if (lexer_flags.nesting_level.is_bracket_or_brace ())
+    else if (curr_lexer->nesting_level.is_bracket_or_brace ())
       return LEXICAL_ERROR;
   }
 
@@ -768,10 +768,10 @@
 "'" {
     LEXER_DEBUG ("'");
 
-    lexer_flags.current_input_column++;
-    lexer_flags.convert_spaces_to_comma = true;
-
-    if (lexer_flags.quote_is_transpose)
+    curr_lexer->current_input_column++;
+    curr_lexer->convert_spaces_to_comma = true;
+
+    if (curr_lexer->quote_is_transpose)
       {
         do_comma_insert_check ();
         COUNT_TOK_AND_RETURN (QUOTE);
@@ -790,7 +790,7 @@
 \" {
     LEXER_DEBUG ("\"");
 
-    lexer_flags.current_input_column++;
+    curr_lexer->current_input_column++;
     int tok = handle_string ('"');
 
     COUNT_TOK_AND_RETURN (tok);
@@ -803,7 +803,7 @@
 {CCHAR} {
     LEXER_DEBUG ("{CCHAR}");
 
-    lexer_flags.looking_for_object_index = false;
+    curr_lexer->looking_for_object_index = false;
 
     xunput (yytext[0], yytext);
 
@@ -823,11 +823,11 @@
 ^{S}*{CCHAR}\{{S}*{NL} {
     LEXER_DEBUG ("^{S}*{CCHAR}\\{{S}*{NL}");
 
-    lexer_flags.looking_for_object_index = false;
-
-    lexer_flags.input_line_number++;
-    lexer_flags.current_input_column = 1;
-    lexer_flags.block_comment_nesting_level++;
+    curr_lexer->looking_for_object_index = false;
+
+    curr_lexer->input_line_number++;
+    curr_lexer->current_input_column = 1;
+    curr_lexer->block_comment_nesting_level++;
     promptflag--;
 
     bool eof = false;
@@ -865,7 +865,7 @@
 "/"     { LEXER_DEBUG ("/"); BIN_OP_RETURN ('/', false, false); }
 "\\"    { LEXER_DEBUG ("\\"); BIN_OP_RETURN (LEFTDIV, false, false); }
 ";"     { LEXER_DEBUG (";"); BIN_OP_RETURN (';', true, true); }
-","     { LEXER_DEBUG (","); BIN_OP_RETURN (',', true, ! lexer_flags.looking_at_object_index.front ()); }
+","     { LEXER_DEBUG (","); BIN_OP_RETURN (',', true, ! curr_lexer->looking_at_object_index.front ()); }
 "^"     { LEXER_DEBUG ("^"); BIN_OP_RETURN (POW, false, false); }
 "**"    { LEXER_DEBUG ("**"); XBIN_OP_RETURN (POW, false, false); }
 "="     { LEXER_DEBUG ("="); BIN_OP_RETURN ('=', true, false); }
@@ -891,14 +891,14 @@
     // is current (so that we can pop it off the stack when we find
     // the matching close paren).
 
-    lexer_flags.looking_at_object_index.push_front
-      (lexer_flags.looking_for_object_index);
-
-    lexer_flags.looking_at_indirect_ref = false;
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = false;
-
-    lexer_flags.nesting_level.paren ();
+    curr_lexer->looking_at_object_index.push_front
+      (curr_lexer->looking_for_object_index);
+
+    curr_lexer->looking_at_indirect_ref = false;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = false;
+
+    curr_lexer->nesting_level.paren ();
     promptflag--;
 
     TOK_RETURN ('(');
@@ -907,20 +907,20 @@
 ")" {
     LEXER_DEBUG (")");
 
-    lexer_flags.nesting_level.remove ();
-    lexer_flags.current_input_column++;
-
-    lexer_flags.looking_at_object_index.pop_front ();
-
-    lexer_flags.quote_is_transpose = true;
-    lexer_flags.convert_spaces_to_comma
-      = (lexer_flags.nesting_level.is_bracket_or_brace ()
-         && ! lexer_flags.looking_at_anon_fcn_args);
-    lexer_flags.looking_for_object_index = true;
-    lexer_flags.at_beginning_of_statement = false;
-
-    if (lexer_flags.looking_at_anon_fcn_args)
-      lexer_flags.looking_at_anon_fcn_args = false;
+    curr_lexer->nesting_level.remove ();
+    curr_lexer->current_input_column++;
+
+    curr_lexer->looking_at_object_index.pop_front ();
+
+    curr_lexer->quote_is_transpose = true;
+    curr_lexer->convert_spaces_to_comma
+      = (curr_lexer->nesting_level.is_bracket_or_brace ()
+         && ! curr_lexer->looking_at_anon_fcn_args);
+    curr_lexer->looking_for_object_index = true;
+    curr_lexer->at_beginning_of_statement = false;
+
+    if (curr_lexer->looking_at_anon_fcn_args)
+      curr_lexer->looking_at_anon_fcn_args = false;
 
     do_comma_insert_check ();
 
@@ -930,8 +930,8 @@
 "." {
     LEXER_DEBUG (".");
 
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = false;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = false;
 
     TOK_RETURN ('.');
   }
@@ -956,21 +956,21 @@
 \{{S}* {
     LEXER_DEBUG ("\\{{S}*");
 
-    lexer_flags.nesting_level.brace ();
-
-    lexer_flags.looking_at_object_index.push_front
-      (lexer_flags.looking_for_object_index);
-
-    lexer_flags.current_input_column += yyleng;
-    lexer_flags.quote_is_transpose = false;
-    lexer_flags.convert_spaces_to_comma = true;
-    lexer_flags.looking_for_object_index = false;
-    lexer_flags.at_beginning_of_statement = false;
+    curr_lexer->nesting_level.brace ();
+
+    curr_lexer->looking_at_object_index.push_front
+      (curr_lexer->looking_for_object_index);
+
+    curr_lexer->current_input_column += yyleng;
+    curr_lexer->quote_is_transpose = false;
+    curr_lexer->convert_spaces_to_comma = true;
+    curr_lexer->looking_for_object_index = false;
+    curr_lexer->at_beginning_of_statement = false;
 
     promptflag--;
     eat_whitespace ();
 
-    lexer_flags.braceflag++;
+    curr_lexer->braceflag++;
     BEGIN (MATRIX_START);
     COUNT_TOK_AND_RETURN ('{');
   }
@@ -978,12 +978,12 @@
 "}" {
     LEXER_DEBUG ("}");
 
-    lexer_flags.looking_at_object_index.pop_front ();
-
-    lexer_flags.looking_for_object_index = true;
-    lexer_flags.at_beginning_of_statement = false;
-
-    lexer_flags.nesting_level.remove ();
+    curr_lexer->looking_at_object_index.pop_front ();
+
+    curr_lexer->looking_for_object_index = true;
+    curr_lexer->at_beginning_of_statement = false;
+
+    curr_lexer->nesting_level.remove ();
 
     TOK_RETURN ('}');
   }
@@ -1001,11 +1001,11 @@
 
     if (c != EOF)
       {
-        lexer_flags.current_input_column++;
+        curr_lexer->current_input_column++;
 
         error ("invalid character '%s' (ASCII %d) near line %d, column %d",
                undo_string_escape (static_cast<char> (c)), c,
-               lexer_flags.input_line_number, lexer_flags.current_input_column);
+               curr_lexer->input_line_number, curr_lexer->current_input_column);
 
         return LEXICAL_ERROR;
       }
@@ -1032,8 +1032,8 @@
   if (spc_gobbled)
     xunput (' ', yytext);
 
-  lexer_flags.do_comma_insert = (! lexer_flags.looking_at_object_index.front ()
-                                 && lexer_flags.bracketflag && c == '[');
+  curr_lexer->do_comma_insert = (! curr_lexer->looking_at_object_index.front ()
+                                 && curr_lexer->bracketflag && c == '[');
 }
 
 // Fix things up for errors or interrupts.  The parser is never called
@@ -1074,9 +1074,6 @@
   // Clear the buffer for help text.
   while (! help_buf.empty ())
     help_buf.pop ();
-
-  // Reset other flags.
-  lexer_flags = lexical_feedback ();
 }
 
 static void
@@ -1258,7 +1255,7 @@
     }
 
   if (c == '\n')
-    lexer_flags.input_line_number++;
+    curr_lexer->input_line_number++;
 
   return c;
 }
@@ -1274,7 +1271,7 @@
     }
 
   if (c == '\n')
-    lexer_flags.input_line_number--;
+    curr_lexer->input_line_number--;
 
   yyunput (c, buf);
 }
@@ -1290,11 +1287,11 @@
     {
       if (c == '\n')
         {
-          lexer_flags.input_line_number++;
-          lexer_flags.current_input_column = 1;
+          curr_lexer->input_line_number++;
+          curr_lexer->current_input_column = 1;
         }
       else
-        lexer_flags.current_input_column++;
+        curr_lexer->current_input_column++;
     }
 }
 
@@ -1379,8 +1376,8 @@
 {
   bool retval = false;
 
-  for (std::list<bool>::const_iterator i = lexer_flags.looking_at_object_index.begin ();
-       i != lexer_flags.looking_at_object_index.end (); i++)
+  for (std::list<bool>::const_iterator i = curr_lexer->looking_at_object_index.begin ();
+       i != curr_lexer->looking_at_object_index.end (); i++)
     {
       if (*i)
         {
@@ -1397,8 +1394,8 @@
 static int
 is_keyword_token (const std::string& s)
 {
-  int l = lexer_flags.input_line_number;
-  int c = lexer_flags.current_input_column;
+  int l = curr_lexer->input_line_number;
+  int c = curr_lexer->current_input_column;
 
   int len = s.length ();
 
@@ -1417,7 +1414,7 @@
         case otherwise_kw:
         case return_kw:
         case unwind_protect_cleanup_kw:
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case static_kw:
@@ -1426,12 +1423,12 @@
               && ! curr_fcn_file_full_name.empty ())
             warning_with_id ("Octave:deprecated-keyword",
                              "the 'static' keyword is obsolete and will be removed from a future version of Octave; please use 'persistent' instead; near line %d of file '%s'",
-                             lexer_flags.input_line_number,
+                             curr_lexer->input_line_number,
                              curr_fcn_file_full_name.c_str ());
           else
             warning_with_id ("Octave:deprecated-keyword",
                              "the 'static' keyword is obsolete and will be removed from a future version of Octave; please use 'persistent' instead; near line %d",
-                             lexer_flags.input_line_number);
+                             curr_lexer->input_line_number);
           // fall through ...
 
         case persistent_kw:
@@ -1446,78 +1443,78 @@
         case end_kw:
           if (inside_any_object_index ()
               || (! reading_classdef_file
-                  && (lexer_flags.defining_func
-                      && ! (lexer_flags.looking_at_return_list
-                            || lexer_flags.parsed_function_name.top ()))))
+                  && (curr_lexer->defining_func
+                      && ! (curr_lexer->looking_at_return_list
+                            || curr_lexer->parsed_function_name.top ()))))
             return 0;
 
           yylval.tok_val = new token (token::simple_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case end_try_catch_kw:
           yylval.tok_val = new token (token::try_catch_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case end_unwind_protect_kw:
           yylval.tok_val = new token (token::unwind_protect_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endfor_kw:
           yylval.tok_val = new token (token::for_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endfunction_kw:
           yylval.tok_val = new token (token::function_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endif_kw:
           yylval.tok_val = new token (token::if_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endparfor_kw:
           yylval.tok_val = new token (token::parfor_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endswitch_kw:
           yylval.tok_val = new token (token::switch_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endwhile_kw:
           yylval.tok_val = new token (token::while_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endclassdef_kw:
           yylval.tok_val = new token (token::classdef_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endenumeration_kw:
           yylval.tok_val = new token (token::enumeration_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endevents_kw:
           yylval.tok_val = new token (token::events_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endmethods_kw:
           yylval.tok_val = new token (token::methods_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
         case endproperties_kw:
           yylval.tok_val = new token (token::properties_end, l, c);
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           break;
 
 
@@ -1525,18 +1522,18 @@
         case parfor_kw:
         case while_kw:
           promptflag--;
-          lexer_flags.looping++;
+          curr_lexer->looping++;
           break;
 
         case do_kw:
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           promptflag--;
-          lexer_flags.looping++;
+          curr_lexer->looping++;
           break;
 
         case try_kw:
         case unwind_protect_kw:
-          lexer_flags.at_beginning_of_statement = true;
+          curr_lexer->at_beginning_of_statement = true;
           promptflag--;
           break;
 
@@ -1549,7 +1546,7 @@
         case set_kw:
           // 'get' and 'set' are keywords in classdef method
           // declarations.
-          if (! lexer_flags.maybe_classdef_get_set_method)
+          if (! curr_lexer->maybe_classdef_get_set_method)
             return 0;
           break;
 
@@ -1559,7 +1556,7 @@
         case properties_kw:
           // 'properties', 'methods' and 'events' are keywords for
           // classdef blocks.
-          if (! lexer_flags.parsing_classdef)
+          if (! curr_lexer->parsing_classdef)
             return 0;
           // fall through ...
 
@@ -1571,12 +1568,12 @@
         case function_kw:
           promptflag--;
 
-          lexer_flags.defining_func++;
-          lexer_flags.parsed_function_name.push (false);
+          curr_lexer->defining_func++;
+          curr_lexer->parsed_function_name.push (false);
 
           if (! (reading_fcn_file || reading_script_file
                  || reading_classdef_file))
-            lexer_flags.input_line_number = 1;
+            curr_lexer->input_line_number = 1;
           break;
 
         case magic_file_kw:
@@ -1613,8 +1610,8 @@
 is_variable (const std::string& name)
 {
   return (symbol_table::is_variable (name)
-          || (lexer_flags.pending_local_variables.find (name)
-              != lexer_flags.pending_local_variables.end ()));
+          || (curr_lexer->pending_local_variables.find (name)
+              != curr_lexer->pending_local_variables.end ()));
 }
 
 static std::string
@@ -1631,7 +1628,7 @@
 
   while ((c = reader.getc ()) != EOF)
     {
-      lexer_flags.current_input_column++;
+      curr_lexer->current_input_column++;
 
       if (look_for_marker)
         {
@@ -1648,7 +1645,7 @@
 
               while ((c = reader.getc ()) != EOF && ! done)
                 {
-                  lexer_flags.current_input_column++;
+                  curr_lexer->current_input_column++;
 
                   switch (c)
                     {
@@ -1659,21 +1656,21 @@
 
                     case '\n':
                       {
-                        lexer_flags.current_input_column = 0;
+                        curr_lexer->current_input_column = 0;
                         at_bol = true;
                         done = true;
 
                         if (type == '{')
                           {
-                            lexer_flags.block_comment_nesting_level++;
+                            curr_lexer->block_comment_nesting_level++;
                             promptflag--;
                           }
                         else
                           {
-                            lexer_flags.block_comment_nesting_level--;
+                            curr_lexer->block_comment_nesting_level--;
                             promptflag++;
 
-                            if (lexer_flags.block_comment_nesting_level == 0)
+                            if (curr_lexer->block_comment_nesting_level == 0)
                               {
                                 buf += grab_comment_block (reader, true, eof);
 
@@ -1711,7 +1708,7 @@
 
           if (c == '\n')
             {
-              lexer_flags.current_input_column = 0;
+              curr_lexer->current_input_column = 0;
               at_bol = true;
             }
         }
@@ -1741,7 +1738,7 @@
 
   while ((c = reader.getc ()) != EOF)
     {
-      lexer_flags.current_input_column++;
+      curr_lexer->current_input_column++;
 
       if (begin_comment)
         {
@@ -1758,7 +1755,7 @@
 
               while ((c = reader.getc ()) != EOF && ! done)
                 {
-                  lexer_flags.current_input_column++;
+                  curr_lexer->current_input_column++;
 
                   switch (c)
                     {
@@ -1769,11 +1766,11 @@
 
                     case '\n':
                       {
-                        lexer_flags.current_input_column = 0;
+                        curr_lexer->current_input_column = 0;
                         at_bol = true;
                         done = true;
 
-                        lexer_flags.block_comment_nesting_level++;
+                        curr_lexer->block_comment_nesting_level++;
                         promptflag--;
 
                         buf += grab_block_comment (reader, eof);
@@ -1808,7 +1805,7 @@
           if (c == '\n')
             {
               at_bol = true;
-              lexer_flags.current_input_column = 0;
+              curr_lexer->current_input_column = 0;
               in_comment = false;
 
               // FIXME -- bailing out here prevents things like
@@ -1848,7 +1845,7 @@
               break;
 
             default:
-              lexer_flags.current_input_column--;
+              curr_lexer->current_input_column--;
               reader.ungetc (c);
               goto done;
             }
@@ -1905,7 +1902,7 @@
   if (lexer_debug_flag)
     std::cerr << "C: " << txt << std::endl;
 
-  if (help_txt.empty () && lexer_flags.nesting_level.none ())
+  if (help_txt.empty () && curr_lexer->nesting_level.none ())
     {
       if (! help_buf.empty ())
         help_buf.pop ();
@@ -1915,17 +1912,17 @@
 
   octave_comment_buffer::append (txt);
 
-  lexer_flags.current_input_column = 1;
-  lexer_flags.quote_is_transpose = false;
-  lexer_flags.convert_spaces_to_comma = true;
-  lexer_flags.at_beginning_of_statement = true;
+  curr_lexer->current_input_column = 1;
+  curr_lexer->quote_is_transpose = false;
+  curr_lexer->convert_spaces_to_comma = true;
+  curr_lexer->at_beginning_of_statement = true;
 
   if (YY_START == COMMAND_START)
     BEGIN (INITIAL);
 
-  if (lexer_flags.nesting_level.none ())
+  if (curr_lexer->nesting_level.none ())
     return '\n';
-  else if (lexer_flags.nesting_level.is_bracket_or_brace ())
+  else if (curr_lexer->nesting_level.is_bracket_or_brace ())
     return ';';
   else
     return 0;
@@ -2220,7 +2217,7 @@
 
   while ((c = text_yyinput ()) != EOF)
     {
-      lexer_flags.current_input_column++;
+      curr_lexer->current_input_column++;
 
       switch (c)
         {
@@ -2244,7 +2241,7 @@
               in_comment = false;
               beginning_of_comment = false;
             }
-          lexer_flags.current_input_column = 0;
+          curr_lexer->current_input_column = 0;
           break;
 
         case '#':
@@ -2309,7 +2306,7 @@
 
  done:
   xunput (c, yytext);
-  lexer_flags.current_input_column--;
+  curr_lexer->current_input_column--;
   return retval;
 }
 
@@ -2351,17 +2348,17 @@
 
   assert (nread == 1);
 
-  lexer_flags.quote_is_transpose = true;
-  lexer_flags.convert_spaces_to_comma = true;
-  lexer_flags.looking_for_object_index = false;
-  lexer_flags.at_beginning_of_statement = false;
-
-  yylval.tok_val = new token (value, yytext, lexer_flags.input_line_number,
-                              lexer_flags.current_input_column);
+  curr_lexer->quote_is_transpose = true;
+  curr_lexer->convert_spaces_to_comma = true;
+  curr_lexer->looking_for_object_index = false;
+  curr_lexer->at_beginning_of_statement = false;
+
+  yylval.tok_val = new token (value, yytext, curr_lexer->input_line_number,
+                              curr_lexer->current_input_column);
 
   token_stack.push (yylval.tok_val);
 
-  lexer_flags.current_input_column += yyleng;
+  curr_lexer->current_input_column += yyleng;
 
   do_comma_insert_check ();
 }
@@ -2430,7 +2427,7 @@
               comment_buf += static_cast<char> (c);
               octave_comment_buffer::append (comment_buf);
             }
-          lexer_flags.current_input_column = 0;
+          curr_lexer->current_input_column = 0;
           promptflag--;
           gripe_matlab_incompatible_continuation ();
           return true;
@@ -2510,15 +2507,15 @@
 {
   std::ostringstream buf;
 
-  int bos_line = lexer_flags.input_line_number;
-  int bos_col = lexer_flags.current_input_column;
+  int bos_line = curr_lexer->input_line_number;
+  int bos_col = curr_lexer->current_input_column;
 
   int c;
   int escape_pending = 0;
 
   while ((c = text_yyinput ()) != EOF)
     {
-      lexer_flags.current_input_column++;
+      curr_lexer->current_input_column++;
 
       if (c == '\\')
         {
@@ -2570,8 +2567,8 @@
                   else
                     s = do_string_escapes (buf.str ());
 
-                  lexer_flags.quote_is_transpose = true;
-                  lexer_flags.convert_spaces_to_comma = true;
+                  curr_lexer->quote_is_transpose = true;
+                  curr_lexer->convert_spaces_to_comma = true;
 
                   yylval.tok_val = new token (s, bos_line, bos_col);
                   token_stack.push (yylval.tok_val);
@@ -2581,8 +2578,8 @@
                   else if (delim == '\'')
                     gripe_single_quote_string ();
 
-                  lexer_flags.looking_for_object_index = true;
-                  lexer_flags.at_beginning_of_statement = false;
+                  curr_lexer->looking_for_object_index = true;
+                  curr_lexer->at_beginning_of_statement = false;
 
                   return delim == '"' ? DQ_STRING : SQ_STRING;
                 }
@@ -2696,32 +2693,32 @@
 {
   int retval = bracket_type;
 
-  if (! lexer_flags.nesting_level.none ())
+  if (! curr_lexer->nesting_level.none ())
     {
-      lexer_flags.nesting_level.remove ();
+      curr_lexer->nesting_level.remove ();
 
       if (bracket_type == ']')
-        lexer_flags.bracketflag--;
+        curr_lexer->bracketflag--;
       else if (bracket_type == '}')
-        lexer_flags.braceflag--;
+        curr_lexer->braceflag--;
       else
         panic_impossible ();
     }
 
-  if (lexer_flags.bracketflag == 0 && lexer_flags.braceflag == 0)
+  if (curr_lexer->bracketflag == 0 && curr_lexer->braceflag == 0)
     BEGIN (INITIAL);
 
   if (bracket_type == ']'
       && next_token_is_assign_op ()
-      && ! lexer_flags.looking_at_return_list)
+      && ! curr_lexer->looking_at_return_list)
     {
       retval = CLOSE_BRACE;
     }
-  else if ((lexer_flags.bracketflag || lexer_flags.braceflag)
-           && lexer_flags.convert_spaces_to_comma
-           && (lexer_flags.nesting_level.is_bracket ()
-               || (lexer_flags.nesting_level.is_brace ()
-                   && ! lexer_flags.looking_at_object_index.front ())))
+  else if ((curr_lexer->bracketflag || curr_lexer->braceflag)
+           && curr_lexer->convert_spaces_to_comma
+           && (curr_lexer->nesting_level.is_bracket ()
+               || (curr_lexer->nesting_level.is_brace ()
+                   && ! curr_lexer->looking_at_object_index.front ())))
     {
       bool index_op = next_token_is_index_op ();
 
@@ -2751,8 +2748,8 @@
         }
     }
 
-  lexer_flags.quote_is_transpose = true;
-  lexer_flags.convert_spaces_to_comma = true;
+  curr_lexer->quote_is_transpose = true;
+  curr_lexer->convert_spaces_to_comma = true;
 
   return retval;
 }
@@ -2760,9 +2757,9 @@
 static void
 maybe_unput_comma (int spc_gobbled)
 {
-  if (lexer_flags.nesting_level.is_bracket ()
-      || (lexer_flags.nesting_level.is_brace ()
-          && ! lexer_flags.looking_at_object_index.front ()))
+  if (curr_lexer->nesting_level.is_bracket ()
+      || (curr_lexer->nesting_level.is_brace ()
+          && ! curr_lexer->looking_at_object_index.front ()))
     {
       int bin_op = next_token_is_bin_op (spc_gobbled);
 
@@ -3090,12 +3087,12 @@
     = new token (meth.empty () ? 0 : &(symbol_table::insert (meth)),
                  cls.empty () ? 0 : &(symbol_table::insert (cls)),
                  pkg.empty () ? 0 : &(symbol_table::insert (pkg)),
-                 lexer_flags.input_line_number,
-                 lexer_flags.current_input_column);
+                 curr_lexer->input_line_number,
+                 curr_lexer->current_input_column);
   token_stack.push (yylval.tok_val);
 
-  lexer_flags.convert_spaces_to_comma = true;
-  lexer_flags.current_input_column += yyleng;
+  curr_lexer->convert_spaces_to_comma = true;
+  curr_lexer->current_input_column += yyleng;
 
   return SUPERCLASSREF;
 }
@@ -3125,13 +3122,13 @@
   yylval.tok_val
     = new token (cls.empty () ? 0 : &(symbol_table::insert (cls)),
                  pkg.empty () ? 0 : &(symbol_table::insert (pkg)),
-                 lexer_flags.input_line_number,
-                 lexer_flags.current_input_column);
+                 curr_lexer->input_line_number,
+                 curr_lexer->current_input_column);
 
   token_stack.push (yylval.tok_val);
 
-  lexer_flags.convert_spaces_to_comma = true;
-  lexer_flags.current_input_column += yyleng;
+  curr_lexer->convert_spaces_to_comma = true;
+  curr_lexer->current_input_column += yyleng;
 
   return METAQUERY;
 }
@@ -3143,7 +3140,7 @@
 static int
 handle_identifier (void)
 {
-  bool at_bos = lexer_flags.at_beginning_of_statement;
+  bool at_bos = curr_lexer->at_beginning_of_statement;
 
   std::string tok = strip_trailing_whitespace (yytext);
 
@@ -3158,30 +3155,30 @@
   // a string that is also a valid identifier.  But first, we have to
   // decide whether to insert a comma.
 
-  if (lexer_flags.looking_at_indirect_ref)
+  if (curr_lexer->looking_at_indirect_ref)
     {
       do_comma_insert_check ();
 
       maybe_unput_comma (spc_gobbled);
 
-      yylval.tok_val = new token (tok, lexer_flags.input_line_number,
-                                  lexer_flags.current_input_column);
+      yylval.tok_val = new token (tok, curr_lexer->input_line_number,
+                                  curr_lexer->current_input_column);
 
       token_stack.push (yylval.tok_val);
 
-      lexer_flags.quote_is_transpose = true;
-      lexer_flags.convert_spaces_to_comma = true;
-      lexer_flags.looking_for_object_index = true;
-
-      lexer_flags.current_input_column += yyleng;
+      curr_lexer->quote_is_transpose = true;
+      curr_lexer->convert_spaces_to_comma = true;
+      curr_lexer->looking_for_object_index = true;
+
+      curr_lexer->current_input_column += yyleng;
 
       return STRUCT_ELT;
     }
 
-  lexer_flags.at_beginning_of_statement = false;
+  curr_lexer->at_beginning_of_statement = false;
 
   // The is_keyword_token may reset
-  // lexer_flags.at_beginning_of_statement.  For example, if it sees
+  // curr_lexer->at_beginning_of_statement.  For example, if it sees
   // an else token, then the next token is at the beginning of a
   // statement.
 
@@ -3191,7 +3188,7 @@
   // is already set.  Otherwise, we won't be at the beginning of a
   // statement.
 
-  if (lexer_flags.looking_at_function_handle)
+  if (curr_lexer->looking_at_function_handle)
     {
       if (kw_token)
         {
@@ -3201,15 +3198,15 @@
         }
       else
         {
-          yylval.tok_val = new token (tok, lexer_flags.input_line_number,
-                                      lexer_flags.current_input_column);
+          yylval.tok_val = new token (tok, curr_lexer->input_line_number,
+                                      curr_lexer->current_input_column);
 
           token_stack.push (yylval.tok_val);
 
-          lexer_flags.current_input_column += yyleng;
-          lexer_flags.quote_is_transpose = false;
-          lexer_flags.convert_spaces_to_comma = true;
-          lexer_flags.looking_for_object_index = true;
+          curr_lexer->current_input_column += yyleng;
+          curr_lexer->quote_is_transpose = false;
+          curr_lexer->convert_spaces_to_comma = true;
+          curr_lexer->looking_for_object_index = true;
 
           return FCN_HANDLE;
         }
@@ -3222,10 +3219,10 @@
     {
       if (kw_token >= 0)
         {
-          lexer_flags.current_input_column += yyleng;
-          lexer_flags.quote_is_transpose = false;
-          lexer_flags.convert_spaces_to_comma = true;
-          lexer_flags.looking_for_object_index = false;
+          curr_lexer->current_input_column += yyleng;
+          curr_lexer->quote_is_transpose = false;
+          curr_lexer->convert_spaces_to_comma = true;
+          curr_lexer->looking_for_object_index = false;
         }
 
       return kw_token;
@@ -3265,16 +3262,16 @@
           BEGIN (COMMAND_START);
         }
       else if (next_tok_is_eq
-               || lexer_flags.looking_at_decl_list
-               || lexer_flags.looking_at_return_list
-               || (lexer_flags.looking_at_parameter_list
-                   && ! lexer_flags.looking_at_initializer_expression))
+               || curr_lexer->looking_at_decl_list
+               || curr_lexer->looking_at_return_list
+               || (curr_lexer->looking_at_parameter_list
+                   && ! curr_lexer->looking_at_initializer_expression))
         {
           symbol_table::force_variable (tok);
         }
-      else if (lexer_flags.looking_at_matrix_or_assign_lhs)
+      else if (curr_lexer->looking_at_matrix_or_assign_lhs)
         {
-          lexer_flags.pending_local_variables.insert (tok);
+          curr_lexer->pending_local_variables.insert (tok);
         }
     }
 
@@ -3285,29 +3282,29 @@
     tok = "__end__";
 
   yylval.tok_val = new token (&(symbol_table::insert (tok)),
-                              lexer_flags.input_line_number,
-                              lexer_flags.current_input_column);
+                              curr_lexer->input_line_number,
+                              curr_lexer->current_input_column);
 
   token_stack.push (yylval.tok_val);
 
   // After seeing an identifer, it is ok to convert spaces to a comma
   // (if needed).
 
-  lexer_flags.convert_spaces_to_comma = true;
+  curr_lexer->convert_spaces_to_comma = true;
 
   if (! (next_tok_is_eq || YY_START == COMMAND_START))
     {
-      lexer_flags.quote_is_transpose = true;
+      curr_lexer->quote_is_transpose = true;
 
       do_comma_insert_check ();
 
       maybe_unput_comma (spc_gobbled);
     }
 
-  lexer_flags.current_input_column += yyleng;
+  curr_lexer->current_input_column += yyleng;
 
   if (tok != "__end__")
-    lexer_flags.looking_for_object_index = true;
+    curr_lexer->looking_for_object_index = true;
 
   return NAME;
 }
@@ -3466,11 +3463,11 @@
   if (nm.empty ())
     warning_with_id ("Octave:separator-insert",
                      "potential auto-insertion of '%c' near line %d",
-                     sep, lexer_flags.input_line_number);
+                     sep, curr_lexer->input_line_number);
   else
     warning_with_id ("Octave:separator-insert",
                      "potential auto-insertion of '%c' near line %d of file %s",
-                     sep, lexer_flags.input_line_number, nm.c_str ());
+                     sep, curr_lexer->input_line_number, nm.c_str ());
 }
 
 static void
@@ -3481,11 +3478,11 @@
   if (nm.empty ())
     warning_with_id ("Octave:single-quote-string",
                      "single quote delimited string near line %d",
-                     lexer_flags.input_line_number);
+                     curr_lexer->input_line_number);
   else
     warning_with_id ("Octave:single-quote-string",
                      "single quote delimited string near line %d of file %s",
-                     lexer_flags.input_line_number, nm.c_str ());
+                     curr_lexer->input_line_number, nm.c_str ());
 }
 
 static void
@@ -3500,7 +3497,7 @@
   else
     warning_with_id ("Octave:matlab-incompatible",
                      "potential Matlab compatibility problem: %s near line %d offile %s",
-                     msg.c_str (), lexer_flags.input_line_number, nm.c_str ());
+                     msg.c_str (), curr_lexer->input_line_number, nm.c_str ());
 }
 
 static void