Skip to content

Commit a0052ba

Browse files
committed
Range operator implementation php#2
1 parent baf97b1 commit a0052ba

13 files changed

+3393
-3100
lines changed

Zend/zend_ast.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ ZEND_API void zend_ast_apply(zend_ast *ast, zend_ast_apply_func fn) {
538538
* 140 left |
539539
* 150 left ^
540540
* 160 left &
541-
* 170 non-associative == != === !==
541+
* 170 non-associative == != === !== |>
542542
* 180 non-associative < <= > >= <=>
543543
* 190 left << >>
544544
* 200 left + - .
@@ -1323,6 +1323,7 @@ static void zend_ast_export_ex(smart_str *str, zend_ast *ast, int priority, int
13231323
case ZEND_IS_NOT_IDENTICAL: BINARY_OP(" !== ", 170, 171, 171);
13241324
case ZEND_IS_EQUAL: BINARY_OP(" == ", 170, 171, 171);
13251325
case ZEND_IS_NOT_EQUAL: BINARY_OP(" != ", 170, 171, 171);
1326+
case ZEND_RANGE: BINARY_OP(" |> ", 170, 171, 171);
13261327
case ZEND_IS_SMALLER: BINARY_OP(" < ", 180, 181, 181);
13271328
case ZEND_IS_SMALLER_OR_EQUAL: BINARY_OP(" <= ", 180, 181, 181);
13281329
case ZEND_POW: BINARY_OP(" ** ", 250, 251, 250);

Zend/zend_language_parser.y

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
6969
%left '|'
7070
%left '^'
7171
%left '&'
72-
%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP
72+
%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP T_RANGE
7373
%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
7474
%left T_SL T_SR
7575
%left '+' '-' '.'
@@ -221,6 +221,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
221221
%token T_COALESCE "?? (T_COALESCE)"
222222
%token T_POW "** (T_POW)"
223223
%token T_POW_EQUAL "**= (T_POW_EQUAL)"
224+
%token T_RANGE "|> (T_RANGE)"
224225

225226
/* Token used to force a parse error from the lexer */
226227
%token T_ERROR
@@ -932,6 +933,8 @@ expr_without_variable:
932933
{ $$ = zend_ast_create(ZEND_AST_GREATER_EQUAL, $1, $3); }
933934
| expr T_SPACESHIP expr
934935
{ $$ = zend_ast_create_binary_op(ZEND_SPACESHIP, $1, $3); }
936+
| expr T_RANGE expr
937+
{ $$ = zend_ast_create_binary_op(ZEND_RANGE, $1, $3); }
935938
| expr T_INSTANCEOF class_name_reference
936939
{ $$ = zend_ast_create(ZEND_AST_INSTANCEOF, $1, $3); }
937940
| '(' expr ')' { $$ = $2; }

0 commit comments

Comments
 (0)