diff --git a/src/Parser.php b/src/Parser.php index 3553007a95e..3510601706f 100644 --- a/src/Parser.php +++ b/src/Parser.php @@ -54,6 +54,7 @@ class Parser private $importedSymbols; private $traits; private $embeddedTemplates = []; + private int $nextEmbedIndex = 1; private $varNameSalt = 0; private $ignoreUnknownTwigCallables = false; private ExpressionParsers $parsers; @@ -81,8 +82,13 @@ public function getVarName(): string */ public function parse(TokenStream $stream, $test = null, bool $dropNeedle = false): ModuleNode { + // restore on root modules only + if (!$this->stack) { + $this->nextEmbedIndex = 1; + } + $vars = get_object_vars($this); - unset($vars['stack'], $vars['env'], $vars['handlers'], $vars['visitors'], $vars['expressionParser'], $vars['reservedMacroNames'], $vars['varNameSalt']); + unset($vars['stack'], $vars['env'], $vars['handlers'], $vars['visitors'], $vars['expressionParser'], $vars['reservedMacroNames'], $vars['nextEmbedIndex'], $vars['varNameSalt']); $this->stack[] = $vars; // node visitors @@ -319,7 +325,7 @@ public function hasTraits(): bool */ public function embedTemplate(ModuleNode $template) { - $template->setIndex(mt_rand()); + $template->setIndex($this->nextEmbedIndex++); $this->embeddedTemplates[] = $template; }