Skip to content

Commit ca8bb62

Browse files
committed
generate conflict-free variable names
1 parent 273fa3f commit ca8bb62

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

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

+9-11
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
use Twig\Node\Expression\ConstantExpression;
2222
use Twig\Node\Expression\FilterExpression;
2323
use Twig\Node\Expression\NameExpression;
24-
use Twig\Node\Expression\Variable\LocalVariable;
24+
use Twig\Node\Expression\Variable\AssignContextVariable;
25+
use Twig\Node\Expression\Variable\ContextVariable;
2526
use Twig\Node\ModuleNode;
2627
use Twig\Node\Node;
2728
use Twig\Node\Nodes;
@@ -33,8 +34,10 @@
3334
*/
3435
final class TranslationDefaultDomainNodeVisitor implements NodeVisitorInterface
3536
{
37+
private const INTERNAL_VAR_NAME = '__internal_trans_default_domain';
38+
3639
private Scope $scope;
37-
private int $nestingLevel = 0;
40+
private int $nameCounter = 0;
3841

3942
public function __construct()
4043
{
@@ -48,24 +51,21 @@ public function enterNode(Node $node, Environment $env): Node
4851
}
4952

5053
if ($node instanceof TransDefaultDomainNode) {
51-
++$this->nestingLevel;
52-
5354
if ($node->getNode('expr') instanceof ConstantExpression) {
5455
$this->scope->set('domain', $node->getNode('expr'));
5556

5657
return $node;
5758
}
5859

5960
if (class_exists(Nodes::class)) {
60-
$name = new LocalVariable(null, $node->getTemplateLine());
61-
$this->scope->set('domain', $name);
61+
$name = new AssignContextVariable(self::INTERNAL_VAR_NAME.(++$this->nameCounter), $node->getTemplateLine());
62+
$this->scope->set('domain', new ContextVariable(self::INTERNAL_VAR_NAME.(++$this->nameCounter), $node->getTemplateLine()));
6263

6364
return new SetNode(false, new Nodes([$name]), new Nodes([$node->getNode('expr')]), $node->getTemplateLine());
6465
}
6566

66-
$var = '__internal_trans_default_domain_'.$this->nestingLevel;
67-
$name = new AssignNameExpression($var, $node->getTemplateLine());
68-
$this->scope->set('domain', new NameExpression($var, $node->getTemplateLine()));
67+
$name = new AssignNameExpression(self::INTERNAL_VAR_NAME.(++$this->nameCounter), $node->getTemplateLine());
68+
$this->scope->set('domain', new NameExpression(self::INTERNAL_VAR_NAME.(++$this->nameCounter), $node->getTemplateLine()));
6969

7070
return new SetNode(false, new Node([$name]), new Node([$node->getNode('expr')]), $node->getTemplateLine());
7171
}
@@ -105,8 +105,6 @@ public function enterNode(Node $node, Environment $env): Node
105105
public function leaveNode(Node $node, Environment $env): ?Node
106106
{
107107
if ($node instanceof TransDefaultDomainNode) {
108-
--$this->nestingLevel;
109-
110108
return null;
111109
}
112110

0 commit comments

Comments
 (0)