merged branch nikic/optimizeVariableAccess2 (PR #382)
authorFabien Potencier <fabien.potencier@gmail.com>
Tue, 12 Jul 2011 07:49:06 +0000 (09:49 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Tue, 12 Jul 2011 07:49:06 +0000 (09:49 +0200)
commit0ef96f6b1ddd2b395ab6476482fb4461e4036ec2
tree4bd982585f71bb055beae250df1b43300acf448e
parent24d83b3c594e2ccaf72b8d411547ac1ba962fcb1
parent5b91f12ab7256461ba16121e85b3e7e419a43b4a
merged branch nikic/optimizeVariableAccess2 (PR #382)

Commits
-------

5b91f12 Update tests
a5ef326 Use Template->getContext in non-strict mode too

Discussion
----------

Use Template->getContext() when in non-strict mode, too

As described in #380 using the current `isset($context['test']) ? $context['test'] : null` approach can cause problems in some cases: The ternary operator always returns by value and thus PHP's copy-on-write concept does not apply. So `$context['test']` needs to be copied in any case, even though a write never happens to it. Basically Twig is copying the values of all variables ever used inside Twig if it operates in non-strict mode. This is problematic when `$context['test']` contains big arrays as the whole array is copied.

In this patch I change Twig to use `Template->getContext` when in non-strict mode too and add an `isStrictVariables` check in there.
lib/Twig/Template.php