made temporary variable names predictable
authorFabien Potencier <fabien.potencier@gmail.com>
Thu, 6 Jan 2011 07:37:18 +0000 (08:37 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Thu, 6 Jan 2011 07:37:18 +0000 (08:37 +0100)
lib/Twig/Environment.php
lib/Twig/Node/From.php [deleted file]
lib/Twig/Parser.php
lib/Twig/TokenParser/Filter.php
lib/Twig/TokenParser/From.php

index 48af99a..4100640 100644 (file)
@@ -260,6 +260,16 @@ class Twig_Environment
     }
 
     /**
+     * Gets the template class prefix.
+     *
+     * @return string The template class prefix
+     */
+    public function getTemplateClassPrefix()
+    {
+        return $this->templateClassPrefix;
+    }
+
+    /**
      * Loads a template by name.
      *
      * @param  string  $name  The template name
diff --git a/lib/Twig/Node/From.php b/lib/Twig/Node/From.php
deleted file mode 100644 (file)
index 224a905..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/*
- * This file is part of Twig.
- *
- * (c) 2010 Fabien Potencier
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-/**
- * Represents a from node.
- *
- * @package    twig
- * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
- */
-class Twig_Node_From extends Twig_Node_Import
-{
-    public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null)
-    {
-        parent::__construct($expr, new Twig_Node_Expression_AssignName(str_replace('.', '_', uniqid('_imported_', true)), $lineno), $lineno, $tag);
-    }
-}
index 346e732..88d4181 100644 (file)
@@ -29,6 +29,7 @@ class Twig_Parser implements Twig_ParserInterface
     protected $env;
     protected $reservedMacroNames;
     protected $importedFunctions;
+    protected $tmpVarCount;
 
     /**
      * Constructor.
@@ -40,6 +41,11 @@ class Twig_Parser implements Twig_ParserInterface
         $this->env = $env;
     }
 
+    public function getVarName()
+    {
+        return sprintf('__internal_%s_%d', substr($this->env->getTemplateClass($this->stream->getFilename()), strlen($this->env->getTemplateClassPrefix())), ++$this->tmpVarCount);
+    }
+
     /**
      * Converts a token stream to a node tree.
      *
@@ -49,6 +55,8 @@ class Twig_Parser implements Twig_ParserInterface
      */
     public function parse(Twig_TokenStream $stream)
     {
+        $this->tmpVarCount = 0;
+
         // tag handlers
         $this->handlers = $this->env->getTokenParsers();
         $this->handlers->setParser($this);
index 2e0e31c..4ef8023 100644 (file)
@@ -19,7 +19,7 @@ class Twig_TokenParser_Filter extends Twig_TokenParser
      */
     public function parse(Twig_Token $token)
     {
-        $name = str_replace('.', '_', uniqid('_tmp_', true));
+        $name = $this->parser->getVarName();
         $ref = new Twig_Node_Expression_BlockReference(new Twig_Node_Expression_Constant($name, $token->getLine()), $token->getLine(), $this->getTag());
 
         $filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag());
index 788239b..b26a4fb 100644 (file)
@@ -45,7 +45,7 @@ class Twig_TokenParser_From extends Twig_TokenParser
 
         $stream->expect(Twig_Token::BLOCK_END_TYPE);
 
-        $node = new Twig_Node_From($macro, $token->getLine(), $this->getTag());
+        $node = new Twig_Node_Import($macro, new Twig_Node_Expression_AssignName($this->parser->getVarName(), $token->getLine()), $token->getLine(), $this->getTag());
 
         foreach($targets as $name => $alias) {
             $this->parser->addImportedFunction($alias, $name, $node->getNode('var'));