Skip to content

Commit 876ec3b

Browse files
rlerdorfdantleech
authored andcommitted
Better property hook fix and add a test
1 parent b191811 commit 876ec3b

File tree

3 files changed

+377
-480
lines changed

3 files changed

+377
-480
lines changed

src/Parser.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3199,6 +3199,14 @@ private function parsePostfixExpressionRest($expression, $allowUpdateExpression
31993199

32003200
if ($tokenKind === TokenKind::OpenBraceToken ||
32013201
$tokenKind === TokenKind::OpenBracketToken) {
3202+
// Property hooks: don't parse `{` after certain expression types
3203+
// as those are property hook lists, not subscript expressions
3204+
if ($tokenKind === TokenKind::OpenBraceToken &&
3205+
($expression instanceof StringLiteral ||
3206+
$expression instanceof ArrayCreationExpression ||
3207+
$expression instanceof ObjectCreationExpression)) {
3208+
return $expression;
3209+
}
32023210
$expression = $this->parseSubscriptExpression($expression);
32033211
return $this->parsePostfixExpressionRest($expression);
32043212
}
Lines changed: 1 addition & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1 @@
1-
[
2-
{
3-
"kind": 0,
4-
"message": "'}' expected.",
5-
"start": 158,
6-
"length": 0
7-
},
8-
{
9-
"kind": 0,
10-
"message": "'}' expected.",
11-
"start": 158,
12-
"length": 0
13-
},
14-
{
15-
"kind": 0,
16-
"message": "';' expected.",
17-
"start": 158,
18-
"length": 0
19-
},
20-
{
21-
"kind": 0,
22-
"message": "'}' expected.",
23-
"start": 158,
24-
"length": 0
25-
},
26-
{
27-
"kind": 0,
28-
"message": "Unexpected '}'",
29-
"start": 214,
30-
"length": 1
31-
},
32-
{
33-
"kind": 0,
34-
"message": "')' expected.",
35-
"start": 234,
36-
"length": 0
37-
},
38-
{
39-
"kind": 0,
40-
"message": "';' expected.",
41-
"start": 234,
42-
"length": 0
43-
},
44-
{
45-
"kind": 0,
46-
"message": "';' expected.",
47-
"start": 241,
48-
"length": 0
49-
},
50-
{
51-
"kind": 0,
52-
"message": "Unexpected ')'",
53-
"start": 241,
54-
"length": 1
55-
},
56-
{
57-
"kind": 0,
58-
"message": "Unexpected '}'",
59-
"start": 326,
60-
"length": 1
61-
},
62-
{
63-
"kind": 0,
64-
"message": "Unexpected '}'",
65-
"start": 328,
66-
"length": 1
67-
}
68-
]
1+
[]

0 commit comments

Comments
 (0)