mirror of
https://github.com/twigphp/Twig.git
synced 2026-08-25 04:56:26 +00:00
bug #4731 Fix spread operator behavior (fabpot)
This PR was merged into the 3.x branch.
Discussion
----------
Fix spread operator behavior
Closes #4637
Commits
-------
2376bbaf3e Fix spread operator behavior
This commit is contained in:
@@ -33,6 +33,7 @@ final class UnaryOperatorExpressionParser extends AbstractExpressionParser imple
|
||||
private ?PrecedenceChange $precedenceChange = null,
|
||||
private ?string $description = null,
|
||||
private array $aliases = [],
|
||||
private ?int $operandPrecedence = null,
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -41,7 +42,7 @@ final class UnaryOperatorExpressionParser extends AbstractExpressionParser imple
|
||||
*/
|
||||
public function parse(Parser $parser, Token $token): AbstractExpression
|
||||
{
|
||||
return new ($this->nodeClass)($parser->parseExpression($this->precedence), $token->getLine());
|
||||
return new ($this->nodeClass)($parser->parseExpression($this->operandPrecedence ?? $this->precedence), $token->getLine());
|
||||
}
|
||||
|
||||
public function getName(): string
|
||||
|
||||
@@ -333,7 +333,7 @@ final class CoreExtension extends AbstractExtension
|
||||
return [
|
||||
// unary operators
|
||||
new UnaryOperatorExpressionParser(NotUnary::class, 'not', 50, new PrecedenceChange('twig/twig', '3.15', 70)),
|
||||
new UnaryOperatorExpressionParser(SpreadUnary::class, '...', 512, description: 'Spread operator'),
|
||||
new UnaryOperatorExpressionParser(SpreadUnary::class, '...', 512, description: 'Spread operator', operandPrecedence: 0),
|
||||
new UnaryOperatorExpressionParser(NegUnary::class, '-', 500),
|
||||
new UnaryOperatorExpressionParser(PosUnary::class, '+', 500),
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
--TEST--
|
||||
Twig spread operator precedence with ternary operator
|
||||
--TEMPLATE--
|
||||
{{ [...true ? ['a'] : ['b']]|join }}
|
||||
{{ [...false ? ['a'] : ['b']]|join }}
|
||||
{{ [...(true ? ['a'] : ['b'])]|join }}
|
||||
{{ {a: 1, ...true ? {b: 2} : {c: 3}}|keys|join(',') }}
|
||||
--DATA--
|
||||
return []
|
||||
--EXPECT--
|
||||
a
|
||||
b
|
||||
a
|
||||
a,b
|
||||
Reference in New Issue
Block a user