summaryrefslogtreecommitdiff
path: root/Zend/zend_language_parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_language_parser.y')
-rw-r--r--Zend/zend_language_parser.y12
1 files changed, 8 insertions, 4 deletions
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index c995e5fd4d..7682d69b68 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -252,7 +252,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
%type <ast> ctor_arguments alt_if_stmt_without_else trait_adaptation_list lexical_vars
%type <ast> lexical_var_list encaps_list array_pair_list non_empty_array_pair_list
%type <ast> assignment_list unkeyed_assignment_list keyed_assignment_list
-%type <ast> isset_variable type return_type
+%type <ast> isset_variable type return_type type_expr
%type <ast> identifier
%type <num> returns_ref function is_reference is_variadic variable_modifiers
@@ -644,7 +644,12 @@ parameter:
optional_type:
/* empty */ { $$ = NULL; }
- | type { $$ = $1; }
+ | type_expr { $$ = $1; }
+;
+
+type_expr:
+ type { $$ = $1; }
+ | '?' type { $$ = $2; $$->attr |= ZEND_TYPE_NULLABLE; }
;
type:
@@ -655,8 +660,7 @@ type:
return_type:
/* empty */ { $$ = NULL; }
- | ':' type { $$ = $2; }
- | ':' '?' type { $$ = $3; $$->attr |= ZEND_TYPE_NULLABLE; }
+ | ':' type_expr { $$ = $2; }
;
argument_list: