diff options
-rw-r--r-- | includes/registry.inc | 4 | ||||
-rw-r--r-- | modules/simpletest/tests/registry.test | 20 |
2 files changed, 23 insertions, 1 deletions
diff --git a/includes/registry.inc b/includes/registry.inc index ff6bdc950..569945746 100644 --- a/includes/registry.inc +++ b/includes/registry.inc @@ -254,7 +254,9 @@ function _registry_skip_body(&$tokens) { // Scan through the rest of the tokens until we reach the matching // end brace. while ($num_braces && ($token = next($tokens))) { - if ($token == '{') { + // PHP is really logical to have three different tokens for { with + // inconsistent names and only one for a closing brace. + if ($token == '{' || (is_array($token) && ($token[0] == T_DOLLAR_OPEN_CURLY_BRACES || $token[0] == T_CURLY_OPEN))) { ++$num_braces; } elseif ($token == '}') { diff --git a/modules/simpletest/tests/registry.test b/modules/simpletest/tests/registry.test index 4a859a64f..97ac23da8 100644 --- a/modules/simpletest/tests/registry.test +++ b/modules/simpletest/tests/registry.test @@ -135,3 +135,23 @@ CONTENTS; } +class RegistrySkipBodyTestCase extends DrupalWebTestCase { + public static function getInfo() { + return array( + 'name' => t('Skip function body test'), + 'description' => t('Tokenize a simple function and check that the body is skipped right'), + 'group' => t('System'), + ); + } + + function testRegistrySkipBody () { + // This string contains all three kinds of opening braces. + $function = '<?php function foo () { $x = "{$y}"; $x = "${y}" }'; + $tokens = token_get_all($function); + _registry_skip_body($tokens); + // Consume the last } + each($tokens); + $this->assertIdentical(each($tokens), FALSE, t('Tokens skipped')); + } + +}
\ No newline at end of file |