diff src/parse.y @ 3929:cc8ae49d6e79

[project @ 2002-05-04 02:47:14 by jwe]
author jwe
date Sat, 04 May 2002 02:47:14 +0000
parents e8627dc4bdf2
children 61d4427c016e
line wrap: on
line diff
--- a/src/parse.y
+++ b/src/parse.y
@@ -280,7 +280,8 @@
 
 // Make an index expression.
 static tree_index_expression *
-make_index_expression (tree_expression *expr, tree_argument_list *args);
+make_index_expression (tree_expression *expr, tree_argument_list *args,
+		       tree_index_expression::type);
 
 // Make an indirect reference expression.
 static tree_indirect_ref *
@@ -311,6 +312,11 @@
     { \
       global_command = 0; \
       yyerrok; \
+      if (symtab_context) \
+        { \
+	  curr_sym_tab = symtab_context; \
+	  symtab_context = 0; \
+        } \
       if (interactive || forced_interactive) \
 	YYACCEPT; \
       else \
@@ -691,11 +697,25 @@
 postfix_expr	: primary_expr
 		  { $$ = $1; }
 		| postfix_expr '(' ')'
-		  { $$ = make_index_expression ($1, 0); }
+		  {
+		    $$ = make_index_expression ($1, 0,
+						tree_index_expression::paren);
+		  }
 		| postfix_expr '(' arg_list ')'
-		  { $$ = make_index_expression ($1, $3); }
+		  {
+		    $$ = make_index_expression ($1, $3,
+						tree_index_expression::paren);
+		  }
+		| postfix_expr '{' '}'
+		  {
+		    $$ = make_index_expression ($1, 0,
+						tree_index_expression::brace);
+		  }
 		| postfix_expr '{' arg_list '}'
-		  { $$ = make_index_expression ($1, $3); }
+		  {
+		    $$ = make_index_expression ($1, $3,
+						tree_index_expression::brace);
+		  }
 		| postfix_expr PLUS_PLUS
 		  { $$ = make_postfix_op (PLUS_PLUS, $1, $2); }
 		| postfix_expr MINUS_MINUS
@@ -832,7 +852,10 @@
 		;
 
 word_list_cmd	: identifier word_list
-		  { $$ = make_index_expression ($1, $2); }
+		  {
+		    $$ = make_index_expression ($1, $2,
+						tree_index_expression::paren);
+		  }
 		;
 
 word_list	: TEXT
@@ -2567,7 +2590,8 @@
 // Make an index expression.
 
 static tree_index_expression *
-make_index_expression (tree_expression *expr, tree_argument_list *args)
+make_index_expression (tree_expression *expr, tree_argument_list *args,
+		       tree_index_expression::type t)
 {
   tree_index_expression *retval = 0;
 
@@ -2576,7 +2600,7 @@
 
   expr->mark_postfix_indexed ();
 
-  retval =  new tree_index_expression (expr, args, l, c);
+  retval =  new tree_index_expression (expr, args, l, c, t);
 
   return retval;
 }