merged branch m0ppers/master (PR #611)
authorFabien Potencier <fabien.potencier@gmail.com>
Sat, 18 Feb 2012 09:18:43 +0000 (10:18 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Sat, 18 Feb 2012 09:18:43 +0000 (10:18 +0100)
Commits
-------

71449e8 Remove optimization (covered by Optimization VAR_ACCESS anyway)

Discussion
----------

Remove optimization (covered by Optimization VAR_ACCESS anyway)

I have an own template class implementing getContext() and this one drove me completely mad after a twig upgrade.

After compilation the resulting templates have:

isset($context['bla'])

vs.

$this->getContext('bla')

Changing the Name Node however didn't have any effect and i saw that due to the optimizations by the SetTemp class twig doesn't even reach the Name Node. In fact SetTemp has the isset optimization hardcoded (which is ok).

I could simply fix my issue by setting optimizations to -9 (all optimizations except VAR_ACCESS). However the issue will reappear immediately when using PHP 5.4. Please remove the isset stuff from the non optimized node and let the optimization handler handle it (which i would disable in my case)

---------------------------------------------------------------------------

by m0ppers at 2012-01-24T17:42:07Z

some hackish script to test what i mean

<?php
require 'lib/Twig/Autoloader.php';
Twig_Autoloader::register();

abstract class Harxtemplate extends Twig_Template
{
    public function getContext($context, $item, $ignoreStrictCheck = false)
    {
        if ($item == "hans") {
            return "hund";
        } else {
            return parent::getContext($context, $item, $ignorStrictCheck);
        }
    }
}

$template = <<<EOT
Der {{ hans }} hat hund
{% if hans %}
hund
{% endif %}
EOT;

$loader = new Twig_Loader_String();
$options = array('base_template_class' => 'Harxtemplate',
//                 'strict_variables' => true, // doesn't work
                 'debug' => true,
                 'optimizations' => -1, // 0 => works
                );
$twig = new Twig_Environment($loader, $options);

echo $twig->render($template);


Trivial merge