From 7636dd72398613d58eb8a2184584a7d6e626fd8a Mon Sep 17 00:00:00 2001
From: casey <casey@32403.no-reply.drupal.org>
Date: Sun, 6 Mar 2011 21:43:04 -0800
Subject: [PATCH] Issue #1059884 by casey: Performance: drop function_exists for 'callback' functions

---
 includes/common.inc                    |   32 ++++++++++++--------------------
 includes/form.inc                      |    6 ++----
 includes/menu.inc                      |    6 +++---
 includes/token.inc                     |    2 +-
 modules/book/book.module               |    2 +-
 modules/field/field.module             |    5 +----
 modules/field/modules/list/list.module |    2 +-
 modules/field_ui/field_ui.module       |    2 +-
 modules/filter/filter.admin.inc        |    2 +-
 modules/filter/filter.module           |    6 +++---
 modules/image/image.admin.inc          |    5 ++---
 modules/image/image.module             |    5 +----
 modules/rdf/rdf.module                 |    2 +-
 modules/search/search.pages.inc        |    2 +-
 14 files changed, 31 insertions(+), 48 deletions(-)

diff --git a/includes/common.inc b/includes/common.inc
index a6901f3..792fa43 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -4313,10 +4313,8 @@ function drupal_process_attached($elements, $group = JS_DEFAULT, $dependency_che
   // Libraries, JavaScript and CSS have been added already, as they require
   // special handling.
   foreach ($elements['#attached'] as $callback => $options) {
-    if (function_exists($callback)) {
-      foreach ($elements['#attached'][$callback] as $args) {
-        call_user_func_array($callback, $args);
-      }
+    foreach ($elements['#attached'][$callback] as $args) {
+      call_user_func_array($callback, $args);
     }
   }
 
@@ -5584,9 +5582,7 @@ function drupal_render(&$elements) {
   // element is rendered into the final text.
   if (isset($elements['#pre_render'])) {
     foreach ($elements['#pre_render'] as $function) {
-      if (function_exists($function)) {
-        $elements = $function($elements);
-      }
+      $elements = $function($elements);
     }
   }
 
@@ -5630,9 +5626,7 @@ function drupal_render(&$elements) {
   // which allows the output'ed text to be filtered.
   if (isset($elements['#post_render'])) {
     foreach ($elements['#post_render'] as $function) {
-      if (function_exists($function)) {
-        $elements['#children'] = $function($elements['#children'], $elements);
-      }
+      $elements['#children'] = $function($elements['#children'], $elements);
     }
   }
 
@@ -7540,7 +7534,7 @@ function entity_uri($entity_type, $entity) {
     // Invoke the callback to get the URI. If there is no callback, set the
     // entity's 'uri' property to FALSE to indicate that it is known to not have
     // a URI.
-    if (isset($uri_callback) && function_exists($uri_callback)) {
+    if (isset($uri_callback)) {
       $entity->uri = $uri_callback($entity);
       if (!isset($entity->uri['options'])) {
         $entity->uri['options'] = array();
@@ -7574,7 +7568,7 @@ function entity_uri($entity_type, $entity) {
 function entity_label($entity_type, $entity) {
   $label = FALSE;
   $info = entity_get_info($entity_type);
-  if (isset($info['label callback']) && function_exists($info['label callback'])) {
+  if (isset($info['label callback'])) {
     $label = $info['label callback']($entity);
   }
   elseif (!empty($info['entity keys']['label']) && isset($entity->{$info['entity keys']['label']})) {
@@ -7797,16 +7791,14 @@ function drupal_get_filetransfer_info() {
     $info = array();
     foreach (module_implements('filetransfer_info') as $module) {
       $function = $module . '_filetransfer_info';
-      if (function_exists($function)) {
-        $result = $function();
-        if (isset($result) && is_array($result)) {
-          foreach ($result as &$values) {
-            if (empty($values['file path'])) {
-              $values['file path'] = drupal_get_path('module', $module);
-            }
+      $result = $function();
+      if (isset($result) && is_array($result)) {
+        foreach ($result as &$values) {
+          if (empty($values['file path'])) {
+            $values['file path'] = drupal_get_path('module', $module);
           }
-          $info = array_merge_recursive($info, $result);
         }
+        $info = array_merge_recursive($info, $result);
       }
     }
     drupal_alter('filetransfer_info', $info);
diff --git a/includes/form.inc b/includes/form.inc
index c0163ca..c6e05d6 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -759,7 +759,7 @@ function drupal_retrieve_form($form_id, &$form_state) {
   // the actual form builder function ($callback) expects. This allows for
   // pre-populating a form with common elements for certain forms, such as
   // back/next/save buttons in multi-step form wizards. See drupal_build_form().
-  if (isset($form_state['wrapper_callback']) && function_exists($form_state['wrapper_callback'])) {
+  if (isset($form_state['wrapper_callback'])) {
     $form = call_user_func_array($form_state['wrapper_callback'], $args);
     // Put the prepopulated $form into $args.
     $args[0] = $form;
@@ -4274,9 +4274,7 @@ function batch_process($redirect = NULL, $url = 'batch', $redirect_callback = 'd
 
       // Redirect for processing.
       $function = $batch['redirect_callback'];
-      if (function_exists($function)) {
-        $function($batch['url'], array('query' => array('op' => 'start', 'id' => $batch['id'])));
-      }
+      $function($batch['url'], array('query' => array('op' => 'start', 'id' => $batch['id'])));
     }
     else {
       // Non-progressive execution: bypass the whole progressbar workflow
diff --git a/includes/menu.inc b/includes/menu.inc
index a3121c7..6a86058 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -615,7 +615,7 @@ function _menu_check_access(&$item, $map) {
     if ($callback == 'user_access') {
       $item['access'] = (count($arguments) == 1) ? user_access($arguments[0]) : user_access($arguments[0], $arguments[1]);
     }
-    elseif (function_exists($callback)) {
+    else {
       $item['access'] = call_user_func_array($callback, $arguments);
     }
   }
@@ -675,7 +675,7 @@ function _menu_item_localize(&$item, $map, $link_translate = FALSE) {
         $item['title'] = t($item['title'], menu_unserialize($item['title_arguments'], $map));
       }
     }
-    elseif ($callback && function_exists($callback)) {
+    elseif ($callback) {
       if (empty($item['title_arguments'])) {
         $item['title'] = $callback($item['title']);
       }
@@ -1671,7 +1671,7 @@ function menu_get_custom_theme($initialize = FALSE) {
     // If this returns a valid theme, it will override any theme that was set
     // by a hook_custom_theme() implementation above.
     $router_item = menu_get_item();
-    if (!empty($router_item['access']) && !empty($router_item['theme_callback']) && function_exists($router_item['theme_callback'])) {
+    if (!empty($router_item['access']) && !empty($router_item['theme_callback'])) {
       $theme_name = call_user_func_array($router_item['theme_callback'], $router_item['theme_arguments']);
       if (drupal_theme_access($theme_name)) {
         $custom_theme = $theme_name;
diff --git a/includes/token.inc b/includes/token.inc
index c31f9e6..b7ab52d 100644
--- a/includes/token.inc
+++ b/includes/token.inc
@@ -83,7 +83,7 @@ function token_replace($text, array $data = array(), array $options = array()) {
   }
 
   // Optionally alter the list of replacement values.
-  if (!empty($options['callback']) && function_exists($options['callback'])) {
+  if (!empty($options['callback'])) {
     $function = $options['callback'];
     $function($replacements, $data, $options);
   }
diff --git a/modules/book/book.module b/modules/book/book.module
index 82d38f7..8093480 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -1142,7 +1142,7 @@ function book_export_traverse($tree, $visit_func) {
         $children = book_export_traverse($data['below'], $visit_func);
       }
 
-      if (function_exists($visit_func)) {
+      if (!empty($visit_func)) {
         $output .= call_user_func($visit_func, $node, $children);
       }
       else {
diff --git a/modules/field/field.module b/modules/field/field.module
index 163f448..fcd69e8 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -459,9 +459,7 @@ function field_get_default_value($entity_type, $entity, $field, $instance, $lang
   $items = array();
   if (!empty($instance['default_value_function'])) {
     $function = $instance['default_value_function'];
-    if (function_exists($function)) {
-      $items = $function($entity_type, $entity, $field, $instance, $langcode);
-    }
+    $items = $function($entity_type, $entity, $field, $instance, $langcode);
   }
   elseif (!empty($instance['default_value'])) {
     $items = $instance['default_value'];
@@ -483,7 +481,6 @@ function field_get_default_value($entity_type, $entity, $field, $instance, $lang
  */
 function _field_filter_items($field, $items) {
   $function = $field['module'] . '_field_is_empty';
-  function_exists($function);
   foreach ((array) $items as $delta => $item) {
     // Explicitly break if the function is undefined.
     if ($function($item, $field)) {
diff --git a/modules/field/modules/list/list.module b/modules/field/modules/list/list.module
index f7ac951..948f2eb 100644
--- a/modules/field/modules/list/list.module
+++ b/modules/field/modules/list/list.module
@@ -231,7 +231,7 @@ function list_allowed_values($field) {
 
   if (!isset($allowed_values[$field['id']])) {
     $function = $field['settings']['allowed_values_function'];
-    if (!empty($function) && function_exists($function)) {
+    if (!empty($function)) {
       $values = $function($field);
     }
     else {
diff --git a/modules/field_ui/field_ui.module b/modules/field_ui/field_ui.module
index 21d4df9..53100f2 100644
--- a/modules/field_ui/field_ui.module
+++ b/modules/field_ui/field_ui.module
@@ -261,7 +261,7 @@ function _field_ui_view_mode_menu_access($entity_type, $bundle, $view_mode, $acc
       if ($access_callback == 'user_access') {
         return (count($args) == 1) ? user_access($args[0]) : user_access($args[0], $args[1]);
       }
-      elseif (function_exists($access_callback)) {
+      else {
         return call_user_func_array($access_callback, $args);
       }
     }
diff --git a/modules/filter/filter.admin.inc b/modules/filter/filter.admin.inc
index 5a21e6e..b4a7008 100644
--- a/modules/filter/filter.admin.inc
+++ b/modules/filter/filter.admin.inc
@@ -230,7 +230,7 @@ function filter_admin_format_form($form, &$form_state, $format) {
   );
 
   foreach ($filter_info as $name => $filter) {
-    if (isset($filter['settings callback']) && function_exists($filter['settings callback'])) {
+    if (isset($filter['settings callback'])) {
       $function = $filter['settings callback'];
       // Pass along stored filter settings and default settings, but also the
       // format object and all filters to allow for complex implementations.
diff --git a/modules/filter/filter.module b/modules/filter/filter.module
index 66fadcb..9de8da0 100644
--- a/modules/filter/filter.module
+++ b/modules/filter/filter.module
@@ -745,7 +745,7 @@ function check_markup($text, $format_id = NULL, $langcode = '', $cache = FALSE)
 
   // Give filters the chance to escape HTML-like data such as code or formulas.
   foreach ($filters as $name => $filter) {
-    if ($filter->status && isset($filter_info[$name]['prepare callback']) && function_exists($filter_info[$name]['prepare callback'])) {
+    if ($filter->status && isset($filter_info[$name]['prepare callback'])) {
       $function = $filter_info[$name]['prepare callback'];
       $text = $function($text, $filter, $format, $langcode, $cache, $cache_id);
     }
@@ -753,7 +753,7 @@ function check_markup($text, $format_id = NULL, $langcode = '', $cache = FALSE)
 
   // Perform filtering.
   foreach ($filters as $name => $filter) {
-    if ($filter->status && isset($filter_info[$name]['process callback']) && function_exists($filter_info[$name]['process callback'])) {
+    if ($filter->status && isset($filter_info[$name]['process callback'])) {
       $function = $filter_info[$name]['process callback'];
       $text = $function($text, $filter, $format, $langcode, $cache, $cache_id);
     }
@@ -1011,7 +1011,7 @@ function _filter_tips($format_id, $long = FALSE) {
     $filters = filter_list_format($format->format);
     $tips[$format->name] = array();
     foreach ($filters as $name => $filter) {
-      if ($filter->status && isset($filter_info[$name]['tips callback']) && function_exists($filter_info[$name]['tips callback'])) {
+      if ($filter->status && isset($filter_info[$name]['tips callback'])) {
         $tip = $filter_info[$name]['tips callback']($filter, $format, $long);
         if (isset($tip)) {
           $tips[$format->name][$name] = array('tip' => $tip, 'id' => $name);
diff --git a/modules/image/image.admin.inc b/modules/image/image.admin.inc
index d72fdf4..012b86c 100644
--- a/modules/image/image.admin.inc
+++ b/modules/image/image.admin.inc
@@ -389,9 +389,8 @@ function image_effect_form($form, &$form_state, $style, $effect) {
 
   $form['#tree'] = TRUE;
   $form['#attached']['css'][drupal_get_path('module', 'image') . '/image.admin.css'] = array();
-  if (function_exists($effect['form callback'])) {
-    $form['data'] = call_user_func($effect['form callback'], $effect['data']);
-  }
+
+  $form['data'] = call_user_func($effect['form callback'], $effect['data']);
 
   // Check the URL for a weight, then the image effect, otherwise use default.
   $form['weight'] = array(
diff --git a/modules/image/image.module b/modules/image/image.module
index d2d081c..8e9fd7f 100644
--- a/modules/image/image.module
+++ b/modules/image/image.module
@@ -1070,10 +1070,7 @@ function image_effect_delete($effect) {
 function image_effect_apply($image, $effect) {
   module_load_include('inc', 'image', 'image.effects');
   $function = $effect['effect callback'];
-  if (function_exists($function)) {
-    return $function($image, $effect['data']);
-  }
-  return FALSE;
+  return $function($image, $effect['data']);
 }
 
 /**
diff --git a/modules/rdf/rdf.module b/modules/rdf/rdf.module
index ebecd42..5e7c6fa 100644
--- a/modules/rdf/rdf.module
+++ b/modules/rdf/rdf.module
@@ -304,7 +304,7 @@ function rdf_rdfa_attributes($mapping, $data = NULL) {
     case 'property':
       $attributes['property'] = $mapping['predicates'];
       // Convert $data to a specific format as per the callback function.
-      if (isset($data) && isset($mapping['callback']) && function_exists($mapping['callback'])) {
+      if (isset($data) && isset($mapping['callback'])) {
         $callback = $mapping['callback'];
         $attributes['content'] = $callback($data);
       }
diff --git a/modules/search/search.pages.inc b/modules/search/search.pages.inc
index 833ea8b..9687f23 100644
--- a/modules/search/search.pages.inc
+++ b/modules/search/search.pages.inc
@@ -52,7 +52,7 @@ function search_view($module = NULL, $keys = '') {
   // the search query URL clean as a whistle.
   if (empty($_POST['form_id']) || $_POST['form_id'] != 'search_form') {
     $conditions =  NULL;
-    if (isset($info['conditions_callback']) && function_exists($info['conditions_callback'])) {
+    if (isset($info['conditions_callback'])) {
       // Build an optional array of more search conditions.
       $conditions = call_user_func($info['conditions_callback'], $keys);
     }
-- 
1.7.3.5

