summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2009-05-10 16:46:24 +0000
committerDries Buytaert <dries@buytaert.net>2009-05-10 16:46:24 +0000
commit43ad4ad1407ab46876e7785da6f0952b07071b99 (patch)
treede01ea340e059c1a97a2d14ca31757ea9699cac1
parentb9b0063a486b16e2a8780b344876f41dd565df5a (diff)
downloadbrdo-43ad4ad1407ab46876e7785da6f0952b07071b99.tar.gz
brdo-43ad4ad1407ab46876e7785da6f0952b07071b99.tar.bz2
- Patch #458566 by chx: work around PHP's curly bracket madness.
-rw-r--r--includes/registry.inc4
-rw-r--r--modules/simpletest/tests/registry.test20
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