From 25d57aace3384426c182fc7f460b0dd5f330c6b0 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 29 Aug 2014 18:51:58 +0200 Subject: [PATCH] Introduce optional_expr --- Zend/zend_language_parser.y | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 8c5bcbdd34..d841e5e44f 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -227,7 +227,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %type top_statement namespace_name name statement function_declaration_statement %type class_declaration_statement use_declaration const_decl inner_statement -%type expr while_statement for_statement foreach_variable +%type expr optional_expr while_statement for_statement foreach_variable %type foreach_statement declare_statement finally_statement unset_variable variable %type extends_from parameter optional_type argument expr_without_variable global_var %type static_var class_statement trait_adaptation trait_precedence trait_alias @@ -235,7 +235,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %type new_expr class_name class_name_reference simple_variable internal_functions_in_yacc %type exit_expr scalar backticks_expr lexical_var function_call member_name %type variable_class_name dereferencable_scalar class_name_scalar constant dereferencable -%type callable_expr callable_variable dim_offset static_member new_variable +%type callable_expr callable_variable static_member new_variable %type assignment_list_element array_pair encaps_var encaps_var_offset isset_variables %type isset_variable @@ -359,12 +359,9 @@ statement: { $$ = zend_ast_create(ZEND_AST_FOR, $3, $5, $7, $9); } | T_SWITCH '(' expr ')' switch_case_list { $$ = zend_ast_create(ZEND_AST_SWITCH, $3, $5); } - | T_BREAK ';' { $$ = zend_ast_create(ZEND_AST_BREAK, NULL); } - | T_BREAK expr ';' { $$ = zend_ast_create(ZEND_AST_BREAK, $2); } - | T_CONTINUE ';' { $$ = zend_ast_create(ZEND_AST_CONTINUE, NULL); } - | T_CONTINUE expr ';' { $$ = zend_ast_create(ZEND_AST_CONTINUE, $2); } - | T_RETURN ';' { $$ = zend_ast_create(ZEND_AST_RETURN, NULL); } - | T_RETURN expr ';' { $$ = zend_ast_create(ZEND_AST_RETURN, $2); } + | T_BREAK optional_expr ';' { $$ = zend_ast_create(ZEND_AST_BREAK, $2); } + | T_CONTINUE optional_expr ';' { $$ = zend_ast_create(ZEND_AST_CONTINUE, $2); } + | T_RETURN optional_expr ';' { $$ = zend_ast_create(ZEND_AST_RETURN, $2); } | T_GLOBAL global_var_list ';' { $$ = $2; } | T_STATIC static_var_list ';' { $$ = $2; } | T_ECHO echo_expr_list ';' { $$ = $2; } @@ -929,9 +926,8 @@ class_name_reference: ; exit_expr: - /* empty */ { $$ = NULL; } - | '(' ')' { $$ = NULL; } - | '(' expr ')' { $$ = $2; } + /* empty */ { $$ = NULL; } + | '(' optional_expr ')' { $$ = $2; } ; backticks_expr: @@ -993,6 +989,11 @@ expr: | expr_without_variable { $$ = $1; } ; +optional_expr: + /* empty */ { $$ = NULL; } + | expr { $$ = $1; } +; + variable_class_name: dereferencable { $$ = $1; } ; @@ -1012,9 +1013,9 @@ callable_expr: callable_variable: simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $1); } - | dereferencable '[' dim_offset ']' + | dereferencable '[' optional_expr ']' { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } - | constant '[' dim_offset ']' + | constant '[' optional_expr ']' { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } | dereferencable '{' expr '}' { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } @@ -1051,7 +1052,7 @@ static_member: new_variable: simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $1); } - | new_variable '[' dim_offset ']' + | new_variable '[' optional_expr ']' { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } | new_variable '{' expr '}' { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } @@ -1063,11 +1064,6 @@ new_variable: { $$ = zend_ast_create(ZEND_AST_STATIC_PROP, $1, $3); } ; -dim_offset: - /* empty */ { $$ = NULL; } - | expr { $$ = $1; } -; - member_name: T_STRING { $$ = $1; } | '{' expr '}' { $$ = $2; } -- 2.40.0