ForLoop.php (1564B)
1 <?php 2 3 /* 4 * This file is part of Twig. 5 * 6 * (c) 2011 Fabien Potencier 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12 /** 13 * Internal node used by the for node. 14 * 15 * @author Fabien Potencier <fabien@symfony.com> 16 */ 17 class Twig_Node_ForLoop extends Twig_Node 18 { 19 public function __construct($lineno, $tag = null) 20 { 21 parent::__construct(array(), array('with_loop' => false, 'ifexpr' => false, 'else' => false), $lineno, $tag); 22 } 23 24 public function compile(Twig_Compiler $compiler) 25 { 26 if ($this->getAttribute('else')) { 27 $compiler->write("\$context['_iterated'] = true;\n"); 28 } 29 30 if ($this->getAttribute('with_loop')) { 31 $compiler 32 ->write("++\$context['loop']['index0'];\n") 33 ->write("++\$context['loop']['index'];\n") 34 ->write("\$context['loop']['first'] = false;\n") 35 ; 36 37 if (!$this->getAttribute('ifexpr')) { 38 $compiler 39 ->write("if (isset(\$context['loop']['length'])) {\n") 40 ->indent() 41 ->write("--\$context['loop']['revindex0'];\n") 42 ->write("--\$context['loop']['revindex'];\n") 43 ->write("\$context['loop']['last'] = 0 === \$context['loop']['revindex0'];\n") 44 ->outdent() 45 ->write("}\n") 46 ; 47 } 48 } 49 } 50 }