From 3d7882246fd52e1c01817406d2bec7c459d05c8f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Sat, 6 Nov 1999 00:21:29 +0100
Subject: [PATCH] Split off F_COMMA_EXPR from F_ARG_LIST.

Rev: src/docode.c:1.53
Rev: src/language.yacc:1.130
Rev: src/program.c:1.171
---
 src/docode.c      |  4 +++-
 src/language.yacc | 33 +++++++++++++++++++--------------
 src/program.c     |  6 +++---
 3 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/src/docode.c b/src/docode.c
index ca659ed41a..70cc4c0e5e 100644
--- a/src/docode.c
+++ b/src/docode.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: docode.c,v 1.52 1999/09/19 18:31:33 grubba Exp $");
+RCSID("$Id: docode.c,v 1.53 1999/11/05 23:21:26 grubba Exp $");
 #include "las.h"
 #include "program.h"
 #include "language.h"
@@ -223,6 +223,7 @@ static int do_docode2(node *n,int flags)
       case F_INDEX:
       case F_ARROW:
       case F_ARG_LIST:
+      case F_COMMA_EXPR:
       case F_EXTERNAL:
 	  break;
       }
@@ -779,6 +780,7 @@ static int do_docode2(node *n,int flags)
       return 1;
     }
 
+  case F_COMMA_EXPR:
   case F_ARG_LIST:
     tmp1=do_docode(CAR(n),flags & ~WANT_LVALUE);
     tmp1+=do_docode(CDR(n),flags);
diff --git a/src/language.yacc b/src/language.yacc
index 9d2e178dd0..fdd1e1f1e4 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -94,6 +94,7 @@
 %token F_ADD_EQ
 %token F_AND_EQ
 %token F_ARG_LIST
+%token F_COMMA_EXPR
 %token F_ARRAY_ID
 %token F_BREAK
 %token F_CASE
@@ -182,7 +183,7 @@
 /* This is the grammar definition of Pike. */
 
 #include "global.h"
-RCSID("$Id: language.yacc,v 1.129 1999/11/04 02:35:30 grubba Exp $");
+RCSID("$Id: language.yacc,v 1.130 1999/11/05 23:21:27 grubba Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -525,7 +526,7 @@ constant_name: F_IDENTIFIER '=' safe_expr0
 
     /* Ugly hack to make sure that $3 is optimized */
     tmp=compiler_pass;
-    $3=mknode(F_ARG_LIST,$3,0);
+    $3=mknode(F_COMMA_EXPR,$3,0);
     compiler_pass=tmp;
 
     if(!is_const($3))
@@ -570,7 +571,7 @@ constant: modifiers F_CONSTANT constant_list ';' {}
 
 block_or_semi: block
   {
-    $$ = mknode(F_ARG_LIST,$1,mknode(F_RETURN,mkintnode(0),0));
+    $$ = mknode(F_COMMA_EXPR,$1,mknode(F_RETURN,mkintnode(0),0));
   }
   | ';' { $$ = NULL;}
   ;
@@ -665,8 +666,8 @@ def: modifiers type_or_error optional_stars F_IDENTIFIER
       if(recoveries && sp-evaluator_stack < recoveries->sp)
 	fatal("Stack error (underflow)\n");
 
-	if(compiler_pass == 1 && f!=$<number>5)
-	  fatal("define_function screwed up! %d != %d\n",f,$<number>5);
+      if(compiler_pass == 1 && f!=$<number>5)
+	fatal("define_function screwed up! %d != %d\n",f,$<number>5);
 #endif
     }
     pop_compiler_frame();
@@ -1024,7 +1025,7 @@ new_name: optional_stars F_IDENTIFIER
   }
   expr0
   {
-    init_node=mknode(F_ARG_LIST,init_node,
+    init_node=mknode(F_COMMA_EXPR,init_node,
 		     mkcastnode(void_type_string,
 				mknode(F_ASSIGN,$5,
 				       mkidentifiernode($<number>4))));
@@ -1139,7 +1140,7 @@ local_name_list2: new_local_name2
 statements: { $$=0; }
   | statements statement
   {
-    $$=mknode(F_ARG_LIST,$1,mkcastnode(void_type_string,$2));
+    $$=mknode(F_COMMA_EXPR,$1,mkcastnode(void_type_string,$2));
   }
   ;
 
@@ -1201,7 +1202,7 @@ lambda: F_LAMBDA
     int f,e;
     struct pike_string *name;
     
-    $4=mknode(F_ARG_LIST,$4,mknode(F_RETURN,mkintnode(0),0));
+    $4=mknode(F_COMMA_EXPR,$4,mknode(F_RETURN,mkintnode(0),0));
     type=find_return_type($4);
 
     if(type)
@@ -1427,7 +1428,8 @@ for: F_FOR
   {
     int i=lex.current_line;
     lex.current_line=$1;
-    $$=mknode(F_ARG_LIST,mkcastnode(void_type_string,$4),mknode(F_FOR,$6,mknode(':',$10,$8)));
+    $$=mknode(F_COMMA_EXPR, mkcastnode(void_type_string,$4),
+	      mknode(F_FOR,$6,mknode(':',$10,$8)));
     lex.current_line=i;
     pop_local_variables($<number>2);
   }
@@ -1477,7 +1479,7 @@ case: F_CASE safe_comma_expr expected_colon
 expected_colon: ':'
   | F_LEX_EOF
   {
-    yyerror("Missing ';'.");
+    yyerror("Missing ':'.");
     yyerror("Unexpected end of file.");
   }
   ;
@@ -1520,7 +1522,7 @@ comma_expr: comma_expr2
 comma_expr2: expr0
   | comma_expr2 ',' expr0
   {
-    $$ = mknode(F_ARG_LIST,mkcastnode(void_type_string,$1),$3); 
+    $$ = mknode(F_COMMA_EXPR,mkcastnode(void_type_string,$1),$3); 
   }
   ;
 
@@ -1868,7 +1870,7 @@ gauge: F_GAUGE catch_arg
     $$=mkefuncallnode("abs",
 		  mkopernode("`/", 
 			     mkopernode("`-", mkefuncallnode("gethrvtime",0),
-					mknode(F_ARG_LIST,$2,
+					mknode(F_COMMA_EXPR,$2,
 					       mkefuncallnode("gethrvtime",0))),
 			     mkfloatnode((FLOAT_TYPE)1000000.0)));
 #else
@@ -1877,7 +1879,7 @@ gauge: F_GAUGE catch_arg
 		mkopernode("`-",
 			 mknode(F_INDEX,mkefuncallnode("rusage",0),
 				mkintnode(GAUGE_RUSAGE_INDEX)),
-		         mknode(F_ARG_LIST,$2,
+		         mknode(F_COMMA_EXPR,$2,
 				mknode(F_INDEX,mkefuncallnode("rusage",0),
 				       mkintnode(GAUGE_RUSAGE_INDEX)))),
 		mkfloatnode((FLOAT_TYPE)1000.0)));
@@ -1888,7 +1890,10 @@ typeof: F_TYPEOF '(' expr0 ')'
   {
     struct pike_string *s;
     node *tmp;
-    tmp=mknode(F_ARG_LIST,$3,0);
+
+    /* FIXME: Why build the node at all? */
+
+    tmp=mknode(F_COMMA_EXPR,$3,0);
 
     s=describe_type( tmp && CAR(tmp) && CAR(tmp)->type ? CAR(tmp)->type : mixed_type_string);
     $$=mkstrnode(s);
diff --git a/src/program.c b/src/program.c
index 1c51f365f1..c571f9cf43 100644
--- a/src/program.c
+++ b/src/program.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: program.c,v 1.170 1999/11/04 02:35:28 grubba Exp $");
+RCSID("$Id: program.c,v 1.171 1999/11/05 23:21:29 grubba Exp $");
 #include "program.h"
 #include "object.h"
 #include "dynamic_buffer.h"
@@ -1034,7 +1034,7 @@ struct program *end_first_pass(int finish)
     id=low_reference_inherited_identifier(0, e, s, SEE_STATIC);
     if(id!=-1)
     {
-      init_node=mknode(F_ARG_LIST,
+      init_node=mknode(F_COMMA_EXPR,
 		       mkcastnode(void_type_string,
 				  mkapplynode(mkidentifiernode(id),0)),
 		       init_node);
@@ -1050,7 +1050,7 @@ struct program *end_first_pass(int finish)
   {
     union idptr tmp;
     e=dooptcode(s,
-		mknode(F_ARG_LIST,
+		mknode(F_COMMA_EXPR,
 		       init_node,mknode(F_RETURN,mkintnode(0),0)),
 		function_type_string,
 		ID_STATIC);
-- 
GitLab