diff src/parse.y @ 3933:f9ea3dcf58ee

[project @ 2002-05-15 03:21:00 by jwe]
author jwe
date Wed, 15 May 2002 03:21:01 +0000
parents 61d4427c016e
children 3dd8d3dc28d4
line wrap: on
line diff
--- a/src/parse.y	Tue May 07 18:10:44 2002 +0000
+++ b/src/parse.y	Wed May 15 03:21:01 2002 +0000
@@ -280,8 +280,8 @@
 
 // Make an index expression.
 static tree_index_expression *
-make_index_expression (tree_expression *expr, tree_argument_list *args,
-		       tree_index_expression::type);
+make_index_expression (tree_expression *expr,
+		       tree_argument_list *args, char type);
 
 // Make an indirect reference expression.
 static tree_index_expression *
@@ -697,25 +697,13 @@
 postfix_expr	: primary_expr
 		  { $$ = $1; }
 		| postfix_expr '(' ')'
-		  {
-		    $$ = make_index_expression ($1, 0,
-						tree_index_expression::paren);
-		  }
+		  { $$ = make_index_expression ($1, 0, '('); }
 		| postfix_expr '(' arg_list ')'
-		  {
-		    $$ = make_index_expression ($1, $3,
-						tree_index_expression::paren);
-		  }
+		  { $$ = make_index_expression ($1, $3, '('); }
 		| postfix_expr '{' '}'
-		  {
-		    $$ = make_index_expression ($1, 0,
-						tree_index_expression::brace);
-		  }
+		  { $$ = make_index_expression ($1, 0, '{'); }
 		| postfix_expr '{' arg_list '}'
-		  {
-		    $$ = make_index_expression ($1, $3,
-						tree_index_expression::brace);
-		  }
+		  { $$ = make_index_expression ($1, $3, '{'); }
 		| postfix_expr PLUS_PLUS
 		  { $$ = make_postfix_op (PLUS_PLUS, $1, $2); }
 		| postfix_expr MINUS_MINUS
@@ -852,10 +840,7 @@
 		;
 
 word_list_cmd	: identifier word_list
-		  {
-		    $$ = make_index_expression ($1, $2,
-						tree_index_expression::paren);
-		  }
+		  { $$ = make_index_expression ($1, $2, '('); }
 		;
 
 word_list	: TEXT
@@ -2591,7 +2576,7 @@
 
 static tree_index_expression *
 make_index_expression (tree_expression *expr, tree_argument_list *args,
-		       tree_index_expression::type t)
+		       char type)
 {
   tree_index_expression *retval = 0;
 
@@ -2600,7 +2585,16 @@
 
   expr->mark_postfix_indexed ();
 
-  retval =  new tree_index_expression (expr, args, l, c, t);
+  if (expr->is_index_expression ())
+    {
+      tree_index_expression *tmp = static_cast<tree_index_expression *> (expr);
+
+      tmp->append (args, type);
+
+      retval = tmp;
+    }
+  else
+    retval = new tree_index_expression (expr, args, l, c, type);
 
   return retval;
 }
@@ -2615,7 +2609,16 @@
   int l = expr->line ();
   int c = expr->column ();
 
-  retval = new tree_index_expression (expr, elt, l, c);
+  if (expr->is_index_expression ())
+    {
+      tree_index_expression *tmp = static_cast<tree_index_expression *> (expr);
+
+      tmp->append (elt);
+
+      retval = tmp;
+    }
+  else
+    retval = new tree_index_expression (expr, elt, l, c);
 
   lexer_flags.looking_at_indirect_ref = false;