Skip to content

Commit 3e67991

Browse files
authored
Access precedence (#911)
* Failing test for expression list * Fix access precedence
1 parent 65dca35 commit 3e67991

File tree

4 files changed

+11
-1
lines changed

4 files changed

+11
-1
lines changed

lib/Expression/NodeEvaluator/ArithmeticOperatorEvaluator.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public function evaluate(Evaluator $evaluator, Node $node, array $params): ?Node
2222
}
2323

2424
$leftValue = $evaluator->evaluateType($node->left(), NumberNode::class, $params);
25+
2526
$rightValue = $evaluator->evaluateType($node->right(), NumberNode::class, $params);
2627

2728
$value = $this->evaluateNode($node, $leftValue->value(), $rightValue->value());

lib/Expression/Parselet/ArrayAccessParselet.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ public function parse(Parser $parser, Node $left, Tokens $tokens): Node
2828

2929
public function precedence(): int
3030
{
31-
return Precedence::COMPARISON_EQUALITY;
31+
return Precedence::ACCESS;
3232
}
3333
}

lib/Expression/Precedence.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
final class Precedence
66
{
7+
public const ACCESS = 120;
78
public const AS = 110;
89
public const PRODUCT = 100;
910
public const SUM = 90;

tests/Unit/Expression/Parselet/ArithmeticOperatorParseletTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ public function provideEvaluate(): Generator
3434
yield ['1 + 2', [], '3'];
3535

3636
yield ['1 + 2 * 3 / 5 * 6 - 1', [], (string)(1 + 2 * 3 / 5 * 6 - 1)];
37+
38+
yield ['foo + foo', [
39+
'foo' => 1,
40+
], '2'];
41+
42+
yield ['foo[0] + foo[0] * foo[0]', [
43+
'foo' => [1],
44+
], '2'];
3745
}
3846

3947
/**

0 commit comments

Comments
 (0)