Skip to content

Commit 6d2b344

Browse files
committed
Allow root compound patterns without parens
1 parent 2a3d393 commit 6d2b344

File tree

3 files changed

+17
-15
lines changed

3 files changed

+17
-15
lines changed

Zend/tests/pattern_matching/is/and.phpt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ interface B {}
88
interface C {}
99
class Foo implements A, B {}
1010

11-
var_dump(1 is (int&1));
12-
var_dump(2 is (int&(1|2)));
13-
var_dump(3 is (float&1));
14-
var_dump(4 is (int&float));
15-
var_dump([] is ([]&[...]));
16-
var_dump('foo' is (string&'bar'));
17-
var_dump(new Foo() is (A&B));
11+
var_dump(1 is int & 1);
12+
var_dump(2 is int & (1|2));
13+
var_dump(3 is float & 1);
14+
var_dump(4 is int & float);
15+
var_dump([] is [] & [...]);
16+
var_dump('foo' is string & 'bar');
17+
var_dump(new Foo() is A&B);
1818
var_dump(new Foo() is (A&C));
1919

2020
?>

Zend/tests/pattern_matching/is/or.phpt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ Or pattern
33
--FILE--
44
<?php
55

6-
var_dump(1 is (1|2|3));
7-
var_dump(2 is (1|2|3));
8-
var_dump(3 is (1|2|3));
9-
var_dump(4 is (1|2|3));
10-
var_dump(null is (1|2|3));
11-
var_dump([] is (1|2|3));
6+
var_dump(1 is 1|2|3);
7+
var_dump(2 is 1|2|3);
8+
var_dump(3 is 1|2|3);
9+
var_dump(4 is 1|2|3);
10+
var_dump(null is 1|2|3);
11+
var_dump([] is 1|2|3);
1212
var_dump('hello world' is (1|2|3));
13+
var_dump('hello world' is 1|2|3 === false);
1314

1415
?>
1516
--EXPECT--
@@ -20,3 +21,4 @@ bool(false)
2021
bool(false)
2122
bool(false)
2223
bool(false)
24+
bool(true)

Zend/zend_language_parser.y

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
5252
%destructor { if ($$) zend_string_release_ex($$, 0); } <str>
5353

5454
%precedence T_THROW
55+
%precedence T_IS
5556
%precedence PREC_ARROW_FUNCTION
5657
%precedence T_INCLUDE T_INCLUDE_ONCE T_REQUIRE T_REQUIRE_ONCE
5758
%left T_LOGICAL_OR
@@ -80,7 +81,6 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
8081
%precedence '~' T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@'
8182
%right T_POW
8283
%precedence T_CLONE
83-
%precedence T_IS
8484

8585
/* Resolve danging else conflict */
8686
%precedence T_NOELSE
@@ -1276,7 +1276,7 @@ expr:
12761276
| attributes T_STATIC inline_function
12771277
{ $$ = zend_ast_with_attributes($3, $1); ((zend_ast_decl *) $$)->flags |= ZEND_ACC_STATIC; }
12781278
| match { $$ = $1; }
1279-
| expr T_IS atomic_pattern { $$ = zend_ast_create(ZEND_AST_IS, $1, $3); }
1279+
| expr T_IS pattern { $$ = zend_ast_create(ZEND_AST_IS, $1, $3); }
12801280
;
12811281

12821282
pattern:

0 commit comments

Comments
 (0)