/**
* {foreach ...}
*/
public function macroEndForeach(MacroNode $node, PhpWriter $writer)
{
$noCheck = Helpers::removeFilter($node->modifiers, 'nocheck');
$noIterator = Helpers::removeFilter($node->modifiers, 'noiterator');
if ($node->modifiers) {
throw new CompileException('Only modifiers |noiterator and |nocheck are allowed here.');
}
$node->openingCode = '<?php $iterations = 0; ';
$args = $writer->formatArgs();
if (!$noCheck) {
preg_match('#.+\\s+as\\s*\\$(\\w+)(?:\\s*=>\\s*\\$(\\w+))?#i', $args, $m);
for ($i = 1; $i < count($m); $i++) {
$this->overwrittenVars[$m[$i]][] = $node->startLine;
}
}
if (!$noIterator && preg_match('#\\W(\\$iterator|include|require|get_defined_vars)\\W#', $this->getCompiler()->expandTokens($node->content))) {
$node->openingCode .= 'foreach ($iterator = $this->global->its[] = new LR\\CachingIterator(' . preg_replace('#(.*)\\s+as\\s+#i', '$1) as ', $args, 1) . ') { ?>';
$node->closingCode = '<?php $iterations++; } array_pop($this->global->its); $iterator = end($this->global->its); ?>';
} else {
$node->openingCode .= 'foreach (' . $args . ') { ?>';
$node->closingCode = '<?php $iterations++; } ?>';
}
}