diff --git a/ChangeLog b/ChangeLog index a760fa5a33..786e9fc5aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,11 @@ Thu Jan 15 14:17:57 2009 Yukihiro Matsumoto * parse.y (stmt): explicit error for "Object::Far += foo 1" just as "Object::Far += 1". + * parse.y (command): moved return/break/next from command_call for + better error message. + + * parse.y (call_args): void value check added. + Thu Jan 15 13:10:58 2009 NAKAMURA Usaku * win32/Makefile.sub (COMPILERFLAG): for enc/trans/gb18030.c. diff --git a/parse.y b/parse.y index 2074cb6730..511568427c 100644 --- a/parse.y +++ b/parse.y @@ -1212,30 +1212,6 @@ expr_value : expr command_call : command | block_command - | keyword_return call_args - { - /*%%%*/ - $$ = NEW_RETURN(ret_args($2)); - /*% - $$ = dispatch1(return, $2); - %*/ - } - | keyword_break call_args - { - /*%%%*/ - $$ = NEW_BREAK(ret_args($2)); - /*% - $$ = dispatch1(break, $2); - %*/ - } - | keyword_next call_args - { - /*%%%*/ - $$ = NEW_NEXT(ret_args($2)); - /*% - $$ = dispatch1(next, $2); - %*/ - } ; block_command : block_call @@ -1362,6 +1338,30 @@ command : operation command_args %prec tLOWEST $$ = dispatch1(yield, $2); %*/ } + | keyword_return call_args + { + /*%%%*/ + $$ = NEW_RETURN(ret_args($2)); + /*% + $$ = dispatch1(return, $2); + %*/ + } + | keyword_break call_args + { + /*%%%*/ + $$ = NEW_BREAK(ret_args($2)); + /*% + $$ = dispatch1(break, $2); + %*/ + } + | keyword_next call_args + { + /*%%%*/ + $$ = NEW_NEXT(ret_args($2)); + /*% + $$ = dispatch1(next, $2); + %*/ + } ; mlhs : mlhs_basic @@ -2337,6 +2337,7 @@ opt_call_args : none call_args : command { /*%%%*/ + value_expr($1); $$ = NEW_LIST($1); /*% $$ = arg_add(arg_new(), $1);