From df67052626c0768875c3272c94a6d28458720847 Mon Sep 17 00:00:00 2001 From: Justin Hileman Date: Mon, 18 Aug 2014 09:01:57 -0700 Subject: [PATCH] Use reference to current stack frame (saves quite a few array lookups) See #218 --- src/Mustache/Context.php | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/Mustache/Context.php b/src/Mustache/Context.php index b87c99c..b16b400 100644 --- a/src/Mustache/Context.php +++ b/src/Mustache/Context.php @@ -172,24 +172,26 @@ class Mustache_Context private function findVariableInStack($id, array $stack) { for ($i = count($stack) - 1; $i >= 0; $i--) { - switch (gettype($stack[$i])) { + $frame = &$stack[$i]; + + switch (gettype($frame)) { case 'object': - if (!($stack[$i] instanceof Closure)) { + if (!($frame instanceof Closure)) { // Note that is_callable() *will not work here* // See https://github.com/bobthecow/mustache.php/wiki/Magic-Methods - if (method_exists($stack[$i], $id)) { - return $stack[$i]->$id(); - } elseif (isset($stack[$i]->$id)) { - return $stack[$i]->$id; - } elseif ($stack[$i] instanceof ArrayAccess && isset($stack[$i][$id])) { - return $stack[$i][$id]; + if (method_exists($frame, $id)) { + return $frame->$id(); + } elseif (isset($frame->$id)) { + return $frame->$id; + } elseif ($frame instanceof ArrayAccess && isset($frame[$id])) { + return $frame[$id]; } } break; case 'array': - if (array_key_exists($id, $stack[$i])) { - return $stack[$i][$id]; + if (array_key_exists($id, $frame)) { + return $frame[$id]; } break; }