@@ -70,7 +70,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
70
70
%left ' ^'
71
71
%left T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG
72
72
%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP
73
- %nonassoc ' <' T_IS_SMALLER_OR_EQUAL ' >' T_IS_GREATER_OR_EQUAL
73
+ %nonassoc ' <' T_IS_SMALLER_OR_EQUAL ' >' T_IS_GREATER_OR_EQUAL T_THIN_ARROW_LEFT
74
74
%left ' .'
75
75
%left T_SL T_SR
76
76
%left ' +' ' -'
@@ -216,6 +216,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
216
216
%token T_OBJECT_OPERATOR " '->'"
217
217
%token T_NULLSAFE_OBJECT_OPERATOR " '?->'"
218
218
%token T_DOUBLE_ARROW " '=>'"
219
+ %token T_THIN_ARROW_LEFT " '<-'"
219
220
%token T_COMMENT " comment"
220
221
%token T_DOC_COMMENT " doc comment"
221
222
%token T_OPEN_TAG " open tag"
@@ -739,7 +740,8 @@ match_arm_cond_list:
739
740
740
741
match_arm_body :
741
742
expr { $$ = $1 ; }
742
- | ' {' inner_statement_list optional_expr ' }' { $$ = zend_ast_create(ZEND_AST_MATCH_ARM_BLOCK, $2 , $3 ); }
743
+ | ' {' inner_statement_list ' }' { $$ = zend_ast_create(ZEND_AST_MATCH_ARM_BLOCK, $2 , NULL ); }
744
+ | ' {' inner_statement_list T_THIN_ARROW_LEFT optional_expr ' ;' ' }' { $$ = zend_ast_create(ZEND_AST_MATCH_ARM_BLOCK, $2 , $4 ); }
743
745
;
744
746
745
747
while_statement :
@@ -1215,6 +1217,9 @@ expr:
1215
1217
{ $$ = zend_ast_create_binary_op(ZEND_IS_NOT_EQUAL, $1 , $3 ); }
1216
1218
| expr ' <' expr
1217
1219
{ $$ = zend_ast_create_binary_op(ZEND_IS_SMALLER, $1 , $3 ); }
1220
+ /* BC for $foo<-$bar */
1221
+ | expr T_THIN_ARROW_LEFT expr
1222
+ { $$ = zend_ast_create_binary_op(ZEND_IS_SMALLER, $1 , zend_ast_create(ZEND_AST_UNARY_MINUS, $3 )); }
1218
1223
| expr T_IS_SMALLER_OR_EQUAL expr
1219
1224
{ $$ = zend_ast_create_binary_op(ZEND_IS_SMALLER_OR_EQUAL, $1 , $3 ); }
1220
1225
| expr ' >' expr
0 commit comments