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