@@ -629,8 +629,12 @@ interface_declaration_statement:
629
629
T_INTERFACE { $<num>$ = CG(zend_lineno); }
630
630
T_STRING interface_extends_list backup_doc_comment ' {' class_statement_list ' }'
631
631
{ $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_INTERFACE, $<num>2 , $5 , zend_ast_get_str($3 ), NULL , $4 , $7 , NULL , NULL ); }
632
+ | T_INTERFACE { $<num>$ = CG(zend_lineno); }
633
+ T_STRING interface_extends_list backup_doc_comment ' [' array_statement_list ' ]'
634
+ { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_INTERFACE, $<num>2 , $4 , zend_ast_get_str($2 ), NULL , $3 , $6 , NULL , NULL ); }
632
635
;
633
636
637
+
634
638
enum_declaration_statement :
635
639
T_ENUM { $<num>$ = CG(zend_lineno); }
636
640
T_STRING enum_backing_type implements_list backup_doc_comment ' {' class_statement_list ' }'
@@ -850,12 +854,18 @@ intersection_type:
850
854
* to avoid conflicts with "static" modifier for properties. */
851
855
852
856
type_expr_without_static :
853
- type_without_static { $$ = $1 ; }
857
+ type_without_static { $$ = $1 ; }
854
858
| ' ?' type_without_static { $$ = $2 ; $$ ->attr |= ZEND_TYPE_NULLABLE; }
855
859
| union_type_without_static { $$ = $1 ; }
856
860
| intersection_type_without_static { $$ = $1 ; }
857
861
;
858
862
863
+ type_expr_without_static_or_nullable :
864
+ type_without_static { $$ = $1 ; }
865
+ | union_type_without_static { $$ = $1 ; }
866
+ | intersection_type_without_static { $$ = $1 ; }
867
+ ;
868
+
859
869
type_without_static :
860
870
T_ARRAY { $$ = zend_ast_create_ex(ZEND_AST_TYPE, IS_ARRAY); }
861
871
| T_CALLABLE { $$ = zend_ast_create_ex(ZEND_AST_TYPE, IS_CALLABLE); }
@@ -934,6 +944,19 @@ class_statement_list:
934
944
{ $$ = zend_ast_create_list(0 , ZEND_AST_STMT_LIST); }
935
945
;
936
946
947
+ array_statement_list :
948
+ %empty
949
+ { $$ = zend_ast_create_list(0 , ZEND_AST_ARRAY); }
950
+ | typed_array_element
951
+ { $$ = zend_ast_create_list(1 , ZEND_AST_ARRAY, $1 ); }
952
+ | array_statement_list ' ,' typed_array_element
953
+ { $$ = zend_ast_list_add($1 , $3 ); }
954
+ ;
955
+
956
+ typed_array_element :
957
+ T_STRING T_DOUBLE_ARROW type_expr_without_static
958
+ { $$ = zend_ast_create(ZEND_AST_ARRAY_ELEM, $3 , zend_ast_zval_create_string($1 )); }
959
+ ;
937
960
938
961
attributed_class_statement :
939
962
property_modifiers optional_type_without_static property_list ' ;'
@@ -1221,6 +1244,10 @@ expr:
1221
1244
{ $$ = zend_ast_create_binary_op(ZEND_SPACESHIP, $1 , $3 ); }
1222
1245
| expr T_INSTANCEOF class_name_reference
1223
1246
{ $$ = zend_ast_create(ZEND_AST_INSTANCEOF, $1 , $3 ); }
1247
+ | type_without_static expr
1248
+ { $$ = zend_ast_create(ZEND_AST_CAST, $2 , $4 ); }
1249
+ | ' (' type_expr_without_static_or_nullable ' )' expr
1250
+ { $$ = zend_ast_create(ZEND_AST_CAST, $2 , $4 ); }
1224
1251
| ' (' expr ' )' {
1225
1252
$$ = $2 ;
1226
1253
if ($$ ->kind == ZEND_AST_CONDITIONAL) $$ ->attr = ZEND_PARENTHESIZED_CONDITIONAL;
0 commit comments