Skip to content

Commit 500d72f

Browse files
xabbuhnicolas-grekas
authored andcommitted
use reproducible variable names in the default domain node visitor
1 parent 9b0ca99 commit 500d72f

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
use Twig\Node\Expression\ConstantExpression;
2121
use Twig\Node\Expression\FilterExpression;
2222
use Twig\Node\Expression\NameExpression;
23-
use Twig\Node\Expression\Variable\AssignContextVariable;
24-
use Twig\Node\Expression\Variable\ContextVariable;
23+
use Twig\Node\Expression\Variable\LocalVariable;
2524
use Twig\Node\ModuleNode;
2625
use Twig\Node\Node;
2726
use Twig\Node\Nodes;
@@ -33,9 +32,8 @@
3332
*/
3433
final class TranslationDefaultDomainNodeVisitor implements NodeVisitorInterface
3534
{
36-
private const INTERNAL_VAR_NAME = '__internal_trans_default_domain';
37-
3835
private Scope $scope;
36+
private int $nestingLevel = 0;
3937

4038
public function __construct()
4139
{
@@ -49,19 +47,25 @@ public function enterNode(Node $node, Environment $env): Node
4947
}
5048

5149
if ($node instanceof TransDefaultDomainNode) {
50+
++$this->nestingLevel;
51+
5252
if ($node->getNode('expr') instanceof ConstantExpression) {
5353
$this->scope->set('domain', $node->getNode('expr'));
5454

5555
return $node;
5656
}
5757

58-
$name = class_exists(AssignContextVariable::class) ? new AssignContextVariable(self::INTERNAL_VAR_NAME, $node->getTemplateLine()) : new AssignNameExpression(self::INTERNAL_VAR_NAME, $node->getTemplateLine());
59-
$this->scope->set('domain', class_exists(ContextVariable::class) ? new ContextVariable(self::INTERNAL_VAR_NAME, $node->getTemplateLine()) : new NameExpression(self::INTERNAL_VAR_NAME, $node->getTemplateLine()));
60-
6158
if (class_exists(Nodes::class)) {
59+
$name = new LocalVariable(null, $node->getTemplateLine());
60+
$this->scope->set('domain', $name);
61+
6262
return new SetNode(false, new Nodes([$name]), new Nodes([$node->getNode('expr')]), $node->getTemplateLine());
6363
}
6464

65+
$var = '__internal_trans_default_domain_'.$this->nestingLevel;
66+
$name = new AssignNameExpression($var, $node->getTemplateLine());
67+
$this->scope->set('domain', new NameExpression($var, $node->getTemplateLine()));
68+
6569
return new SetNode(false, new Node([$name]), new Node([$node->getNode('expr')]), $node->getTemplateLine());
6670
}
6771

@@ -94,6 +98,8 @@ public function enterNode(Node $node, Environment $env): Node
9498
public function leaveNode(Node $node, Environment $env): ?Node
9599
{
96100
if ($node instanceof TransDefaultDomainNode) {
101+
--$this->nestingLevel;
102+
97103
return null;
98104
}
99105

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy