From 27b384341c34512d7cbb5c04efe8f375050ff19d Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 11 Dec 2012 15:22:37 +0100 Subject: [PATCH] fixed regression --- lib/Twig/TokenParser/For.php | 4 ++-- test/Twig/Tests/Fixtures/tags/for/condition.test | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/Twig/TokenParser/For.php b/lib/Twig/TokenParser/For.php index aef4f17..98a6d07 100644 --- a/lib/Twig/TokenParser/For.php +++ b/lib/Twig/TokenParser/For.php @@ -86,7 +86,7 @@ class Twig_TokenParser_For extends Twig_TokenParser // the loop variable cannot be used in the condition protected function checkLoopUsageCondition(Twig_TokenStream $stream, Twig_NodeInterface $node) { - if ($node instanceof Twig_Node_Expression_GetAttr && 'loop' == $node->getNode('node')->getAttribute('name')) { + if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) { throw new Twig_Error_Syntax('The "loop" variable cannot be used in a looping condition', $node->getLine(), $stream->getFilename()); } @@ -103,7 +103,7 @@ class Twig_TokenParser_For extends Twig_TokenParser // it does not catch all problems (for instance when a for is included into another or when the variable is used in an include) protected function checkLoopUsageBody(Twig_TokenStream $stream, Twig_NodeInterface $node) { - if ($node instanceof Twig_Node_Expression_GetAttr && 'loop' == $node->getNode('node')->getAttribute('name')) { + if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) { $attribute = $node->getNode('attribute'); if ($attribute instanceof Twig_Node_Expression_Constant && in_array($attribute->getAttribute('value'), array('length', 'revindex0', 'revindex', 'last'))) { throw new Twig_Error_Syntax(sprintf('The "loop.%s" variable is not defined when looping with a condition', $attribute->getAttribute('value')), $node->getLine(), $stream->getFilename()); diff --git a/test/Twig/Tests/Fixtures/tags/for/condition.test b/test/Twig/Tests/Fixtures/tags/for/condition.test index 9e4eb9b..380531f 100644 --- a/test/Twig/Tests/Fixtures/tags/for/condition.test +++ b/test/Twig/Tests/Fixtures/tags/for/condition.test @@ -2,13 +2,13 @@ "for" tag takes a condition --TEMPLATE-- {% for i in 1..5 if i is odd -%} - {{ loop.index }}.{{ i }} + {{ loop.index }}.{{ i }}{{ foo.bar }} {% endfor %} --DATA-- -return array() +return array('foo' => array('bar' => 'X')) --CONFIG-- return array('strict_variables' => false) --EXPECT-- -1.1 -2.3 -3.5 +1.1X +2.3X +3.5X -- 1.7.2.5