@@ -293,13 +293,16 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
293293%type <ast> optional_parameter_list
294294%type <ast> generic_type_parameter_list
295295%type <ast> generic_type_parameters
296+ %type <ast> generic_type
297+ %type <ast> non_empty_generic_type_parameters
296298
297299%type <num> returns_ref function fn is_reference is_variadic property_modifiers property_hook_modifiers
298300%type <num> method_modifiers class_const_modifiers member_modifier optional_cpp_modifiers
299301%type <num> class_modifiers class_modifier anonymous_class_modifiers anonymous_class_modifiers_optional use_type backup_fn_flags
300302
301303%type <ptr> backup_lex_pos
302304%type <str> backup_doc_comment
305+ %type <str> generic_param_name
303306
304307%type <ident> reserved_non_modifiers semi_reserved
305308
@@ -617,8 +620,17 @@ generic_type_parameters:
617620;
618621
619622generic_type_parameter_list :
620- T_STRING { $$ = zend_ast_create_list(1 , ZEND_AST_GENERIC_TYPE_PARAM_LIST, $1 ); }
621- | generic_type_parameter_list ' ,' T_STRING { $$ = zend_ast_list_add($1 , $3 ); }
623+ generic_type { $$ = zend_ast_create_list(1 , ZEND_AST_GENERIC_TYPE_PARAM_LIST, $1 ); }
624+ | generic_type_parameter_list ' ,' generic_type { $$ = zend_ast_list_add($1 , $3 ); }
625+ ;
626+
627+ non_empty_generic_type_parameters :
628+ T_GENERIC_START generic_type_parameter_list possible_comma T_GENERIC_END { $$ = $2 ; }
629+ ;
630+
631+ generic_type :
632+ T_STRING { $$ = zend_ast_create_zval_from_str(zend_ast_get_str($1 )); }
633+ | T_STRING non_empty_generic_type_parameters { $$ = zend_ast_create(ZEND_AST_GENERIC_TYPE, zend_ast_create_zval_from_str(zend_ast_get_str($1 )), $2 ); }
622634;
623635
624636class_modifiers :
@@ -1378,6 +1390,10 @@ backup_doc_comment:
13781390 %empty { $$ = CG(doc_comment); CG(doc_comment) = NULL ; }
13791391;
13801392
1393+ generic_param_name :
1394+ %empty { $$ = CG(doc_comment); CG(doc_comment) = NULL ; }
1395+ ;
1396+
13811397backup_fn_flags :
13821398 %prec PREC_ARROW_FUNCTION %empty { $$ = CG(extra_fn_flags); CG(extra_fn_flags) = 0 ; }
13831399;
0 commit comments