added priority to node visitors

This commit is contained in:
Fabien Potencier
2010-11-28 14:17:56 +01:00
parent 5f0d582d1e
commit 5c5a9d45ea
6 changed files with 47 additions and 5 deletions
+2
View File
@@ -1,5 +1,7 @@
* 0.9.10
* added priority to node visitors
* 0.9.9 (2010-11-28)
Backward incompatibilities:
+14 -5
View File
@@ -44,7 +44,11 @@ class Twig_NodeTraverser
*/
public function addVisitor(Twig_NodeVisitorInterface $visitor)
{
$this->visitors[] = $visitor;
if (!isset($this->visitors[$visitor->getPriority()])) {
$this->visitors[$visitor->getPriority()] = array();
}
$this->visitors[$visitor->getPriority()][] = $visitor;
}
/**
@@ -58,8 +62,11 @@ class Twig_NodeTraverser
return null;
}
foreach ($this->visitors as $visitor) {
$node = $visitor->enterNode($node, $this->env);
ksort($this->visitors);
foreach ($this->visitors as $visitors) {
foreach ($visitors as $visitor) {
$node = $visitor->enterNode($node, $this->env);
}
}
foreach ($node as $k => $n) {
@@ -70,8 +77,10 @@ class Twig_NodeTraverser
}
}
foreach ($this->visitors as $visitor) {
$node = $visitor->leaveNode($node, $this->env);
foreach ($this->visitors as $visitors) {
foreach ($visitors as $visitor) {
$node = $visitor->leaveNode($node, $this->env);
}
}
return $node;
+8
View File
@@ -149,4 +149,12 @@ class Twig_NodeVisitor_Escaper implements Twig_NodeVisitorInterface
$args = new Twig_Node(array(new Twig_Node_Expression_Constant((string) $type, $line)));
return new Twig_Node_Expression_Filter($node, $name, $args, $line);
}
/**
* {@inheritdoc}
*/
public function getPriority()
{
return 0;
}
}
+8
View File
@@ -81,4 +81,12 @@ class Twig_NodeVisitor_SafeAnalysis implements Twig_NodeVisitorInterface
return array_intersect($a, $b);
}
/**
* {@inheritdoc}
*/
public function getPriority()
{
return 0;
}
}
+8
View File
@@ -75,4 +75,12 @@ class Twig_NodeVisitor_Sandbox implements Twig_NodeVisitorInterface
return $node;
}
/**
* {@inheritdoc}
*/
public function getPriority()
{
return 0;
}
}
+7
View File
@@ -36,4 +36,11 @@ interface Twig_NodeVisitorInterface
* @param Twig_NodeInterface The modified node
*/
public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env);
/**
* Returns the priority.
*
* @return $priority The priority
*/
public function getPriority();
}