diff src/lex.l @ 4613:d1786f2d8a3c

[project @ 2003-11-14 22:46:19 by jwe]
author jwe
date Fri, 14 Nov 2003 22:46:19 +0000
parents d44675070f1a
children d95dd6ae89fd
line wrap: on
line diff
--- a/src/lex.l	Fri Nov 14 19:50:38 2003 +0000
+++ b/src/lex.l	Fri Nov 14 22:46:19 2003 +0000
@@ -754,7 +754,7 @@
     promptflag--;
     eat_whitespace ();
 
-    lexer_flags.bracketflag++;
+    lexer_flags.braceflag++;
     BEGIN (MATRIX_START);
     return '{';
   }
@@ -1508,6 +1508,18 @@
       un_op = (c1 == '\'');
       yyunput (c1, yytext);
     }
+  else if (c0 == '+')
+    {
+      int c1 = yyinput ();
+      un_op = (c1 == '+');
+      yyunput (c1, yytext);
+    }
+  else if (c0 == '-')
+    {
+      int c1 = yyinput ();
+      un_op = (c1 == '-');
+      yyunput (c1, yytext);
+    }
 
   yyunput (c0, yytext);
 
@@ -2234,10 +2246,16 @@
   if (! nesting_level.none ())
     {
       nesting_level.remove ();
-      lexer_flags.bracketflag--;
+
+      if (bracket_type == ']')
+	lexer_flags.bracketflag--;
+      else if (bracket_type == '}')
+	lexer_flags.braceflag--;
+      else
+	panic_impossible ();
     }
 
-  if (lexer_flags.bracketflag == 0)
+  if (lexer_flags.bracketflag == 0 && lexer_flags.braceflag == 0)
     BEGIN (INITIAL);
 
   if (bracket_type == ']'
@@ -2246,28 +2264,24 @@
     {
       retval = CLOSE_BRACE;
     }
-  else
+  else if ((lexer_flags.bracketflag || lexer_flags.braceflag)
+	   && lexer_flags.convert_spaces_to_comma
+	   && (nesting_level.is_bracket ()
+	       || (nesting_level.is_brace ()
+		   && ! lexer_flags.looking_at_object_index)))
     {
-      int c1 = yyinput ();
-      yyunput (c1, yytext);
-
-      if (lexer_flags.bracketflag)
+      int bin_op = next_token_is_bin_op (spc_gobbled);
+
+      int postfix_un_op = next_token_is_postfix_unary_op (spc_gobbled);
+
+      int sep_op = next_token_is_sep_op ();
+
+      if (! (postfix_un_op || bin_op || sep_op))
 	{
-	  int bin_op = next_token_is_bin_op (spc_gobbled);
-
-	  int postfix_un_op = next_token_is_postfix_unary_op (spc_gobbled);
-
-	  int sep_op = next_token_is_sep_op ();
-
-	  if (! (postfix_un_op || bin_op || sep_op)
-	      && nesting_level.is_bracket_or_brace ()
-	      && lexer_flags.convert_spaces_to_comma)
-	    {
-	      maybe_warn_separator_insert (',');
-
-	      yyunput (',', yytext);
-	      return retval;
-	    }
+	  maybe_warn_separator_insert (',');
+
+	  yyunput (',', yytext);
+	  return retval;
 	}
     }
 
@@ -2281,7 +2295,9 @@
 static void
 maybe_unput_comma (int spc_gobbled)
 {
-  if (nesting_level.is_bracket_or_brace ())
+  if (nesting_level.is_bracket ()
+      || (nesting_level.is_brace ()
+	  && ! lexer_flags.looking_at_object_index))
     {
       int bin_op = next_token_is_bin_op (spc_gobbled);
 
@@ -2499,6 +2515,9 @@
   // Not initially defining a matrix list.
   bracketflag = 0;
 
+  // Not initially defining a cell array list.
+  braceflag = 0;
+
   // Not initially inside a loop or if statement.
   looping = 0;