Index: includes/common.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/common.inc,v retrieving revision 1.1017 diff -u -p -r1.1017 common.inc --- includes/common.inc 13 Oct 2009 21:16:42 -0000 1.1017 +++ includes/common.inc 14 Oct 2009 05:04:36 -0000 @@ -2569,6 +2569,8 @@ function drupal_attributes(array $attrib */ function l($text, $path, array $options = array()) { global $language_url; + static $bootstrapped = FALSE; + static $themeable = FALSE; // Merge in defaults. $options += array( @@ -2588,7 +2590,28 @@ function l($text, $path, array $options $options['attributes']['title'] = strip_tags($options['attributes']['title']); } - return '' . ($options['html'] ? $text : check_plain($text)) . ''; + $content = $options['html'] ? $text : check_plain($text); + $href = check_plain(url($path, $options)); + + // Determine if rendering of the link is to be done with a theme function + // or the inline default. Can't theme until bootstrapped. Once bootstrapped, + // check if a module or theme has registered a 'link' theme hook. + if (!$bootstrapped && (drupal_get_bootstrap_phase() == DRUPAL_BOOTSTRAP_FULL)) { + $bootstrapped = TRUE; + drupal_theme_initialize(); + $registry = theme_get_registry(); + if (isset($registry['link'])) { + $themeable = TRUE; + } + } + if ($themeable) { + return theme('link', array('content' => $content, 'href' => $href, 'attributes' => $options['attributes'], 'path' => $path, 'options' => $options)); + } + else { + // Since l() is called very often during a single page request, inline + // instead of registering a default theme_link() function. + return '' . $content . ''; + } } /** Index: modules/simpletest/tests/common.test =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/tests/common.test,v retrieving revision 1.84 diff -u -p -r1.84 common.test --- modules/simpletest/tests/common.test 13 Oct 2009 16:38:43 -0000 1.84 +++ modules/simpletest/tests/common.test 14 Oct 2009 05:04:37 -0000 @@ -57,7 +57,7 @@ class DrupalAlterTestCase extends Drupal /** * Tests for URL generation functions. */ -class CommonURLUnitTest extends DrupalUnitTestCase { +class CommonURLUnitTest extends DrupalWebTestCase { public static function getInfo() { return array( 'name' => 'URL generation tests',