# HG changeset patch # User John W. Eaton # Date 1364066955 14400 # Node ID e1dcd834751f3536c4e9de8a692389b3d2ef1679 # Parent 11115c237231d356aeb9bc0e14f71582ec616e83 and foo NUMBER as command syntax (bug #38565) * lex.ll ({NUMBER}{Im}, {D}+/\.[\*/\\^\']|{NUMBER}): Handle possible command syntax. diff -r 11115c237231 -r e1dcd834751f libinterp/parse-tree/lex.ll --- a/libinterp/parse-tree/lex.ll Sat Mar 23 15:02:29 2013 -0400 +++ b/libinterp/parse-tree/lex.ll Sat Mar 23 15:29:15 2013 -0400 @@ -564,20 +564,29 @@ {NUMBER}{Im} { curr_lexer->lexer_debug ("{NUMBER}{Im}"); - int tok = curr_lexer->previous_token_value (); - - if (curr_lexer->whitespace_is_significant () - && curr_lexer->space_follows_previous_token () - && ! (tok == '[' || tok == '{' - || curr_lexer->previous_token_is_binop ())) + if (curr_lexer->previous_token_may_be_command () + && curr_lexer->space_follows_previous_token ()) { yyless (0); - unput (','); + curr_lexer->push_start_state (COMMAND_START); } else { - curr_lexer->handle_number (); - return curr_lexer->count_token_internal (IMAG_NUM); + int tok = curr_lexer->previous_token_value (); + + if (curr_lexer->whitespace_is_significant () + && curr_lexer->space_follows_previous_token () + && ! (tok == '[' || tok == '{' + || curr_lexer->previous_token_is_binop ())) + { + yyless (0); + unput (','); + } + else + { + curr_lexer->handle_number (); + return curr_lexer->count_token_internal (IMAG_NUM); + } } } @@ -590,21 +599,30 @@ {NUMBER} { curr_lexer->lexer_debug ("{D}+/\\.[\\*/\\^\\']|{NUMBER}"); - int tok = curr_lexer->previous_token_value (); - - if (curr_lexer->whitespace_is_significant () - && curr_lexer->space_follows_previous_token () - && ! (tok == '[' || tok == '{' - || curr_lexer->previous_token_is_binop ())) - { - yyless (0); - unput (','); - } - else - { - curr_lexer->handle_number (); - return curr_lexer->count_token_internal (NUM); - } + if (curr_lexer->previous_token_may_be_command () + && curr_lexer->space_follows_previous_token ()) + { + yyless (0); + curr_lexer->push_start_state (COMMAND_START); + } + else + { + int tok = curr_lexer->previous_token_value (); + + if (curr_lexer->whitespace_is_significant () + && curr_lexer->space_follows_previous_token () + && ! (tok == '[' || tok == '{' + || curr_lexer->previous_token_is_binop ())) + { + yyless (0); + unput (','); + } + else + { + curr_lexer->handle_number (); + return curr_lexer->count_token_internal (NUM); + } + } } %{