? .svn
? 216101_drupal7_2.patch
? 363262-url-alias-index-D7_3.patch
? 497118-follow-up-1.patch
? 578520-follow-up-2.patch
? 578520-follow-up-3.patch
? TYPE_node_form-1.patch
? anchor-1.patch
? apc.php
? breadcrumb-node-type-1.patch
? cache-gzip-16.patch
? css-preprocess-1-filemtime.patch
? custom_url_rewrite_outbound-4.patch
? default-timezone-7.patch
? default-timezone_0.patch
? drupal_http_request-1.patch
? drupal_http_request-2.patch
? drupal_write_record_null-2.patch
? drupal_write_record_null_0.patch
? dwtc
? field_delete_instance-6.patch
? field_delete_instance-7.patch
? file-test-windows-2.patch
? file_create_url-40.patch
? form-item-1.patch
? form_state_defaults.patch
? getBaseUrl-1.patch
? js-error-1.patch
? kill-prepared-statement-cache-1.patch
? maintenance-1.patch
? menu-stepchild-5.patch
? menu_execute_active_handler-1.patch
? menu_get_names-3.patch
? menu_link_move_children-1.patch
? menu_link_move_children-2.patch
? menu_name-2.patch
? node-type-delete-breadcrumb.patch
? node-type-hint-1.patch
? node-type-hint-2.patch
? openid-duplicate-key-3.patch
? openid-no-sreg-8.patch
? openid-no-sreg-9.patch
? openid-regression-2.patch
? openid-regression.patch
? openid-sreg-1.patch
? options_buttons_elements_proces-1.patch
? page_cache_with_anon_session_1.patch
? page_cache_with_anon_session_2.patch
? password_confirm.patch
? prepareQuery-1.patch
? proxy
? proxy-3.patch
? proxy-4.patch
? reply-to-d5-1.patch
? require_once-1.patch
? reset_placeholder_0_0.patch
? resolve_url-3.patch
? robots-2.patch
? strict-5.patch
? strict-error-reporting-2.patch
? tableheader-2.patch
? test_formatting.patch
? theme-8.patch
? timeout-1.patch
? timezone-detect-1.patch
? token_initialize-1.patch
? upgrade-blocks-2.patch
? upload_file_download-5.patch
? upload_file_download-6x.patch
? user-460706-3.patch
? user-login-3.patch
? user-picture-12.patch
? vcs-htaccess-2.patch
? x
? x.php
? xx
? sites/hverdagspriser.drupal7.dev.chsc.dk
? sites/default/files
? sites/default/modules
? sites/default/private
? sites/default/settings.php
Index: modules/blog/blog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blog/blog.module,v
retrieving revision 1.335
diff -u -9 -p -r1.335 blog.module
--- modules/blog/blog.module	29 Aug 2009 05:46:02 -0000	1.335
+++ modules/blog/blog.module	3 Oct 2009 17:59:36 -0000
@@ -44,37 +44,37 @@ function blog_help($path, $arg) {
       $output .= '<p>' . t('Each blog entry is displayed with an automatic link to other blogs created by the same user. By default, blog entries have comments enabled and are automatically promoted to the site front page. The blog module also creates a <em>Recent blog posts</em> block that may be enabled at the <a href="@blocks">blocks administration page</a>.', array('@blocks' => url('admin/structure/block'))) . '</p>';
       $output .= '<p>' . t('For more information, see the online handbook entry for <a href="@blog">Blog module</a>.', array('@blog' => 'http://drupal.org/handbook/modules/blog/')) . '</p>';
       return $output;
   }
 }
 
 /**
  * Implement hook_form().
  */
-function blog_form($node, $form_state) {
+function blog_form(stdClass $node, $form_state) {
   return node_content_form($node, $form_state);
 }
 
 /**
  * Implement hook_view().
  */
-function blog_view($node, $build_mode) {
+function blog_view(stdClass $node, $build_mode) {
   if ((bool)menu_get_object()) {
     // Breadcrumb navigation.
     drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('Blogs'), 'blog'), l(t("!name's blog", array('!name' => $node->name)), 'blog/' . $node->uid)));
   }
   return $node;
 }
 
 /**
  * Implement hook_node_view().
  */
-function blog_node_view($node, $build_mode = 'full') {
+function blog_node_view(stdClass $node, $build_mode = 'full') {
   if ($build_mode != 'rss') {
     if ($node->type == 'blog' && arg(0) != 'blog' || arg(1) != $node->uid) {
       $links['blog_usernames_blog'] = array(
         'title' => t("!username's blog", array('!username' => $node->name)),
         'href' => "blog/$node->uid",
         'attributes' => array('title' => t("Read !username's latest blog entries.", array('!username' => $node->name))),
       );
       $node->content['links']['blog'] = array(
         '#theme' => 'links',
Index: modules/book/book.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.admin.inc,v
retrieving revision 1.22
diff -u -9 -p -r1.22 book.admin.inc
--- modules/book/book.admin.inc	18 Sep 2009 00:12:45 -0000	1.22
+++ modules/book/book.admin.inc	3 Oct 2009 17:59:36 -0000
@@ -71,19 +71,19 @@ function book_admin_settings_validate($f
 }
 
 /**
  * Build the form to administrate the hierarchy of a single book.
  *
  * @see book_admin_edit_submit()
  *
  * @ingroup forms.
  */
-function book_admin_edit($form, $form_state, $node) {
+function book_admin_edit($form, $form_state, stdClass $node) {
   drupal_set_title($node->title);
   $form['#node'] = $node;
   _book_admin_table($node, $form);
   $form['save'] = array(
     '#type' => 'submit',
     '#value' => t('Save book pages'),
   );
 
   return $form;
@@ -143,19 +143,19 @@ function book_admin_edit_submit($form, &
 
   drupal_set_message(t('Updated book %title.', array('%title' => $form['#node']->title)));
 }
 
 /**
  * Build the table portion of the form for the book administration page.
  *
  * @see book_admin_edit()
  */
-function _book_admin_table($node, &$form) {
+function _book_admin_table(stdClass $node, &$form) {
   $form['table'] = array(
     '#theme' => 'book_admin_table',
     '#tree' => TRUE,
   );
 
   $tree = book_menu_subtree_data($node->book);
   $tree = array_shift($tree); // Do not include the book item itself.
   if ($tree['below']) {
     $hash = sha1(serialize($tree['below']));
Index: modules/book/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.module,v
retrieving revision 1.516
diff -u -9 -p -r1.516 book.module
--- modules/book/book.module	29 Sep 2009 15:31:14 -0000	1.516
+++ modules/book/book.module	3 Oct 2009 17:59:36 -0000
@@ -57,19 +57,19 @@ function book_permission() {
       'title' => t('Access printer-friendly version'),
       'description' => t('View a book page and all of its sub-pages as a single document for ease of printing. Can be performance heavy.'),
     ),
   );
 }
 
 /**
  * Inject links into $node as needed.
  */
-function book_node_view_link($node, $build_mode) {
+function book_node_view_link(stdClass $node, $build_mode) {
   $links = array();
 
   if (isset($node->book['depth'])) {
     if ($build_mode == 'full') {
       $child_type = variable_get('book_child_type', 'book');
       if ((user_access('add content to books') || user_access('administer book outlines')) && node_access('create', $child_type) && $node->status == 1 && $node->book['depth'] < MENU_MAX_DEPTH) {
         $links['book_add_child'] = array(
           'title' => t('Add child page'),
           'href' => 'node/add/' . str_replace('_', '-', $child_type),
@@ -170,26 +170,26 @@ function book_menu() {
     'file' => 'book.pages.inc',
   );
 
   return $items;
 }
 
 /**
  * Menu item access callback - determine if the outline tab is accessible.
  */
-function _book_outline_access($node) {
+function _book_outline_access(stdClass $node) {
   return user_access('administer book outlines') && node_access('view', $node);
 }
 
 /**
  * Menu item access callback - determine if the user can remove nodes from the outline.
  */
-function _book_outline_remove_access($node) {
+function _book_outline_remove_access(stdClass $node) {
   return isset($node->book) && ($node->book['bid'] != $node->nid) && _book_outline_access($node);
 }
 
 /**
  * Implement hook_init().
  */
 function book_init() {
   drupal_add_css(drupal_get_path('module', 'book') . '/book.css');
 }
@@ -430,19 +430,19 @@ function _book_parent_select($book_link)
     );
   }
 
   return $form;
 }
 
 /**
  * Build the common elements of the book form for the node and outline forms.
  */
-function _book_add_form_elements(&$form, $node) {
+function _book_add_form_elements(&$form, stdClass $node) {
   // Need this for AJAX.
   $form['#cache'] = TRUE;
 
   $form['book'] = array(
     '#type' => 'fieldset',
     '#title' => t('Book outline'),
     '#weight' => 10,
     '#collapsible' => TRUE,
     '#collapsed' => TRUE,
@@ -511,19 +511,19 @@ function _book_add_form_elements(&$form,
   );
 }
 
 /**
  * Common helper function to handles additions and updates to the book outline.
  *
  * Performs all additions and updates to the book outline through node addition,
  * node editing, node deletion, or the outline tab.
  */
-function _book_update_outline($node) {
+function _book_update_outline(stdClass $node) {
   if (empty($node->book['bid'])) {
     return FALSE;
   }
   $new = empty($node->book['mlid']);
 
   $node->book['link_path'] = 'node/' . $node->nid;
   $node->book['link_title'] = $node->title;
   $node->book['parent_mismatch'] = FALSE; // The normal case.
 
@@ -727,19 +727,19 @@ function book_node_load($nodes, $types) 
     $nodes[$record['nid']]->book['href'] = $record['link_path'];
     $nodes[$record['nid']]->book['title'] = $record['link_title'];
     $nodes[$record['nid']]->book['options'] = unserialize($record['options']);
   }
 }
 
 /**
  * Implement hook_node_view().
  */
-function book_node_view($node, $build_mode) {
+function book_node_view(stdClass $node, $build_mode) {
   if ($build_mode == 'full') {
     if (!empty($node->book['bid']) && empty($node->in_preview)) {
       $node->content['book_navigation'] = array(
         '#markup' => theme('book_navigation', $node->book),
         '#weight' => 100,
       );
     }
   }
 
@@ -759,67 +759,67 @@ function book_page_alter(&$page) {
     $active_menus = menu_get_active_menu_names();
     $active_menus[] = $node->book['menu_name'];
     menu_set_active_menu_names($active_menus);
   }
 }
 
 /**
  * Implement hook_node_presave().
  */
-function book_node_presave($node) {
+function book_node_presave(stdClass $node) {
   // Always save a revision for non-administrators.
   if (!empty($node->book['bid']) && !user_access('administer nodes')) {
     $node->revision = 1;
     // The database schema requires a log message for every revision.
     if (!isset($node->log)) {
       $node->log = '';
     }
   }
   // Make sure a new node gets a new menu link.
   if (empty($node->nid)) {
     $node->book['mlid'] = NULL;
   }
 }
 
 /**
  * Implement hook_node_insert().
  */
-function book_node_insert($node) {
+function book_node_insert(stdClass $node) {
   if (!empty($node->book['bid'])) {
     if ($node->book['bid'] == 'new') {
       // New nodes that are their own book.
       $node->book['bid'] = $node->nid;
     }
     $node->book['nid'] = $node->nid;
     $node->book['menu_name'] = book_menu_name($node->book['bid']);
     _book_update_outline($node);
   }
 }
 
 /**
  * Implement hook_node_update().
  */
-function book_node_update($node) {
+function book_node_update(stdClass $node) {
   if (!empty($node->book['bid'])) {
     if ($node->book['bid'] == 'new') {
       // New nodes that are their own book.
       $node->book['bid'] = $node->nid;
     }
     $node->book['nid'] = $node->nid;
     $node->book['menu_name'] = book_menu_name($node->book['bid']);
     _book_update_outline($node);
   }
 }
 
 /**
  * Implement hook_node_delete().
  */
-function book_node_delete($node) {
+function book_node_delete(stdClass $node) {
   if (!empty($node->book['bid'])) {
     if ($node->nid == $node->book['bid']) {
       // Handle deletion of a top-level post.
       $result = db_query("SELECT b.nid FROM {menu_links} ml INNER JOIN {book} b on b.mlid = ml.mlid WHERE ml.plid = :plid", array(
         ':plid' => $node->book['mlid']
       ));
       foreach ($result as $child) {
         $child_node = node_load($child->nid);
         $child_node->book['bid'] = $child_node->nid;
@@ -830,19 +830,19 @@ function book_node_delete($node) {
     db_delete('book')
       ->condition('mlid', $node->book['mlid'])
       ->execute();
   }
 }
 
 /**
  * Implement hook_node_prepare().
  */
-function book_node_prepare($node) {
+function book_node_prepare(stdClass $node) {
   // Prepare defaults for the add/edit form.
   if (empty($node->book) && (user_access('add content to books') || user_access('administer book outlines'))) {
     $node->book = array();
 
     if (empty($node->nid) && isset($_GET['parent']) && is_numeric($_GET['parent'])) {
       // Handle "Add child page" links:
       $parent = book_link_load($_GET['parent']);
 
       if ($parent && $parent['access']) {
@@ -1077,19 +1077,19 @@ function book_export_traverse($tree, $vi
  * @see book_export_traverse()
  *
  * @param $node
  *   The node that will be output.
  * @param $children
  *   All the rendered child nodes within the current node.
  * @return
  *   The HTML generated for the given node.
  */
-function book_node_export($node, $children = '') {
+function book_node_export(stdClass $node, $children = '') {
   node_build_content($node, 'print');
   $node->rendered = drupal_render($node->content);
 
   return theme('book_node_export_html', $node, $children);
 }
 
 /**
  * Process variables for book-node-export-html.tpl.php.
  *
Index: modules/book/book.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.pages.inc,v
retrieving revision 1.16
diff -u -9 -p -r1.16 book.pages.inc
--- modules/book/book.pages.inc	18 Sep 2009 00:12:45 -0000	1.16
+++ modules/book/book.pages.inc	3 Oct 2009 17:59:36 -0000
@@ -83,32 +83,32 @@ function book_export_html($nid) {
   }
   else {
     drupal_access_denied();
   }
 }
 
 /**
  * Menu callback; show the outline form for a single node.
  */
-function book_outline($node) {
+function book_outline(stdClass $node) {
   drupal_set_title($node->title);
   return drupal_get_form('book_outline_form', $node);
 }
 
 /**
  * Build the form to handle all book outline operations via the outline tab.
  *
  * @see book_outline_form_submit()
  * @see book_remove_button_submit()
  *
  * @ingroup forms
  */
-function book_outline_form($form, &$form_state, $node) {
+function book_outline_form($form, &$form_state, stdClass $node) {
   if (!isset($node->book)) {
     // The node is not part of any book yet - set default options.
     $node->book = _book_link_defaults($node->nid);
   }
   else {
     $node->book['original_bid'] = $node->book['bid'];
   }
 
   // Find the depth limit for the parent select.
@@ -180,19 +180,19 @@ function book_outline_form_submit($form,
 }
 
 /**
  * Menu callback; builds a form to confirm removal of a node from the book.
  *
  * @see book_remove_form_submit()
  *
  * @ingroup forms
  */
-function book_remove_form($form, &$form_state, $node) {
+function book_remove_form($form, &$form_state, stdClass $node) {
   $form['#node'] = $node;
   $title = array('%title' => $node->title);
 
   if ($node->book['has_children']) {
     $description = t('%title has associated child pages, which will be relocated automatically to maintain their connection to the book. To recreate the hierarchy (as it was before removing this page), %title may be added again using the Outline tab, and each of its former child pages will need to be relocated manually.', $title);
   }
   else {
     $description = t('%title may be added to hierarchy again using the Outline tab.', $title);
   }
Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.775
diff -u -9 -p -r1.775 comment.module
--- modules/comment/comment.module	29 Sep 2009 15:31:14 -0000	1.775
+++ modules/comment/comment.module	3 Oct 2009 17:59:37 -0000
@@ -407,19 +407,19 @@ function comment_get_recent($number = 10
  * @param $num_comments
  *   Number of comments.
  * @param $new_replies
  *   Number of new replies.
  * @param $node
  *   The first new comment node.
  * @return
  *   "page=X" if the page number is greater than zero; empty string otherwise.
  */
-function comment_new_page_count($num_comments, $new_replies, $node) {
+function comment_new_page_count($num_comments, $new_replies, stdClass $node) {
   $comments_per_page = _comment_get_display_setting('comments_per_page', $node);
   $mode = _comment_get_display_setting('mode', $node);
   $pagenum = NULL;
   $flat = $mode == COMMENT_MODE_FLAT ? TRUE : FALSE;
   if ($num_comments <= $comments_per_page) {
     // Only one page of comments.
     $pageno = 0;
   }
   elseif ($flat) {
@@ -467,19 +467,19 @@ function theme_comment_block() {
 
   if ($items) {
     return theme('item_list', $items);
   }
 }
 
 /**
  * Implement hook_node_view().
  */
-function comment_node_view($node, $build_mode) {
+function comment_node_view(stdClass $node, $build_mode) {
   $links = array();
 
   if ($node->comment) {
     if ($build_mode == 'rss') {
       if ($node->comment != COMMENT_NODE_HIDDEN) {
         // Add a comments RSS element which is a URL to the comments of this node.
         $node->rss_elements[] = array(
           'key' => 'comments',
           'value' => url('node/' . $node->nid, array('fragment' => 'comments', 'absolute' => TRUE))
@@ -573,19 +573,19 @@ function comment_node_view($node, $build
   }
 }
 
 /**
  * Build the comment-related elements for node detail pages.
  *
  * @param $node
  *  A node object.
  */
-function comment_node_page_additions($node) {
+function comment_node_page_additions(stdClass $node) {
   $additions = array();
 
   // Only attempt to render comments if the node has visible comments.
   // Unpublished comments are not included in $node->comment_count, so show
   // comments unconditionally if the user is an administrator.
   if ($node->comment_count || user_access('administer comments')) {
     if ($cids = comment_get_thread($node)) {
       $comments = comment_load_multiple($cids);
       comment_prepare_thread($comments);
@@ -668,19 +668,19 @@ function comment_node_page_additions($no
  * 1.1.1/
  * 1.2/
  * 2/
  *
  * we add "/" since this char is, in ASCII, higher than every number, so if
  * now we "ORDER BY thread DESC" we get the correct order. However this would
  * spoil the reverse ordering, "ORDER BY thread ASC" -- here, we do not need
  * to consider the trailing "/" so we use a substring only.
  */
- function comment_get_thread($node) {
+ function comment_get_thread(stdClass $node) {
   $mode = _comment_get_display_setting('mode', $node);
   $comments_per_page = _comment_get_display_setting('comments_per_page', $node);
 
   $query = db_select('comment', 'c')->extend('PagerDefault');
   $query->addField('c', 'cid');
   $query
     ->condition('c.nid', $node->nid)
     ->addTag('node_access')
     ->limit($comments_per_page);
@@ -761,19 +761,19 @@ function comment_prepare_thread(&$commen
  *   A comment object.
  * @param $node
  *   The node the comment is attached to.
  * @param $build_mode
  *   Build mode, e.g. 'full', 'teaser'...
  *
  * @return
  *   An array as expected by drupal_render().
  */
-function comment_build($comment, $node, $build_mode = 'full') {
+function comment_build($comment, stdClass $node, $build_mode = 'full') {
   // Populate $comment->content with a render() array.
   comment_build_content($comment, $node, $build_mode);
 
   $build = $comment->content;
   // We don't need duplicate rendering info in comment->content.
   unset($comment->content);
 
   $build += array(
     '#theme' => 'comment',
@@ -814,19 +814,19 @@ function comment_build($comment, $node, 
  * other comment components) will vary depending on the $build_mode parameter.
  *
  * @param $comment
  *   A comment object.
  * @param $node
  *   The node the comment is attached to.
  * @param $build_mode
  *   Build mode, e.g. 'full', 'teaser'...
  */
-function comment_build_content($comment, $node, $build_mode = 'full') {
+function comment_build_content($comment, stdClass $node, $build_mode = 'full') {
   if (empty($comment->content)) {
     $comment->content = array();
   }
 
   // Build comment body.
   $comment->content['comment_body'] = array(
     '#markup' => check_markup($comment->comment, $comment->format),
   );
 
@@ -853,19 +853,19 @@ function comment_build_content($comment,
  * Adds reply, edit, delete etc. depending on the current user permissions.
  *
  * @param $comment
  *   The comment object.
  * @param $node
  *   The node the comment is attached to.
  * @return
  *   A structured array of links.
  */
-function comment_links($comment, $node) {
+function comment_links($comment, stdClass $node) {
   $links = array();
   if ($node->comment == COMMENT_NODE_OPEN) {
     if (user_access('administer comments') && user_access('post comments')) {
       $links['comment_delete'] = array(
         'title' => t('delete'),
         'href' => "comment/delete/$comment->cid",
         'html' => TRUE,
       );
       $links['comment_edit'] = array(
@@ -916,19 +916,19 @@ function comment_links($comment, $node) 
  * @param $node
  *   The node the comments are attached to.
  * @param $build_mode
  *   Build mode, e.g. 'full', 'teaser'...
  * @param $weight
  *   An integer representing the weight of the first comment in the list.
  * @return
  *   An array in the format expected by drupal_render().
  */
-function comment_build_multiple($comments, $node, $build_mode = 'full', $weight = 0) {
+function comment_build_multiple($comments, stdClass $node, $build_mode = 'full', $weight = 0) {
   $build = array(
     '#sorted' => TRUE,
   );
   foreach ($comments as $comment) {
     $build[$comment->cid] = comment_build($comment, $node, $build_mode);
     $build[$comment->cid]['#weight'] = $weight;
     $weight++;
   }
   return $build;
@@ -1095,54 +1095,54 @@ function comment_node_load($nodes, $type
       $nodes[$record->nid]->last_comment_name = $record->last_comment_name;
       $nodes[$record->nid]->comment_count = $record->comment_count;
     }
   }
 }
 
 /**
  * Implement hook_node_prepare().
  */
-function comment_node_prepare($node) {
+function comment_node_prepare(stdClass $node) {
   if (!isset($node->comment)) {
     $node->comment = variable_get("comment_$node->type", COMMENT_NODE_OPEN);
   }
 }
 
 /**
  * Implement hook_node_insert().
  */
-function comment_node_insert($node) {
+function comment_node_insert(stdClass $node) {
   db_insert('node_comment_statistics')
     ->fields(array(
       'nid' => $node->nid,
       'last_comment_timestamp' => $node->changed,
       'last_comment_name' => NULL,
       'last_comment_uid' => $node->uid,
       'comment_count' => 0,
     ))
     ->execute();
 }
 
 /**
  * Implement hook_node_delete().
  */
-function comment_node_delete($node) {
+function comment_node_delete(stdClass $node) {
   $cids = db_query('SELECT cid FROM {comment} WHERE nid = :nid', array(':nid' => $node->nid))->fetchCol();
   comment_delete_multiple($cids);
   db_delete('node_comment_statistics')
     ->condition('nid', $node->nid)
     ->execute();
 }
 
 /**
  * Implement hook_node_update_index().
  */
-function comment_node_update_index($node) {
+function comment_node_update_index(stdClass $node) {
   $text = '';
   if ($node->comment != COMMENT_NODE_HIDDEN) {
     $comments = db_query('SELECT subject, comment, format FROM {comment} WHERE nid = :nid AND status = :status', array(
       ':nid' => $node->nid,
       ':status' => COMMENT_PUBLISHED
     ));
     foreach ($comments as $comment) {
       $text .= '<h2>' . check_plain($comment->subject) . '</h2>' . check_markup($comment->comment, $comment->format);
     }
@@ -1155,19 +1155,19 @@ function comment_node_update_index($node
  */
 function comment_update_index() {
   // Store the maximum possible comments per thread (used for ranking by reply count)
   variable_set('node_cron_comments_scale', 1.0 / max(1, db_query('SELECT MAX(comment_count) FROM {node_comment_statistics}')->fetchField()));
 }
 
 /**
  * Implement hook_node_search_result().
  */
-function comment_node_search_result($node) {
+function comment_node_search_result(stdClass $node) {
   if ($node->comment != COMMENT_NODE_HIDDEN) {
     $comments = db_query('SELECT comment_count FROM {node_comment_statistics} WHERE nid = :nid', array('nid' => $node->nid))->fetchField();
     return format_plural($comments, '1 comment', '@count comments');
   }
   return '';
 }
 
 /**
  * Implement hook_user_cancel().
@@ -2135,19 +2135,19 @@ function template_preprocess_comment(&$v
 }
 
 /**
  * Theme a "you can't post comments" notice.
  *
  * @param $node
  *   The comment node.
  * @ingroup themeable
  */
-function theme_comment_post_forbidden($node) {
+function theme_comment_post_forbidden(stdClass $node) {
   global $user;
 
   if (!$user->uid) {
     // We only output any link if we are certain, that users get permission
     // to post comments by logging in. We also locally cache this information.
     $authenticated_post_comments = &drupal_static(__FUNCTION__, array_key_exists(DRUPAL_AUTHENTICATED_RID, user_roles(TRUE, 'post comments') + user_roles(TRUE, 'post comments without approval')));
 
     if ($authenticated_post_comments) {
       // We cannot use drupal_get_destination() because these links
@@ -2207,19 +2207,19 @@ function _comment_per_page() {
 
 /**
  * Return a current comment display setting
  *
  * @param $setting
  *   can be one of these: 'mode', 'sort', 'comments_per_page'
  * @param $node
  *   The comment node in question.
  */
-function _comment_get_display_setting($setting, $node) {
+function _comment_get_display_setting($setting, stdClass $node) {
   switch ($setting) {
     case 'mode':
       $value = variable_get('comment_default_mode_' . $node->type, COMMENT_MODE_THREADED);
       break;
 
     case 'comments_per_page':
       $value = variable_get('comment_default_per_page_' . $node->type, 50);
   }
 
Index: modules/comment/comment.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.pages.inc,v
retrieving revision 1.25
diff -u -9 -p -r1.25 comment.pages.inc
--- modules/comment/comment.pages.inc	11 Sep 2009 13:37:52 -0000	1.25
+++ modules/comment/comment.pages.inc	3 Oct 2009 17:59:37 -0000
@@ -21,19 +21,19 @@
  *   Every comment belongs to a node. This is that node.
  *
  * @param $pid
  *   Some comments are replies to other comments. In those cases, $pid is the parent
  *   comment's cid.
  *
  * @return
  *   The rendered parent node or comment plus the new comment form.
  */
-function comment_reply($node, $pid = NULL) {
+function comment_reply(stdClass $node, $pid = NULL) {
   // Set the breadcrumb trail.
   drupal_set_breadcrumb(array(l(t('Home'), NULL), l($node->title, 'node/' . $node->nid)));
   $op = isset($_POST['op']) ? $_POST['op'] : '';
   $build = array();
 
   if (user_access('access comments')) {
     // The user is previewing a comment prior to submitting it.
     if ($op == t('Preview')) {
       if (user_access('post comments')) {
Index: modules/field/field.attach.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.attach.inc,v
retrieving revision 1.51
diff -u -9 -p -r1.51 field.attach.inc
--- modules/field/field.attach.inc	2 Oct 2009 14:39:43 -0000	1.51
+++ modules/field/field.attach.inc	3 Oct 2009 17:59:37 -0000
@@ -1248,19 +1248,19 @@ function field_attach_extra_weight($bund
     return $extra[$pseudo_field]['weight'];
   }
 }
 
 /**
  * Implement hook_node_prepare_translation.
  *
  * TODO D7: We do not yet know if this really belongs in Field API.
  */
-function field_attach_prepare_translation($node) {
+function field_attach_prepare_translation(stdClass $node) {
   // Prevent against invalid 'nodes' built by broken 3rd party code.
   if (isset($node->type)) {
     $type = content_types($node->type);
     // Save cycles if the type has no fields.
     if (!empty($type['instances'])) {
       $default_additions = _field_invoke_default('prepare_translation', $node);
       $additions = _field_invoke('prepare_translation', $node);
       // Merge module additions after the default ones to enable overriding
       // of field values.
Index: modules/forum/forum.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum/forum.module,v
retrieving revision 1.519
diff -u -9 -p -r1.519 forum.module
--- modules/forum/forum.module	18 Sep 2009 00:04:22 -0000	1.519
+++ modules/forum/forum.module	3 Oct 2009 17:59:37 -0000
@@ -160,24 +160,23 @@ function forum_menu() {
  * Implement hook_init().
  */
 function forum_init() {
   drupal_add_css(drupal_get_path('module', 'forum') . '/forum.css');
 }
 
 /**
  * _forum_node_check_node_type
  *
- * @param mixed $node
- * @param mixed $vocabulary
- * @access protected
+ * @param $node
+ * @param $vocabulary
  * @return bool
  */
-function _forum_node_check_node_type($node, $vocabulary) {
+function _forum_node_check_node_type(stdClass $node, $vocabulary) {
   // We are going to return if $node->type is not one of the node
   // types assigned to the forum vocabulary. If forum_nav_vocabulary
   // is undefined or the vocabulary does not exist, it clearly cannot
   // be assigned to $node->type, so return to avoid E_ALL warnings.
   if (empty($vocabulary)) {
     return FALSE;
   }
 
   // Operate only on node types assigned for the forum vocabulary.
@@ -185,19 +184,19 @@ function _forum_node_check_node_type($no
     return FALSE;
   }
 
   return TRUE;
 }
 
 /**
  * Implement hook_node_view().
  */
-function forum_node_view($node, $build_mode) {
+function forum_node_view(stdClass $node, $build_mode) {
   $vid = variable_get('forum_nav_vocabulary', 0);
   $vocabulary = taxonomy_vocabulary_load($vid);
   if (_forum_node_check_node_type($node, $vocabulary)) {
     if ((bool)menu_get_object() && taxonomy_node_get_terms_by_vocabulary($node, $vid) && $tree = taxonomy_get_tree($vid)) {
       // Get the forum terms from the (cached) tree
       foreach ($tree as $term) {
         $forum_terms[] = $term->tid;
       }
       foreach ($node->taxonomy as $term_id => $term) {
@@ -217,38 +216,38 @@ function forum_node_view($node, $build_m
       drupal_set_breadcrumb($breadcrumb);
 
     }
   }
 }
 
 /**
  * Implement hook_node_prepare().
  */
-function forum_node_prepare($node) {
+function forum_node_prepare(stdClass $node) {
   $vid = variable_get('forum_nav_vocabulary', 0);
   $vocabulary = taxonomy_vocabulary_load($vid);
   if (_forum_node_check_node_type($node, $vocabulary)) {
     if (empty($node->nid)) {
       // New topic
       $node->taxonomy[arg(3)] = (object) array(
         'vid' => $vid,
         'tid' => arg(3),
       );
     }
   }
 }
 
 /**
  * Implement hook_node_validate().
  *
  * Check in particular that only a "leaf" term in the associated taxonomy.
  */
-function forum_node_validate($node, $form) {
+function forum_node_validate(stdClass $node, $form) {
   $vid = variable_get('forum_nav_vocabulary', 0);
   $vocabulary = taxonomy_vocabulary_load($vid);
   if (_forum_node_check_node_type($node, $vocabulary)) {
     // vocabulary is selected, not a "container" term.
     if ($node->taxonomy) {
       // Extract the node's proper topic ID.
       $vocabulary = $vid;
       $containers = variable_get('forum_containers', array());
       foreach ($node->taxonomy as $term) {
@@ -264,19 +263,19 @@ function forum_node_validate($node, $for
     }
   }
 }
 
 /**
  * Implement hook_node_presave().
  *
  * Assign forum taxonomy when adding a topic from within a forum.
  */
-function forum_node_presave($node) {
+function forum_node_presave(stdClass $node) {
   $vid = variable_get('forum_nav_vocabulary', 0);
   $vocabulary = taxonomy_vocabulary_load($vid);
   if (_forum_node_check_node_type($node, $vocabulary)) {
     // Make sure all fields are set properly:
     $node->icon = !empty($node->icon) ? $node->icon : '';
 
     if ($node->taxonomy && $tree = taxonomy_get_tree($vid)) {
       // Get the forum terms from the (cached) tree if we have a taxonomy.
       foreach ($tree as $term) {
@@ -293,19 +292,19 @@ function forum_node_presave($node) {
         $node->taxonomy[] = $old_tid;
       }
     }
   }
 }
 
 /**
  * Implement hook_node_update().
  */
-function forum_node_update($node) {
+function forum_node_update(stdClass $node) {
   $vid = variable_get('forum_nav_vocabulary', 0);
   $vocabulary = taxonomy_vocabulary_load($vid);
   if (_forum_node_check_node_type($node, $vocabulary)) {
     if (empty($node->revision) && db_query('SELECT tid FROM {forum} WHERE nid=:nid', array(':nid' => $node->nid))->fetchField()) {
       if (!empty($node->tid)) {
         db_update('forum')
           ->fields(array('tid' => $node->tid))
           ->condition('vid', $node->vid)
           ->execute();
@@ -328,38 +327,38 @@ function forum_node_update($node) {
           ->execute();
       }
     }
   }
 }
 
 /**
  * Implement hook_node_insert().
  */
-function forum_node_insert($node) {
+function forum_node_insert(stdClass $node) {
   $vid = variable_get('forum_nav_vocabulary', 0);
   $vocabulary = taxonomy_vocabulary_load($vid);
   if (_forum_node_check_node_type($node, $vocabulary)) {
     if (!empty($node->tid)) {
       $nid = db_insert('forum')
         ->fields(array(
           'tid' => $node->tid,
           'vid' => $node->vid,
           'nid' => $node->nid,
         ))
         ->execute();
     }
   }
 }
 
 /**
  * Implement hook_node_delete().
  */
-function forum_node_delete($node) {
+function forum_node_delete(stdClass $node) {
   $vid = variable_get('forum_nav_vocabulary', 0);
   $vocabulary = taxonomy_vocabulary_load($vid);
   if (_forum_node_check_node_type($node, $vocabulary)) {
     db_delete('forum')
       ->condition('nid', $node->nid)
       ->execute();
   }
 }
 
@@ -570,19 +569,19 @@ function forum_block_view_pre_render($el
     $elements['forum_list'] = array('#markup' => $node_title_list);
     $elements['forum_more'] = array('#markup' => theme('more_link', url('forum'), t('Read the latest forum topics.')));
   }
   return $elements;
 }
 
 /**
  * Implement hook_form().
  */
-function forum_form($node, $form_state) {
+function forum_form(stdClass $node, $form_state) {
   $type = node_type_get_type($node);
   $form['title'] = array('#type' => 'textfield', '#title' => check_plain($type->title_label), '#default_value' => !empty($node->title) ? $node->title : '', '#required' => TRUE, '#weight' => -5);
 
   if (!empty($node->nid)) {
     $vid = variable_get('forum_nav_vocabulary', 0);
     $forum_terms = taxonomy_node_get_terms_by_vocabulary($node, $vid);
     // if editing, give option to leave shadows
     $shadow = (count($forum_terms) > 1);
     $form['shadow'] = array('#type' => 'checkbox', '#title' => t('Leave shadow copy'), '#default_value' => $shadow, '#description' => t('If you move this topic, you can leave a link in the old forum to the new forum.'));
Index: modules/menu/menu.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.module,v
retrieving revision 1.206
diff -u -9 -p -r1.206 menu.module
--- modules/menu/menu.module	3 Oct 2009 01:16:02 -0000	1.206
+++ modules/menu/menu.module	3 Oct 2009 17:59:37 -0000
@@ -297,19 +297,19 @@ function menu_block_view($delta = '') {
   $menus = menu_get_menus(FALSE);
   $data['subject'] = check_plain($menus[$delta]);
   $data['content'] = menu_tree($delta);
   return $data;
 }
 
 /**
  * Implement hook_node_insert().
  */
-function menu_node_insert($node) {
+function menu_node_insert(stdClass $node) {
   if (isset($node->menu)) {
     $item = &$node->menu;
     if (!empty($item['delete'])) {
       menu_link_delete($item['mlid']);
     }
     elseif (trim($item['link_title'])) {
       $item['link_title'] = trim($item['link_title']);
       $item['link_path'] = "node/$node->nid";
       if (!$item['customized']) {
@@ -319,19 +319,19 @@ function menu_node_insert($node) {
         drupal_set_message(t('There was an error saving the menu link.'), 'error');
       }
     }
   }
 }
 
 /**
  * Implement hook_node_update().
  */
-function menu_node_update($node) {
+function menu_node_update(stdClass $node) {
   if (isset($node->menu)) {
     $item = &$node->menu;
     if (!empty($item['delete'])) {
       menu_link_delete($item['mlid']);
     }
     elseif (trim($item['link_title'])) {
       $item['link_title'] = trim($item['link_title']);
       $item['link_path'] = "node/$node->nid";
       if (!$item['customized']) {
@@ -341,30 +341,30 @@ function menu_node_update($node) {
         drupal_set_message(t('There was an error saving the menu link.'), 'error');
       }
     }
   }
 }
 
 /**
  * Implement hook_node_delete().
  */
-function menu_node_delete($node) {
+function menu_node_delete(stdClass $node) {
   // Delete all menu module links that point to this node.
   $result = db_query("SELECT mlid FROM {menu_links} WHERE link_path = :path AND module = 'menu'", array(':path' => 'node/' . $node->nid), array('fetch' => PDO::FETCH_ASSOC));
   foreach ($result as $m) {
     menu_link_delete($m['mlid']);
   }
 }
 
 /**
  * Implement hook_node_prepare().
  */
-function menu_node_prepare($node) {
+function menu_node_prepare(stdClass $node) {
   if (empty($node->menu)) {
     // Prepare the node for the edit form so that $node->menu always exists.
     $menu_name = variable_get('menu_default_node_menu', 'navigation');
     $item = array();
     if (isset($node->nid)) {
       // Give priority to the default menu
       $mlid = db_query_range("SELECT mlid FROM {menu_links} WHERE link_path = :path AND menu_name = :menu_name AND module = 'menu' ORDER BY mlid ASC", 0, 1, array(
         ':path' => 'node/' . $node->nid,
         ':menu_name' => $menu_name,
Index: modules/node/node.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.api.php,v
retrieving revision 1.38
diff -u -9 -p -r1.38 node.api.php
--- modules/node/node.api.php	25 Sep 2009 14:24:34 -0000	1.38
+++ modules/node/node.api.php	3 Oct 2009 17:59:37 -0000
@@ -70,19 +70,19 @@ function hook_node_grants($account, $op)
  *    If set to TRUE a user with the gid in the realm can delete this node.
  * 'priority'
  *    If multiple modules seek to set permissions on a node, the realms
  *    that have the highest priority will win out, and realms with a lower
  *    priority will not be written. If there is any doubt, it is best to
  *    leave this 0.
  *
  * @ingroup node_access
  */
-function hook_node_access_records($node) {
+function hook_node_access_records(stdClass $node) {
   if (node_access_example_disabling()) {
     return;
   }
 
   // We only care about the node if it has been marked private. If not, it is
   // treated just like any other node and we completely ignore it.
   if ($node->private) {
     $grants = array();
     $grants[] = array(
@@ -134,19 +134,19 @@ function hook_node_access_records($node)
  *   The node for which the grants were acquired.
  *
  * The preferred use of this hook is in a module that bridges multiple node
  * access modules with a configurable behavior, as shown in the example
  * by the variable 'example_preview_terms'. This variable would
  * be a configuration setting for your module.
  *
  * @ingroup node_access
  */
-function hook_node_access_records_alter(&$grants, $node) {
+function hook_node_access_records_alter(&$grants, stdClass $node) {
   // Our module allows editors to tag specific articles as 'preview'
   // content using the taxonomy system. If the node being saved
   // contains one of the preview terms defined in our variable
   // 'example_preview_terms', then only our grants are retained,
   // and other grants are removed. Doing so ensures that our rules
   // are enforced no matter what priority other grants are given.
   $preview = variable_get('example_preview_terms', array());
   // Check to see if we have enabled complex behavior.
   if (!empty($preview)) {
@@ -261,51 +261,51 @@ function hook_node_operations() {
   return $operations;
 }
 
 /**
  * Act on node deletion.
  *
  * @param $node
  *   The node that is being deleted.
  */
-function hook_node_delete($node) {
+function hook_node_delete(stdClass $node) {
   db_delete('mytable')
     ->condition('nid', $node->nid)
     ->execute();
 }
 
 /**
  * A revision of the node is deleted.
  *
  * You can delete data associated with that revision.
  *
  * @param $node
  *   The node the action is being performed on.
  */
-function hook_node_revision_delete($node) {
+function hook_node_revision_delete(stdClass $node) {
   db_delete('upload')->condition('vid', $node->vid)->execute();
   if (!is_array($node->files)) {
     return;
   }
   foreach ($node->files as $file) {
     file_delete($file);
   }
 }
 
 /**
  * Respond to node insertion.
  *
  * Take action when a new node of any type is being inserted in the database.
  *
  * @param $node
  *   The node the action is being performed on.
  */
-function hook_node_insert($node) {
+function hook_node_insert(stdClass $node) {
   db_insert('mytable')
     ->fields(array(
       'nid' => $node->nid,
       'extra' => $node->extra,
     ))
     ->execute();
 }
 
 /**
@@ -371,19 +371,19 @@ function hook_node_load($nodes, $types) 
  * @param $account
  *   A user object representing the user for whom the operation is to be
  *   performed.
  * @return
  *   NODE_ACCESS_ALLOW if the operation is to be allowed;
  *   NODE_ACCESS_DENY if the operation is to be denied;
  *   NODE_ACCESSS_IGNORE to not affect this operation at all.
  */
 function hook_node_access($node, $op, $account) {
-  $type = is_string($node) ? $node : (is_array($node) ? $node['type'] : $node->type);
+  $type = is_string($node) ? $node : $node->type;
 
   if (in_array($type, nodeperms_get_configured_types())) {
     if ($op == 'create' && user_access('create ' . $type . ' content', $account)) {
       return NODE_ACCESS_ALLOW;
     }
 
     if ($op == 'update') {
       if (user_access('edit any ' . $type . ' content', $account) || (user_access('edit own ' . $type . ' content', $account) && ($account->uid == $node->uid))) {
         return NODE_ACCESS_ALLOW;
@@ -402,93 +402,93 @@ function hook_node_access($node, $op, $a
 }
 
 
 /**
  * The node is about to be shown on the add/edit form.
  *
  * @param $node
  *   The node the action is being performed on.
  */
-function hook_node_prepare($node) {
+function hook_node_prepare(stdClass $node) {
   if (!isset($node->comment)) {
     $node->comment = variable_get("comment_$node->type", COMMENT_NODE_OPEN);
   }
 }
 
 /**
  * The node is being cloned for translation.
  *
  * This hook can be used to load additional data or copy values from
  * $node->translation_source.
  *
  * @param $node
  *   The node the action is being performed on.
  */
-function hook_node_prepare_translation($node) {
+function hook_node_prepare_translation(stdClass $node) {
 }
 
 /**
  * The node is being displayed as a search result.
  *
  * If you want to display extra information with the result, return it.
  *
  * @param $node
  *   The node the action is being performed on.
  * @return
  *   Extra information to be displayed with search result.
  */
-function hook_node_search_result($node) {
+function hook_node_search_result(stdClass $node) {
   $comments = db_query('SELECT comment_count FROM {node_comment_statistics} WHERE nid = :nid', array('nid' => $node->nid))->fetchField();
   return format_plural($comments, '1 comment', '@count comments');
 }
 
 /**
  * The node passed validation and is about to be saved.
  *
  * Modules may make changes to the node before it is saved to the database.
  *
  * @param $node
  *   The node the action is being performed on.
  */
-function hook_node_presave($node) {
+function hook_node_presave(stdClass $node) {
   if ($node->nid && $node->moderate) {
     // Reset votes when node is updated:
     $node->score = 0;
     $node->users = '';
     $node->votes = 0;
   }
 }
 
 /**
  * The node being updated.
  *
  * @param $node
  *   The node the action is being performed on.
  */
-function hook_node_update($node) {
+function hook_node_update(stdClass $node) {
   db_update('mytable')
     ->fields(array('extra' => $node->extra))
     ->condition('nid', $node->nid)
     ->execute();
 }
 
 /**
  * The node is being indexed.
  *
  * If you want additional information to be indexed which is not already
  * visible through node "view", then you should return it here.
  *
  * @param $node
  *   The node the action is being performed on.
  * @return
  *   Array of additional information to be indexed.
  */
-function hook_node_update_index($node) {
+function hook_node_update_index(stdClass $node) {
   $text = '';
   $comments = db_query('SELECT subject, comment, format FROM {comment} WHERE nid = :nid AND status = :status', array(':nid' => $node->nid, ':status' => COMMENT_PUBLISHED));
   foreach ($comments as $comment) {
     $text .= '<h2>' . check_plain($comment->subject) . '</h2>' . check_markup($comment->comment, $comment->format);
   }
   return $text;
 }
 
 /**
@@ -496,19 +496,19 @@ function hook_node_update_index($node) {
  *
  * This hook can be used to check the node data. Errors should be set with
  * form_set_error().
  *
  * @param $node
  *   The node the action is being performed on.
  * @param $form
  *   The $form parameter from node_validate().
  */
-function hook_node_validate($node, $form) {
+function hook_node_validate(stdClass $node, $form) {
   if (isset($node->end) && isset($node->start)) {
     if ($node->start > $node->end) {
       form_set_error('time', t('An event may not end before it starts.'));
     }
   }
 }
 
 /**
  * The node content is being assembled before rendering.
@@ -527,19 +527,19 @@ function hook_node_validate($node, $form
  * @see taxonomy_node_view()
  * @see upload_node_view()
  * @see comment_node_view()
  *
  * @param $node
  *   The node the action is being performed on.
  * @param $build_mode
  *   The $build_mode parameter from node_build().
  */
-function hook_node_view($node, $build_mode) {
+function hook_node_view(stdClass $node, $build_mode) {
   $node->content['my_additional_field'] = array(
     '#value' => $additional_field,
     '#weight' => 10,
     '#theme' => 'mymodule_my_additional_field',
   );
 }
 
 /**
  * The node content was built, the module may modify the structured content.
@@ -552,19 +552,19 @@ function hook_node_view($node, $build_mo
  * structured content array, it may use this hook to add a #post_render callback.
  * Alternatively, it could also implement hook_preprocess_node(). See
  * drupal_render() and theme() documentation respectively for details.
  *
  * @param $node
  *   The node the action is being performed on.
  * @param $build_mode
  *   The $build_mode parameter from node_build().
  */
-function hook_node_build_alter($node, $build_mode) {
+function hook_node_build_alter(stdClass $node, $build_mode) {
   // Check for the existence of a field added by another module.
   if (isset($node->content['an_additional_field'])) {
     // Change its weight.
     $node->content['an_additional_field']['#weight'] = -10;
   }
 
   // Add a #post_render callback to act on the rendered HTML of the node.
   $node->content['#post_render'][] = 'my_module_node_post_render';
 }
@@ -737,34 +737,34 @@ function hook_node_type_delete($info) {
  *
  * @param $node
  *   The node being deleted.
  *
  * To take action when nodes of any type are deleted (not just nodes of
  * the type defined by this module), use hook_node() instead.
  *
  * For a detailed usage example, see node_example.module.
  */
-function hook_delete($node) {
+function hook_delete(stdClass $node) {
   db_delete('mytable')
     ->condition('nid', $nid->nid)
     ->execute();
 }
 
 /**
  * This is a hook used by node modules. It is called after load but before the
  * node is shown on the add/edit form.
  *
  * @param $node
  *   The node being saved.
  *
  * For a usage example, see image.module.
  */
-function hook_prepare($node) {
+function hook_prepare(stdClass $node) {
   if ($file = file_check_upload($field_name)) {
     $file = file_save_upload($field_name, _image_filename($file->filename, NULL, TRUE));
     if ($file) {
       if (!image_get_info($file->uri)) {
         form_set_error($field_name, t('Uploaded file is not a valid image'));
         return;
       }
     }
     else {
@@ -792,19 +792,19 @@ function hook_prepare($node) {
  *   edit form.
  *
  * The submit and preview buttons, taxonomy controls, and administrative
  * accoutrements are displayed automatically by node.module. This hook
  * needs to return the node title, the body text area, and fields
  * specific to the node type.
  *
  * For a detailed usage example, see node_example.module.
  */
-function hook_form($node, $form_state) {
+function hook_form(stdClass $node, $form_state) {
   $type = node_type_get_type($node);
 
   $form['title'] = array(
     '#type' => 'textfield',
     '#title' => check_plain($type->title_label),
     '#required' => TRUE,
   );
   $form['body'] = array(
     '#type' => 'textarea',
@@ -842,19 +842,19 @@ function hook_form($node, $form_state) {
  *
  * @param $node
  *   The node being inserted.
  *
  * To take action when nodes of any type are inserted (not just nodes of
  * the type(s) defined by this module), use hook_node() instead.
  *
  * For a detailed usage example, see node_example.module.
  */
-function hook_insert($node) {
+function hook_insert(stdClass $node) {
   db_insert('mytable')
     ->fields(array(
       'nid' => $node->nid,
       'extra' => $node->extra,
     ))
     ->execute();
 }
 
 /**
@@ -888,19 +888,19 @@ function hook_load($nodes) {
  *
  * @param $node
  *   The node being updated.
  *
  * To take action when nodes of any type are updated (not just nodes of
  * the type(s) defined by this module), use hook_node() instead.
  *
  * For a detailed usage example, see node_example.module.
  */
-function hook_update($node) {
+function hook_update(stdClass $node) {
   db_update('mytable')
     ->fields(array('extra' => $node->extra))
     ->condition('nid', $node->nid)
     ->execute();
 }
 
 /**
  * Verify a node editing form.
  *
@@ -917,19 +917,19 @@ function hook_update($node) {
  * this module), use hook_node() instead.
  *
  * Changes made to the $node object within a hook_validate() function will
  * have no effect. The preferred method to change a node's content is to use
  * hook_node_presave() instead. If it is really necessary to change
  * the node at the validate stage, you can use function form_set_value().
  *
  * For a detailed usage example, see node_example.module.
  */
-function hook_validate($node, &$form) {
+function hook_validate(stdClass $node, &$form) {
   if (isset($node->end) && isset($node->start)) {
     if ($node->start > $node->end) {
       form_set_error('time', t('An event may not end before it starts.'));
     }
   }
 }
 
 /**
  * Display a node.
@@ -950,19 +950,19 @@ function hook_validate($node, &$form) {
  *   used to control the relative positions of added elements. After this
  *   hook is invoked, node_build() calls field_attach_view() to add field
  *   views to $node->content, and then invokes hook_node_view() and
  *   hook_node_build_alter(), so if you want to affect the final
  *   view of the node, you might consider implementing one of these hooks
  *   instead.
  *
  * For a detailed usage example, see node_example.module.
  */
-function hook_view($node, $build_mode = 'full') {
+function hook_view(stdClass $node, $build_mode = 'full') {
   if ((bool)menu_get_object()) {
     $breadcrumb = array();
     $breadcrumb[] = array('path' => 'example', 'title' => t('example'));
     $breadcrumb[] = array('path' => 'example/' . $node->field1,
       'title' => t('%category', array('%category' => $node->field1)));
     $breadcrumb[] = array('path' => 'node/' . $node->nid);
     menu_set_location($breadcrumb);
   }
 
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.1137
diff -u -9 -p -r1.1137 node.module
--- modules/node/node.module	3 Oct 2009 17:45:26 -0000	1.1137
+++ modules/node/node.module	3 Oct 2009 17:59:37 -0000
@@ -784,19 +784,19 @@ function node_load($nid = NULL, $vid = N
   $nids = (isset($nid) ? array($nid) : array());
   $conditions = (isset($vid) ? array('vid' => $vid) : array());
   $node = node_load_multiple($nids, $conditions, $reset);
   return $node ? reset($node) : FALSE;
 }
 
 /**
  * Perform validation checks on the given node.
  */
-function node_validate($node, $form = array()) {
+function node_validate(stdClass $node, $form = array()) {
   $type = node_type_get_type($node);
 
   if (isset($node->nid) && (node_last_changed($node->nid) > $node->changed)) {
     form_set_error('changed', t('The content on this page has either been modified by another user, or you have already submitted modifications using this form. As a result, your changes cannot be saved.'));
   }
 
   if (user_access('administer nodes')) {
     // Validate the "authored by" field.
     if (!empty($node->name) && !($account = user_load_by_name($node->name))) {
@@ -839,19 +839,19 @@ function node_submit($node) {
 }
 
 /**
  * Save changes to a node or add a new node.
  *
  * @param $node
  *   The $node object to be saved. If $node->nid is
  *   omitted (or $node->is_new is TRUE), a new node will be added.
  */
-function node_save($node) {
+function node_save(stdClass $node) {
   field_attach_presave('node', $node);
   // Let modules modify the node before it is saved to the database.
   module_invoke_all('node_presave', $node);
   global $user;
 
   if (!isset($node->is_new)) {
     $node->is_new = empty($node->nid);
   }
 
@@ -939,19 +939,19 @@ function node_save($node) {
   db_ignore_slave();
 }
 
 /**
  * Helper function to save a revision with the uid of the current user.
  *
  * Node is taken by reference, because drupal_write_record() updates the
  * $node with the revision id, and we need to pass that back to the caller.
  */
-function _node_save_revision($node, $uid, $update = NULL) {
+function _node_save_revision(stdClass $node, $uid, $update = NULL) {
   $temp_uid = $node->uid;
   $node->uid = $uid;
   if (isset($update)) {
     drupal_write_record('node_revision', $node, $update);
   }
   else {
     drupal_write_record('node_revision', $node);
   }
   $node->uid = $temp_uid;
@@ -1078,19 +1078,19 @@ function node_build($node, $build_mode =
  * Contributed modules might define additional build modes, or use existing
  * build modes in additional contexts.
  *
  * @param $node
  *   A node object.
  * @param $build_mode
  *   Build mode, e.g. 'full', 'teaser'...
  *
  */
-function node_build_content($node, $build_mode = 'full') {
+function node_build_content(stdClass $node, $build_mode = 'full') {
   // The 'view' hook can be implemented to overwrite the default function
   // to display nodes.
   if (node_hook($node, 'view')) {
     $node = node_invoke($node, 'view', $build_mode);
   }
 
   // Build fields content.
   if (empty($node->content)) {
     $node->content = array();
@@ -1124,19 +1124,19 @@ function node_build_content($node, $buil
  * Generate an array which displays a node detail page.
  *
  * @param $node
  *   A node object.
  * @param $message
  *   A flag which sets a page title relevant to the revision being viewed.
  * @return
  *   A $page element suitable for use by drupal_page_render().
  */
-function node_show($node, $message = FALSE) {
+function node_show(stdClass $node, $message = FALSE) {
   if ($message) {
     drupal_set_title(t('Revision of %title from %date', array('%title' => $node->title, '%date' => format_date($node->revision_timestamp))), PASS_THROUGH);
   }
 
   // Update the history table, stating that this user viewed this node.
   node_tag_new($node->nid);
 
   // For markup consistency with other pages, use node_build_multiple() rather than node_build().
   return node_build_multiple(array($node), 'full');
@@ -1533,19 +1533,19 @@ function theme_node_search_admin($form) 
     $row[] = drupal_render($form['factors'][$key]);
     $rows[] = $row;
   }
   $output .= theme('table', $header, $rows);
 
   $output .= drupal_render_children($form);
   return $output;
 }
 
-function _node_revision_access($node, $op = 'view') {
+function _node_revision_access(stdClass $node, $op = 'view') {
   $access = &drupal_static(__FUNCTION__, array());
   if (!isset($access[$node->vid])) {
     $node_current_revision = node_load($node->nid);
     $is_current_revision = $node_current_revision->vid == $node->vid;
     // There should be at least two revisions. If the vid of the given node
     // and the vid of the current revision differs, then we already have two
     // different revisions so there is no need for a separate database check.
     // Also, if you try to revert to or delete the current revision, that's
     // not good.
@@ -1761,19 +1761,19 @@ function node_menu() {
     'type' => MENU_CALLBACK,
     'file' => 'node.pages.inc',
   );
   return $items;
 }
 
 /**
  * Title callback.
  */
-function node_page_title($node) {
+function node_page_title(stdClass $node) {
   return $node->title;
 }
 
 /**
  * Theme callback for creating and editing nodes.
  */
 function _node_custom_theme() {
   // Use the administration theme if the site is configured to use it for
   // nodes.
@@ -1790,19 +1790,19 @@ function node_init() {
 }
 
 function node_last_changed($nid) {
   return db_query('SELECT changed FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetch()->changed;
 }
 
 /**
  * Return a list of all the existing revision numbers.
  */
-function node_revision_list($node) {
+function node_revision_list(stdClass $node) {
   $revisions = array();
   $result = db_query('SELECT r.vid, r.title, r.log, r.uid, n.vid AS current_vid, r.timestamp, u.name FROM {node_revision} r LEFT JOIN {node} n ON n.vid = r.vid INNER JOIN {users} u ON u.uid = r.uid WHERE r.nid = :nid ORDER BY r.timestamp DESC', array(':nid' => $node->nid));
   foreach ($result as $revision) {
     $revisions[$revision->vid] = $revision;
   }
 
   return $revisions;
 }
 
@@ -1978,19 +1978,19 @@ function node_page_default() {
       '#suffix' => '</div>',
     );
   }
   return $build;
 }
 
 /**
  * Menu callback; view a single node.
  */
-function node_page_view($node) {
+function node_page_view(stdClass $node) {
   drupal_set_title($node->title);
   return node_show($node);
 }
 
 /**
  * Implement hook_update_index().
  */
 function node_update_index() {
   $limit = (int)variable_get('search_cron_limit', 100);
@@ -2002,19 +2002,19 @@ function node_update_index() {
   }
 }
 
 /**
  * Index a single node.
  *
  * @param $node
  *   The node to index.
  */
-function _node_index_node($node) {
+function _node_index_node(stdClass $node) {
   $node = node_load($node->nid);
 
   // Save the changed time of the most recent indexed node, for the search
   // results half-life calculation.
   variable_set('node_cron_last', $node->changed);
 
   // Render the node.
   node_build_content($node, 'search_index');
   $node->rendered = drupal_render($node->content);
@@ -2286,19 +2286,19 @@ function node_access($op, $node, $accoun
   }
 
   return FALSE;
 }
 
 /**
  * Implement hook_node_access().
  */
 function node_node_access($node, $op, $account) {
-  $type = is_string($node) ? $node : (is_array($node) ? $node['type'] : $node->type);
+  $type = is_string($node) ? $node : $node->type;
 
   if (in_array($type, node_permissions_get_configured_types())) {
     if ($op == 'create' && user_access('create ' . $type . ' content', $account)) {
       return NODE_ACCESS_ALLOW;
     }
 
     if ($op == 'update') {
       if (user_access('edit any ' . $type . ' content', $account) || (user_access('edit own ' . $type . ' content', $account) && ($account->uid == $node->uid))) {
         return NODE_ACCESS_ALLOW;
@@ -2505,19 +2505,19 @@ function node_query_node_access_alter(Qu
  *
  * @see hook_node_access_records()
  *
  * This function is the only function that should write to the node_access
  * table.
  *
  * @param $node
  *   The $node to acquire grants for.
  */
-function node_access_acquire_grants($node) {
+function node_access_acquire_grants(stdClass $node) {
   $grants = module_invoke_all('node_access_records', $node);
   // Let modules alter the grants.
   drupal_alter('node_access_records', $grants, $node);
   // If no grants are set, then use the default grant.
   if (empty($grants)) {
     $grants[] = array('realm' => 'all', 'gid' => 0, 'grant_view' => 1, 'grant_update' => 0, 'grant_delete' => 0);
   }
   else {
     // Retain grants by highest priority.
@@ -2535,32 +2535,33 @@ function node_access_acquire_grants($nod
 /**
  * This function will write a list of grants to the database, deleting
  * any pre-existing grants. If a realm is provided, it will only
  * delete grants from that realm, but it will always delete a grant
  * from the 'all' realm. Modules which utilize node_access can
  * use this function when doing mass updates due to widespread permission
  * changes.
  *
  * @param $node
- *   The $node being written to. All that is necessary is that it contain a nid.
+ *   The $node being written to. All that is necessary is that it contains a
+ *   nid.
  * @param $grants
  *   A list of grants to write. Each grant is an array that must contain the
  *   following keys: realm, gid, grant_view, grant_update, grant_delete.
  *   The realm is specified by a particular module; the gid is as well, and
  *   is a module-defined id to define grant privileges. each grant_* field
  *   is a boolean value.
  * @param $realm
  *   If provided, only read/write grants for that realm.
  * @param $delete
  *   If false, do not delete records. This is only for optimization purposes,
  *   and assumes the caller has already performed a mass delete of some form.
  */
-function node_access_write_grants($node, $grants, $realm = NULL, $delete = TRUE) {
+function node_access_write_grants(stdClass $node, $grants, $realm = NULL, $delete = TRUE) {
   if ($delete) {
     $query = db_delete('node_access')->condition('nid', $node->nid);
     if ($realm) {
       $query->condition('realm', array($realm, 'all'), 'IN');
     }
     $query->execute();
   }
 
   // Only perform work when node_access modules are active.
@@ -2737,19 +2738,19 @@ function _node_access_rebuild_batch_fini
 
 /**
  * @defgroup node_content Hook implementations for user-created content types.
  * @{
  */
 
 /**
  * Implement hook_form().
  */
-function node_content_form($node, $form_state) {
+function node_content_form(stdClass $node, $form_state) {
   $type = node_type_get_type($node);
 
   if ($type->has_title) {
     $form['title'] = array(
       '#type' => 'textfield',
       '#title' => check_plain($type->title_label),
       '#required' => TRUE,
       '#default_value' => $node->title,
       '#maxlength' => 255,
@@ -2865,82 +2866,82 @@ function node_action_info() {
       'triggers' => array('node_presave', 'node_insert', 'node_update'),
     ),
   );
 }
 
 /**
  * Implement a Drupal action.
  * Sets the status of a node to 1, meaning published.
  */
-function node_publish_action($node, $context = array()) {
+function node_publish_action(stdClass $node, $context = array()) {
   $node->status = NODE_PUBLISHED;
   watchdog('action', 'Set @type %title to published.', array('@type' => node_type_get_name($node), '%title' => $node->title));
 }
 
 /**
  * Implement a Drupal action.
  * Sets the status of a node to 0, meaning unpublished.
  */
-function node_unpublish_action($node, $context = array()) {
+function node_unpublish_action(stdClass $node, $context = array()) {
   $node->status = NODE_NOT_PUBLISHED;
   watchdog('action', 'Set @type %title to unpublished.', array('@type' => node_type_get_name($node), '%title' => $node->title));
 }
 
 /**
  * Implement a Drupal action.
  * Sets the sticky-at-top-of-list property of a node to 1.
  */
-function node_make_sticky_action($node, $context = array()) {
+function node_make_sticky_action(stdClass $node, $context = array()) {
   $node->sticky = NODE_STICKY;
   watchdog('action', 'Set @type %title to sticky.', array('@type' => node_type_get_name($node), '%title' => $node->title));
 }
 
 /**
  * Implement a Drupal action.
  * Sets the sticky-at-top-of-list property of a node to 0.
  */
-function node_make_unsticky_action($node, $context = array()) {
+function node_make_unsticky_action(stdClass $node, $context = array()) {
   $node->sticky = NODE_NOT_STICKY;
   watchdog('action', 'Set @type %title to unsticky.', array('@type' => node_type_get_name($node), '%title' => $node->title));
 }
 
 /**
  * Implement a Drupal action.
  * Sets the promote property of a node to 1.
  */
-function node_promote_action($node, $context = array()) {
+function node_promote_action(stdClass $node, $context = array()) {
   $node->promote = NODE_PROMOTED;
   watchdog('action', 'Promoted @type %title to front page.', array('@type' => node_type_get_name($node), '%title' => $node->title));
 }
 
 /**
  * Implement a Drupal action.
  * Sets the promote property of a node to 0.
  */
-function node_unpromote_action($node, $context = array()) {
+function node_unpromote_action(stdClass $node, $context = array()) {
   $node->promote = NODE_NOT_PROMOTED;
   watchdog('action', 'Removed @type %title from front page.', array('@type' => node_type_get_name($node), '%title' => $node->title));
 }
 
 /**
  * Implement a Drupal action.
  * Saves a node.
  */
-function node_save_action($node) {
+function node_save_action(stdClass $node) {
   node_save($node);
   watchdog('action', 'Saved @type %title', array('@type' => node_type_get_name($node), '%title' => $node->title));
 }
 
 /**
  * Implement a configurable Drupal action.
  * Assigns ownership of a node to a user.
  */
-function node_assign_owner_action($node, $context) {
+function node_assign_owner_action(stdClass $node, $context) {
   $node->uid = $context['owner_uid'];
   $owner_name = db_query("SELECT name FROM {users} WHERE uid = :uid", array(':uid' => $context['owner_uid']))->fetchField();
   watchdog('action', 'Changed owner of @type %title to uid %name.', array('@type' =>  node_type_get_type($node), '%title' => $node->title, '%name' => $owner_name));
 }
 
 function node_assign_owner_action_form($context) {
   $description = t('The username of the user to which you would like to assign ownership.');
   $count = db_query("SELECT COUNT(*) FROM {users}")->fetchField();
   $owner_name = '';
@@ -3002,25 +3003,25 @@ function node_unpublish_by_keyword_actio
 
 function node_unpublish_by_keyword_action_submit($form, $form_state) {
   return array('keywords' => drupal_explode_tags($form_state['values']['keywords']));
 }
 
 /**
  * Implement a configurable Drupal action.
  * Unpublish a node if it contains a certain string.
  *
+ * @param $node
+ *   A node object.
  * @param $context
  *   An array providing more information about the context of the call to this
  *   action.
- * @param $comment
- *   A node object.
  */
-function node_unpublish_by_keyword_action($node, $context) {
+function node_unpublish_by_keyword_action(stdClass $node, $context) {
   foreach ($context['keywords'] as $keyword) {
     if (strpos(drupal_render(node_build(clone $node)), $keyword) !== FALSE || strpos($node->title, $keyword) !== FALSE) {
       $node->status = NODE_NOT_PUBLISHED;
       watchdog('action', 'Set @type %title to unpublished.', array('@type' => node_type_get_name($node), '%title' => $node->title));
       break;
     }
   }
 }
 
Index: modules/node/node.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v
retrieving revision 1.84
diff -u -9 -p -r1.84 node.pages.inc
--- modules/node/node.pages.inc	3 Oct 2009 17:45:26 -0000	1.84
+++ modules/node/node.pages.inc	3 Oct 2009 17:59:37 -0000
@@ -4,19 +4,19 @@
 /**
  * @file
  * Page callbacks for adding, editing, deleting, and revisions management for content.
  */
 
 
 /**
  * Menu callback; presents the node editing form, or redirects to delete confirmation.
  */
-function node_page_edit($node) {
+function node_page_edit(stdClass $node) {
   $type_name = node_type_get_name($node);
   drupal_set_title(t('<em>Edit @type</em> @title', array('@type' => $type_name, '@title' => $node->title)), PASS_THROUGH);
   return drupal_get_form($node->type . '_node_form', $node);
 }
 
 function node_add_page() {
   $item = menu_get_item();
   $content = system_admin_menu_block($item);
   // Bypass the node/add listing if only one content type is available.
@@ -73,19 +73,19 @@ function node_add($type) {
 function node_form_validate($form, &$form_state) {
   $node = (object)$form_state['values'];
   node_validate($node, $form);
 
   // Field validation. Requires access to $form_state, so this cannot be
   // done in node_validate() as it currently exists.
   field_attach_form_validate('node', $node, $form, $form_state);
 }
 
-function node_object_prepare($node) {
+function node_object_prepare(stdClass $node) {
   // Set up default values, if required.
   $node_options = variable_get('node_options_' . $node->type, array('status', 'promote'));
   // If this is a new node, fill in the default values.
   if (!isset($node->nid)) {
     foreach (array('status', 'promote', 'sticky') as $key) {
       $node->$key = in_array($key, $node_options);
     }
     global $user;
     $node->uid = $user->uid;
@@ -100,19 +100,19 @@ function node_object_prepare($node) {
   $node->revision = in_array('revision', $node_options);
 
   node_invoke($node, 'prepare');
   module_invoke_all('node_prepare', $node);
 }
 
 /**
  * Generate the node add/edit form array.
  */
-function node_form($form, &$form_state, $node) {
+function node_form($form, &$form_state, stdClass $node) {
   global $user;
 
   if (isset($form_state['node'])) {
     $node = (object)($form_state['node'] + (array)$node);
   }
   if (isset($form_state['node_preview'])) {
     $form['#prefix'] = $form_state['node_preview'];
   }
   foreach (array('title') as $key) {
@@ -327,19 +327,19 @@ function theme_node_form($form) {
 
   $output .= "</div>\n";
 
   return $output;
 }
 
 /**
  * Generate a node preview.
  */
-function node_preview($node) {
+function node_preview(stdClass $node) {
   if (node_access('create', $node) || node_access('update', $node)) {
     _field_invoke_multiple('load', 'node', array($node->nid => $node));
     // Load the user's name when needed.
     if (isset($node->name)) {
       // The use of isset() is mandatory in the context of user IDs, because
       // user ID 0 denotes the anonymous user.
       if ($user = user_load_by_name($node->name)) {
         $node->uid = $user->uid;
         $node->picture = $user->picture;
@@ -371,19 +371,19 @@ function node_preview($node) {
 
 /**
  * Display a node preview for display during node creation and editing.
  *
  * @param $node
  *   The node object which is being previewed.
  *
  * @ingroup themeable
  */
-function theme_node_preview($node) {
+function theme_node_preview(stdClass $node) {
   $output = '<div class="preview">';
 
   $preview_trimmed_version = FALSE;
 
   $trimmed = drupal_render(node_build(clone $node, 'teaser'));
   $full = drupal_render(node_build($node, 'full'));
 
   // Do we need to preview trimmed version of post as well as full version?
   if ($trimmed != $full) {
@@ -445,19 +445,19 @@ function node_form_submit_build_node($fo
 
   $form_state['node'] = (array)$node;
   $form_state['rebuild'] = TRUE;
   return $node;
 }
 
 /**
  * Menu callback -- ask for confirmation of node deletion
  */
-function node_delete_confirm($form, &$form_state, $node) {
+function node_delete_confirm($form, &$form_state, stdClass $node) {
   $form['nid'] = array(
     '#type' => 'value',
     '#value' => $node->nid,
   );
 
   return confirm_form($form,
     t('Are you sure you want to delete %title?', array('%title' => $node->title)),
     isset($_GET['destination']) ? $_GET['destination'] : 'node/' . $node->nid,
     t('This action cannot be undone.'),
@@ -477,19 +477,19 @@ function node_delete_confirm_submit($for
     drupal_set_message(t('@type %title has been deleted.', array('@type' => node_type_get_name($node), '%title' => $node->title)));
   }
 
   $form_state['redirect'] = '<front>';
 }
 
 /**
  * Generate an overview table of older revisions of a node.
  */
-function node_revision_overview($node) {
+function node_revision_overview(stdClass $node) {
   drupal_set_title(t('Revisions for %title', array('%title' => $node->title)), PASS_THROUGH);
 
   $header = array(t('Revision'), array('data' => t('Operations'), 'colspan' => 2));
 
   $revisions = node_revision_list($node);
 
   $rows = array();
   $revert_permission = FALSE;
   if ((user_access('revert revisions') || user_access('administer nodes')) && node_access('update', $node)) {
Index: modules/node/tests/node_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/tests/node_test.module,v
retrieving revision 1.5
diff -u -9 -p -r1.5 node_test.module
--- modules/node/tests/node_test.module	22 Jun 2009 09:10:06 -0000	1.5
+++ modules/node/tests/node_test.module	3 Oct 2009 17:59:37 -0000
@@ -4,19 +4,19 @@
 /**
  * @file
  * Dummy module implementing node related hooks to test API interaction with
  * the Node module.
  */
 
 /**
  * Implement hook_node_view().
  */
-function node_test_node_view($node, $build_mode) {
+function node_test_node_view(stdClass $node, $build_mode) {
   if ($build_mode == 'rss') {
     // Add RSS elements and namespaces when building the RSS feed.
     $node->rss_elements[] = array(
       'key' => 'testElement',
       'value' => t('Value of testElement RSS element for node !nid.', array('!nid' => $node->nid)),
     );
     $node->rss_namespaces['xmlns:drupaltest'] = 'http://example.com/test-namespace';
 
     // Add content that should be displayed only in the RSS feed.
@@ -45,19 +45,19 @@ function node_test_node_grants($account,
     'test_article_realm' => array(1),
     'test_page_realm' => array(1),
     'test_alter_realm' => array(2),
   );
 }
 
 /**
  * Implement hook_node_access_records().
  */
-function node_test_node_access_records($node) {
+function node_test_node_access_records(stdClass $node) {
   $grants = array();
   if ($node->type == 'article') {
     // Create grant in arbitrary article_realm for article nodes.
     $grants[] = array(
       'realm' => 'test_article_realm',
       'gid' => 1,
       'grant_view' => 1,
       'grant_update' => 0,
       'grant_delete' => 0,
@@ -75,19 +75,19 @@ function node_test_node_access_records($
       'priority' => 0,
     );
   }
   return $grants;
 }
 
 /**
  * Implement hook_node_access_records_alter().
  */
-function node_test_node_access_records_alter(&$grants, $node) {
+function node_test_node_access_records_alter(&$grants, stdClass $node) {
   if (!empty($grants)) {
     foreach ($grants as $key => $grant) {
       // Alter grant from test_page_realm to test_alter_realm and modify the gid.
       if ($grant['realm'] == 'test_page_realm' && $node->promote) {
         $grants[$key]['realm'] = 'test_alter_realm';
         $grants[$key]['gid'] = 2;
       }
     }
   }
Index: modules/path/path.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/path/path.module,v
retrieving revision 1.170
diff -u -9 -p -r1.170 path.module
--- modules/path/path.module	5 Sep 2009 15:05:03 -0000	1.170
+++ modules/path/path.module	3 Oct 2009 17:59:37 -0000
@@ -145,19 +145,19 @@ function path_set_alias($path = NULL, $a
         ->execute();
     }
   }
   drupal_clear_path_cache();
 }
 
 /**
  * Implement hook_node_validate().
  */
-function path_node_validate($node, $form) {
+function path_node_validate(stdClass $node, $form) {
   if (user_access('create url aliases') || user_access('administer url aliases')) {
     if (isset($node->path)) {
       $language = isset($node->language) ? $node->language : '';
       $node->path = trim($node->path);
       $has_alias = db_query("SELECT COUNT(dst) FROM {url_alias} WHERE src <> :src AND dst = :dst AND language = :language", array(
         ':src' => "node/$node->nid",
         ':dst' => $node->path,
         ':language' => $language,
       ))
@@ -181,43 +181,43 @@ function path_node_load($nodes, $types) 
     if ($path != $alias) {
       $node->path = $alias;
     }
   }
 }
 
 /**
  * Implement hook_node_insert().
  */
-function path_node_insert($node) {
+function path_node_insert(stdClass $node) {
   if (user_access('create url aliases') || user_access('administer url aliases')) {
     $language = isset($node->language) ? $node->language : '';
     // Don't try to insert if path is NULL. We may have already set
     // the alias ahead of time.
     if (isset($node->path)) {
       path_set_alias('node/' . $node->nid, $node->path, NULL, $language);
     }
   }
 }
 
 /**
  * Implement hook_node_update().
  */
-function path_node_update($node) {
+function path_node_update(stdClass $node) {
   if (user_access('create url aliases') || user_access('administer url aliases')) {
     $language = isset($node->language) ? $node->language : '';
     path_set_alias('node/' . $node->nid, isset($node->path) ? $node->path : NULL, isset($node->pid) ? $node->pid : NULL, $language);
   }
 }
 
 /**
  * Implement hook_node_delete().
  */
-function path_node_delete($node) {
+function path_node_delete(stdClass $node) {
   path_set_alias('node/' . $node->nid);
 }
 
 /**
  * Implement hook_taxonomy_term_delete().
  */
 function path_taxonomy_term_delete($term) {
   path_set_alias('taxonomy/term/' . $term->tid);
 }
Index: modules/poll/poll.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/poll/poll.module,v
retrieving revision 1.315
diff -u -9 -p -r1.315 poll.module
--- modules/poll/poll.module	2 Oct 2009 00:04:20 -0000	1.315
+++ modules/poll/poll.module	3 Oct 2009 17:59:37 -0000
@@ -106,19 +106,19 @@ function poll_menu() {
     'file' => 'poll.pages.inc',
   );
 
   return $items;
 }
 
 /**
  * Callback function to see if a node is acceptable for poll menu items.
  */
-function _poll_menu_access($node, $perm, $inspect_allowvotes) {
+function _poll_menu_access(stdClass $node, $perm, $inspect_allowvotes) {
   return user_access($perm) && ($node->type == 'poll') && ($node->allowvotes || !$inspect_allowvotes);
 }
 
 /**
  * Implement hook_block_info().
  */
 function poll_block_info() {
   if (user_access('access content')) {
     $blocks['recent']['info'] = t('Most recent poll');
@@ -205,19 +205,19 @@ function poll_field_extra_fields($bundle
     );
   }
 
   return $extra;
 }
 
 /**
  * Implement hook_form().
  */
-function poll_form($node, $form_state) {
+function poll_form(stdClass $node, $form_state) {
   global $user;
 
   $admin = user_access('administer nodes') || user_access('edit any poll content') || (user_access('edit own poll content') && $user->uid == $node->uid);
 
   $type = node_type_get_type($node);
 
   $form = array(
     '#cache' => TRUE,
   );
@@ -401,19 +401,19 @@ function poll_choice_js($form, $form_sta
 function poll_node_form_submit(&$form, &$form_state) {
   // Renumber fields
   $form_state['values']['choice'] = array_values($form_state['values']['choice']);
   $form_state['values']['teaser'] = poll_teaser((object)$form_state['values']);
 }
 
 /**
  * Implement hook_validate().
  */
-function poll_validate($node, $form) {
+function poll_validate(stdClass $node, $form) {
   if (isset($node->title)) {
     // Check for at least two options and validate amount of votes:
     $realchoices = 0;
     // Renumber fields
     $node->choice = array_values($node->choice);
     foreach ($node->choice as $i => $choice) {
       if ($choice['chtext'] != '') {
         $realchoices++;
       }
@@ -425,19 +425,19 @@ function poll_validate($node, $form) {
     if ($realchoices < 2) {
       form_set_error("choice][$realchoices][chtext", t('You must fill in at least two choices.'));
     }
   }
 }
 
 /**
  * Implement hook_node_prepare_translation().
  */
-function poll_node_prepare_translation($node) {
+function poll_node_prepare_translation(stdClass $node) {
   if ($node->type == 'poll') {
     $node->choice = $node->translation_source->choice;
   }
 }
 
 /**
  * Implement hook_load().
  */
 function poll_load($nodes) {
@@ -468,19 +468,19 @@ function poll_load($nodes) {
     foreach ($poll as $key => $value) {
       $nodes[$node->nid]->$key = $value;
     }
   }
 }
 
 /**
  * Implement hook_insert().
  */
-function poll_insert($node) {
+function poll_insert(stdClass $node) {
   if (!user_access('administer nodes')) {
     // Make sure all votes are 0 initially
     foreach ($node->choice as $i => $choice) {
       $node->choice[$i]['chvotes'] = 0;
     }
     $node->active = 1;
   }
 
   db_insert('poll')
@@ -502,19 +502,19 @@ function poll_insert($node) {
         ))
         ->execute();
     }
   }
 }
 
 /**
  * Implement hook_update().
  */
-function poll_update($node) {
+function poll_update(stdClass $node) {
   // Update poll settings.
   db_update('poll')
     ->fields(array(
       'runtime' => $node->runtime,
       'active' => $node->active,
     ))
     ->condition('nid', $node->nid)
     ->execute();
 
@@ -539,37 +539,37 @@ function poll_update($node) {
         ->condition('chid', $key)
         ->execute();
     }
   }
 }
 
 /**
  * Implement hook_delete().
  */
-function poll_delete($node) {
+function poll_delete(stdClass $node) {
   db_delete('poll')
     ->condition('nid', $node->nid)
     ->execute();
   db_delete('poll_choice')
     ->condition('nid', $node->nid)
     ->execute();
   db_delete('poll_vote')
     ->condition('nid', $node->nid)
     ->execute();
 }
 
 /**
  * Return content for 'latest poll' block.
  *
  * @param $node
  *   The node object to load.
  */
-function poll_block_latest_poll_view($node) {
+function poll_block_latest_poll_view(stdClass $node) {
   global $user;
   $output = '';
 
   // This is necessary for shared objects because PHP doesn't copy objects, but
   // passes them by reference.  So when the objects are cached it can result in
   // the wrong output being displayed on subsequent calls.  The cloning and
   // unsetting of $node->content prevents the block output from being the same
   // as the node output.
   $node = clone $node;
@@ -595,56 +595,56 @@ function poll_block_latest_poll_view($no
   }
 
   return $node;
 }
 
 
 /**
  * Implement hook_view().
  */
-function poll_view($node, $build_mode = 'full') {
+function poll_view(stdClass $node, $build_mode = 'full') {
   global $user;
   $output = '';
 
   if (!empty($node->allowvotes) && empty($node->show_results)) {
     $node->content['poll_view_voting'] = drupal_get_form('poll_view_voting', $node);
   }
   else {
     $node->content['poll_view_results'] = array('#markup' => poll_view_results($node, $build_mode));
   }
   return $node;
 }
 
 /**
  * Creates a simple teaser that lists all the choices.
  *
  * This is primarily used for RSS.
  */
-function poll_teaser($node) {
+function poll_teaser(stdClass $node) {
   $teaser = NULL;
   if (is_array($node->choice)) {
     foreach ($node->choice as $k => $choice) {
       if ($choice['chtext'] != '') {
         $teaser .= '* ' . check_plain($choice['chtext']) . "\n";
       }
     }
   }
   return $teaser;
 }
 
 /**
  * Generates the voting form for a poll.
  *
  * @ingroup forms
  * @see poll_vote()
  * @see phptemplate_preprocess_poll_vote()
  */
-function poll_view_voting($form, &$form_state, $node, $block = FALSE) {
+function poll_view_voting($form, &$form_state, stdClass $node, $block = FALSE) {
   if ($node->choice) {
     $list = array();
     foreach ($node->choice as $i => $choice) {
       $list[$i] = check_plain($choice['chtext']);
     }
     $form['choice'] = array(
       '#type' => 'radios',
       '#default_value' => -1,
       '#options' => $list,
@@ -723,19 +723,19 @@ function template_preprocess_poll_vote(&
   // If this is a block, allow a different tpl.php to be used.
   if ($variables['block']) {
     $variables['template_files'][] = 'poll-vote-block';
   }
 }
 
 /**
  * Generates a graphical representation of the results of a poll.
  */
-function poll_view_results($node, $build_mode, $block = FALSE) {
+function poll_view_results(stdClass $node, $build_mode, $block = FALSE) {
   // Count the votes and find the maximum
   $total_votes = 0;
   $max_votes = 0;
   foreach ($node->choice as $choice) {
     if (isset($choice['chvotes'])) {
       $total_votes += $choice['chvotes'];
       $max_votes = max($max_votes, $choice['chvotes']);
     }
   }
Index: modules/poll/poll.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/poll/poll.pages.inc,v
retrieving revision 1.20
diff -u -9 -p -r1.20 poll.pages.inc
--- modules/poll/poll.pages.inc	29 Jul 2009 06:39:34 -0000	1.20
+++ modules/poll/poll.pages.inc	3 Oct 2009 17:59:38 -0000
@@ -43,19 +43,19 @@ function poll_page() {
   }
   $output .= '</ul>';
   $output .= theme("pager", NULL);
   return $output;
 }
 
 /**
  * Callback for the 'votes' tab for polls you can see other votes on
  */
-function poll_votes($node) {
+function poll_votes(stdClass $node) {
   $votes_per_page = 20;
   drupal_set_title($node->title);
 
   $header[] = array('data' => t('Visitor'), 'field' => 'u.name');
   $header[] = array('data' => t('Vote'), 'field' => 'pc.chtext');
   $header[] = array('data' => t('Timestamp'), 'field' => 'pv.timestamp', 'sort' => 'desc');
 
   $select = db_select('poll_vote', 'pv')->extend('PagerDefault')->extend('TableSort');
   $select->join('poll_choice', 'pc', 'pv.chid = pc.chid');
@@ -84,14 +84,14 @@ function poll_votes($node) {
     '#prefix' => t('This table lists all the recorded votes for this poll. If anonymous users are allowed to vote, they will be identified by the IP address of the computer they used when they voted.'),
   );
   $build['poll_votes_pager'] = array('#theme' => 'pager');
   return $build;
 }
 
 /**
  * Callback for the 'results' tab for polls you can vote on
  */
-function poll_results($node) {
+function poll_results(stdClass $node) {
   drupal_set_title($node->title);
   $node->show_results = TRUE;
   return node_show($node);
 }
Index: modules/search/search.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/search/search.module,v
retrieving revision 1.318
diff -u -9 -p -r1.318 search.module
--- modules/search/search.module	21 Sep 2009 06:44:14 -0000	1.318
+++ modules/search/search.module	3 Oct 2009 17:59:38 -0000
@@ -709,34 +709,34 @@ function search_touch_node($nid) {
     ->fields(array('reindex' => REQUEST_TIME))
     ->condition('type', 'node')
     ->condition('sid', $nid)
     ->execute();
 }
 
 /**
  * Implement hook_node_update_index().
  */
-function search_node_update_index($node) {
+function search_node_update_index(stdClass $node) {
   // Transplant links to a node into the target node.
   $result = db_query("SELECT caption FROM {search_node_links} WHERE nid = :nid", array(':nid' => $node->nid));
   $output = array();
   foreach ($result as $link) {
     $output[] = $link->caption;
   }
   if (count($output)) {
     return '<a>(' . implode(', ', $output) . ')</a>';
   }
 }
 
 /**
  * Implement hook_node_update().
  */
-function search_node_update($node) {
+function search_node_update(stdClass $node) {
   // Reindex the node when it is updated. The node is automatically indexed
   // when it is added, simply by being added to the node table.
   search_touch_node($node->nid);
 }
 
 /**
  * Implement hook_comment_insert().
  */
 function search_comment_insert($comment) {
Index: modules/statistics/statistics.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/statistics/statistics.module,v
retrieving revision 1.320
diff -u -9 -p -r1.320 statistics.module
--- modules/statistics/statistics.module	5 Sep 2009 13:49:28 -0000	1.320
+++ modules/statistics/statistics.module	3 Oct 2009 17:59:38 -0000
@@ -97,19 +97,19 @@ function statistics_permission() {
       'title' => t('View post access counter'),
       'description' => t('View the total number of times a piece of content has been accessed.'),
     ),
   );
 }
 
 /**
  * Implement hook_node_view().
  */
-function statistics_node_view($node, $build_mode) {
+function statistics_node_view(stdClass $node, $build_mode) {
   if ($build_mode != 'rss') {
     $links = array();
     if (user_access('view post access counter')) {
       $statistics = statistics_get($node->nid);
       if ($statistics) {
         $links['statistics_counter']['title'] = format_plural($statistics['totalcount'], '1 read', '@count reads');
       }
     }
 
@@ -370,19 +370,19 @@ function _statistics_format_item($title,
   $path = ($path ? $path : '/');
   $output  = ($title ? "$title<br />" : '');
   $output .= _statistics_link($path);
   return $output;
 }
 
 /**
  * Implement hook_node_delete().
  */
-function statistics_node_delete($node) {
+function statistics_node_delete(stdClass $node) {
   // clean up statistics table when node is deleted
   db_delete('node_counter')
     ->condition('nid', $node->nid)
     ->execute();
 }
 
 /**
  * Implement hook_ranking().
  */
Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.513
diff -u -9 -p -r1.513 taxonomy.module
--- modules/taxonomy/taxonomy.module	26 Sep 2009 15:57:39 -0000	1.513
+++ modules/taxonomy/taxonomy.module	3 Oct 2009 17:59:38 -0000
@@ -94,19 +94,19 @@ function taxonomy_theme() {
     'taxonomy_autocomplete' => array(
       'arguments' => array('element' => NULL),
     ),
   );
 }
 
 /**
  * Implement hook_node_view().
  */
-function taxonomy_node_view($node, $build_mode) {
+function taxonomy_node_view(stdClass $node, $build_mode) {
   if (empty($node->taxonomy)) {
     return;
   }
 
   if ($build_mode == 'rss') {
     // Provide category information for RSS feeds.
     foreach ($node->taxonomy as $term) {
       $node->rss_elements[] = array(
         'key' => 'category',
@@ -750,19 +750,19 @@ function taxonomy_form_alter(&$form, $fo
 /**
  * Helper function to convert terms after a preview.
  *
  * After preview the tags are an array instead of proper objects. This function
  * converts them back to objects with the exception of 'free tagging' terms,
  * because new tags can be added by the user before preview and those do not
  * yet exist in the database. We therefore save those tags as a string so
  * we can fill the form again after the preview.
  */
-function taxonomy_preview_terms($node) {
+function taxonomy_preview_terms(stdClass $node) {
   $taxonomy = array();
   if (isset($node->taxonomy)) {
     foreach ($node->taxonomy as $key => $term) {
       unset($node->taxonomy[$key]);
       // A 'Multiple select' and a 'Free tagging' field returns an array.
       if (is_array($term)) {
         foreach ($term as $tid) {
           if ($key == 'tags') {
             // Free tagging; the values will be saved for later as strings
@@ -780,19 +780,19 @@ function taxonomy_preview_terms($node) {
       }
     }
   }
   return $taxonomy;
 }
 
 /**
  * Find all terms associated with the given node, within one vocabulary.
  */
-function taxonomy_node_get_terms_by_vocabulary($node, $vid, $key = 'tid') {
+function taxonomy_node_get_terms_by_vocabulary(stdClass $node, $vid, $key = 'tid') {
   $query = db_select('taxonomy_term_data', 't');
   $query->join('taxonomy_term_node', 'r', 'r.tid = t.tid');
   $query->addTag('term_access');
 
   $result = $query
     ->fields('t')
     ->condition('t.vid', $vid)
     ->condition('r.vid', $node->vid)
     ->orderBy('weight')
@@ -831,19 +831,19 @@ function taxonomy_get_tids_from_nodes($n
     ->orderBy('t.weight')
     ->orderBy('t.name')
     ->execute()
     ->fetchAll();
 }
 
 /**
  * Find all terms associated with the given node, ordered by vocabulary and term weight.
  */
-function taxonomy_node_get_terms($node, $key = 'tid') {
+function taxonomy_node_get_terms(stdClass $node, $key = 'tid') {
   $terms = &drupal_static(__FUNCTION__);
 
   if (!isset($terms[$node->vid][$key])) {
     $query = db_select('taxonomy_term_node', 'r');
     $query->join('taxonomy_term_data', 't', 'r.tid = t.tid');
     $query->join('taxonomy_vocabulary', 'v', 't.vid = v.vid');
     $query->addTag('term_access');
 
     $result = $query
@@ -858,19 +858,19 @@ function taxonomy_node_get_terms($node, 
       $terms[$node->vid][$key][$term->$key] = $term;
     }
   }
   return $terms[$node->vid][$key];
 }
 
 /**
  * Save term associations for a given node.
  */
-function taxonomy_node_save($node, $terms) {
+function taxonomy_node_save(stdClass $node, $terms) {
   taxonomy_node_revision_delete($node);
 
   // Free tagging vocabularies do not send their tids in the form,
   // so we'll detect them here and process them independently.
   if (isset($terms['tags'])) {
     $typed_input = $terms['tags'];
     unset($terms['tags']);
 
     foreach ($typed_input as $vid => $vid_value) {
@@ -1559,82 +1559,82 @@ function taxonomy_node_load($nodes) {
     if (!isset($nodes[$node->nid]->taxonomy)) {
       $node->taxonomy = array();
     }
   }
 }
 
 /**
  * Implement hook_node_insert().
  */
-function taxonomy_node_insert($node) {
+function taxonomy_node_insert(stdClass $node) {
   if (!empty($node->taxonomy)) {
     taxonomy_node_save($node, $node->taxonomy);
   }
 }
 
 /**
  * Implement hook_node_update().
  */
-function taxonomy_node_update($node) {
+function taxonomy_node_update(stdClass $node) {
   if (!empty($node->taxonomy)) {
     taxonomy_node_save($node, $node->taxonomy);
   }
 }
 
 /**
  * Implement hook_node_delete().
  *
  * Remove associations of a node to its terms.
  */
-function taxonomy_node_delete($node) {
+function taxonomy_node_delete(stdClass $node) {
   db_delete('taxonomy_term_node')
     ->condition('nid', $node->nid)
     ->execute();
   drupal_static_reset('taxonomy_term_count_nodes');
 }
 
 /**
  * Implement hook_node_revision_delete().
  *
  * Remove associations of a node to its terms.
  */
-function taxonomy_node_revision_delete($node) {
+function taxonomy_node_revision_delete(stdClass $node) {
   db_delete('taxonomy_term_node')
     ->condition('vid', $node->vid)
     ->execute();
   drupal_static_reset('taxonomy_term_count_nodes');
 }
 
 /**
  * Implement hook_node_validate().
  *
  * Make sure incoming vids are free tagging enabled.
  */
-function taxonomy_node_validate($node, $form) {
+function taxonomy_node_validate(stdClass $node, $form) {
   if (!empty($node->taxonomy)) {
     $terms = $node->taxonomy;
     if (!empty($terms['tags'])) {
       foreach ($terms['tags'] as $vid => $vid_value) {
         $vocabulary = taxonomy_vocabulary_load($vid);
         if (empty($vocabulary->tags)) {
           // see form_get_error $key = implode('][', $element['#parents']);
           // on why this is the key
           form_set_error("taxonomy][tags][$vid", t('The %name vocabulary can not be modified in this way.', array('%name' => $vocabulary->name)));
         }
       }
     }
   }
 }
 
 /**
  * Implement hook_node_update_index().
  */
-function taxonomy_node_update_index($node) {
+function taxonomy_node_update_index(stdClass $node) {
   $output = array();
   foreach ($node->taxonomy as $term) {
     $output[] = $term->name;
   }
   if (count($output)) {
     return '<strong>(' . implode(', ', $output) . ')</strong>';
   }
 }
 
Index: modules/tracker/tracker.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/tracker/tracker.module,v
retrieving revision 1.163
diff -u -9 -p -r1.163 tracker.module
--- modules/tracker/tracker.module	18 Sep 2009 00:04:23 -0000	1.163
+++ modules/tracker/tracker.module	3 Oct 2009 17:59:38 -0000
@@ -152,33 +152,33 @@ function _tracker_myrecent_access($accou
  * Access callback for user/%user/track.
  */
 function _tracker_user_access($account) {
   return user_view_access($account) && user_access('access content');
 }
 
 /**
  * Implement hook_nodeapi_insert().
  */
-function tracker_node_insert($node, $arg = 0) {
+function tracker_node_insert(stdClass $node, $arg = 0) {
   _tracker_add($node->nid, $node->uid, $node->changed);
 }
 
 /**
  * Implement hook_nodeapi_update().
  */
-function tracker_node_update($node, $arg = 0) {
+function tracker_node_update(stdClass $node, $arg = 0) {
   _tracker_add($node->nid, $node->uid, $node->changed);
 }
 
 /**
  * Implement hook_nodeapi_delete().
  */
-function tracker_node_delete($node, $arg = 0) {
+function tracker_node_delete(stdClass $node, $arg = 0) {
   _tracker_remove($node->nid, $node->uid, $node->changed);
 }
 
 /**
  * Implement hook_comment_update().
  *
  * Comment module doesn't call hook_comment_unpublish() when saving individual
  * comments so we need to check for those here.
  */
Index: modules/translation/translation.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/translation/translation.module,v
retrieving revision 1.60
diff -u -9 -p -r1.60 translation.module
--- modules/translation/translation.module	10 Sep 2009 06:32:54 -0000	1.60
+++ modules/translation/translation.module	3 Oct 2009 17:59:38 -0000
@@ -69,19 +69,19 @@ function translation_menu() {
 }
 
 /**
  * Menu access callback.
  *
  * Only display translation tab for node types, which have translation enabled
  * and where the current node is not language neutral (which should span
  * all languages).
  */
-function _translation_tab_access($node) {
+function _translation_tab_access(stdClass $node) {
   if (!empty($node->language) && translation_supported_type($node->type)) {
     return user_access('translate content');
   }
   return FALSE;
 }
 
 /**
  * Implement hook_permission().
  */
@@ -162,19 +162,19 @@ function translation_form_alter(&$form, 
   }
 }
 
 /**
  * Implement hook_node_view().
  *
  * Display translation links with native language names, if this node
  * is part of a translation set.
  */
-function translation_node_view($node, $build_mode) {
+function translation_node_view(stdClass $node, $build_mode) {
   if (isset($node->tnid) && $translations = translation_node_get_translations($node->tnid)) {
     // Do not show link to the same node.
     unset($translations[$node->language]);
     $languages = language_list();
     foreach ($languages as $langcode => $language) {
       if (isset($translations[$langcode])) {
         $links["node_translation_$langcode"] = array(
           'title' => $language->native,
           'href' => 'node/' . $translations[$langcode]->nid,
@@ -188,19 +188,19 @@ function translation_node_view($node, $b
         );
       }
     }
   }
 }
 
 /**
  * Implement hook_node_prepare().
  */
-function translation_node_prepare($node) {
+function translation_node_prepare(stdClass $node) {
   // Only act if we are dealing with a content type supporting translations.
   if (translation_supported_type($node->type)) {
     if (empty($node->nid) && isset($_GET['translation']) && isset($_GET['language']) &&
         ($source_nid = $_GET['translation']) && ($language = $_GET['language']) &&
         (user_access('translate content'))) {
       // We are translating a node from a source node, so
       // load the node to be translated and populate fields.
       $source_node = node_load($source_nid);
       // Ensure we don't have an existing translation in this language.
@@ -218,19 +218,19 @@ function translation_node_prepare($node)
       // Let every module add custom translated fields.
       module_invoke_all('node_prepare_translation', $node);
     }
   }
 }
 
 /**
  * Implement hook_node_insert().
  */
-function translation_node_insert($node) {
+function translation_node_insert(stdClass $node) {
   // Only act if we are dealing with a content type supporting translations.
   if (translation_supported_type($node->type)) {
     if (!empty($node->translation_source)) {
       if ($node->translation_source->tnid) {
         // Add node to existing translation set.
         $tnid = $node->translation_source->tnid;
       }
       else {
         // Create new translation set, using nid from the source node.
@@ -251,19 +251,19 @@ function translation_node_insert($node) 
         ->condition('nid', $node->nid)
         ->execute();
     }
   }
 }
 
 /**
  * Implement hook_node_update().
  */
-function translation_node_update($node) {
+function translation_node_update(stdClass $node) {
   // Only act if we are dealing with a content type supporting translations.
   if (translation_supported_type($node->type)) {
     if (isset($node->translation) && $node->translation && !empty($node->language) && $node->tnid) {
       // Update translation information.
       db_update('node')
         ->fields(array(
           'tnid' => $node->tnid,
           'translate' => $node->translation['status'],
         ))
@@ -280,44 +280,44 @@ function translation_node_update($node) 
     }
   }
 }
 
 /**
  * Implement hook_node_validate().
  *
  * Ensure that duplicate translations can not be created for the same source.
  */
-function translation_node_validate($node, $form) {
+function translation_node_validate(stdClass $node, $form) {
   // Only act on translatable nodes with a tnid or translation_source.
   if (translation_supported_type($node->type) && (!empty($node->tnid) || !empty($form['#node']->translation_source->nid))) {
     $tnid = !empty($node->tnid) ? $node->tnid : $form['#node']->translation_source->nid;
     $translations = translation_node_get_translations($tnid);
     if (isset($translations[$node->language]) && $translations[$node->language]->nid != $node->nid ) {
       form_set_error('language', t('There is already a translation in this language.'));
     }
   }
 }
 
 /**
  * Implement hook_node_delete().
  */
-function translation_node_delete($node) {
+function translation_node_delete(stdClass $node) {
   // Only act if we are dealing with a content type supporting translations.
   if (translation_supported_type($node->type)) {
     translation_remove_from_set($node);
   }
 }
 
 /**
  * Remove a node from its translation set (if any)
  * and update the set accordingly.
  */
-function translation_remove_from_set($node) {
+function translation_remove_from_set(stdClass $node) {
   if (isset($node->tnid)) {
     $query = db_update('node')
       ->fields(array(
         'tnid' => 0,
         'translate' => 0,
       ));
     if (db_query('SELECT COUNT(*) FROM {node} WHERE tnid = :tnid', array(':tnid' => $node->tnid))->fetchField() == 1) {
       // There is only one node left in the set: remove the set altogether.
       $query
Index: modules/translation/translation.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/translation/translation.pages.inc,v
retrieving revision 1.9
diff -u -9 -p -r1.9 translation.pages.inc
--- modules/translation/translation.pages.inc	29 Sep 2009 15:31:16 -0000	1.9
+++ modules/translation/translation.pages.inc	3 Oct 2009 17:59:38 -0000
@@ -6,19 +6,19 @@
  * User page callbacks for the translation module.
  */
 
 /**
  * Overview page for a node's translations.
  *
  * @param $node
  *   Node object.
  */
-function translation_node_overview($node) {
+function translation_node_overview(stdClass $node) {
   if ($node->tnid) {
     // Already part of a set, grab that set.
     $tnid = $node->tnid;
     $translations = translation_node_get_translations($node->tnid);
   }
   else {
     // We have no translation source nid, this could be a new set, emulate that.
     $tnid = $node->nid;
     $translations = array($node->language => $node);
Index: modules/trigger/trigger.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/trigger/trigger.module,v
retrieving revision 1.48
diff -u -9 -p -r1.48 trigger.module
--- modules/trigger/trigger.module	19 Sep 2009 11:07:36 -0000	1.48
+++ modules/trigger/trigger.module	3 Oct 2009 17:59:38 -0000
@@ -214,19 +214,19 @@ function trigger_forms() {
  *
  * @param $type
  *   The type of action that is about to be called.
  * @param $node
  *   The node that was passed via the node hook.
  *
  * @return
  *   The object expected by the action that is about to be called.
  */
-function _trigger_normalize_node_context($type, $node) {
+function _trigger_normalize_node_context($type, stdClass $node) {
   // Note that comment-type actions are not supported in node contexts,
   // because we wouldn't know which comment to choose.
   switch ($type) {
     // An action that works on users is being called in a node context.
     // Load the user object of the node's author.
     case 'user':
       return user_load($node->uid);
   }
 }
@@ -237,19 +237,19 @@ function _trigger_normalize_node_context
  * @param $node
  *   Node object.
  * @param $op
  *   Operation to trigger.
  * @param $a3
  *   Additional argument to action function.
  * @param $a4
  *   Additional argument to action function.
  */
-function _trigger_node($node, $hook, $a3 = NULL, $a4 = NULL) {
+function _trigger_node(stdClass $node, $hook, $a3 = NULL, $a4 = NULL) {
   // Keep objects for reuse so that changes actions make to objects can persist.
   static $objects;
   // Prevent recursion by tracking which operations have already been called.
   static $recursion;
   if (isset($recursion[$hook])) {
     return;
   }
   $recursion[$hook] = TRUE;
 
@@ -278,47 +278,47 @@ function _trigger_node($node, $hook, $a3
     else {
       actions_do($aid, $node, $context, $a3, $a4);
     }
   }
 }
 
 /**
  * Implement hook_node_view().
  */
-function trigger_node_view($node, $build_mode) {
+function trigger_node_view(stdClass $node, $build_mode) {
   _trigger_node($node, 'node_view', $build_mode);
 }
 
 /**
  * Implement hook_node_update().
  */
-function trigger_node_update($node) {
+function trigger_node_update(stdClass $node) {
   _trigger_node($node, 'node_update');
 }
 
 /**
  * Implement hook_node_presave().
  */
-function trigger_node_presave($node) {
+function trigger_node_presave(stdClass $node) {
   _trigger_node($node, 'node_presave');
 }
 
 /**
  * Implement hook_node_insert().
  */
-function trigger_node_insert($node) {
+function trigger_node_insert(stdClass $node) {
   _trigger_node($node, 'node_insert');
 }
 
 /**
  * Implement hook_node_delete().
  */
-function trigger_node_delete($node) {
+function trigger_node_delete(stdClass $node) {
   _trigger_node($node, 'node_delete');
 }
 
 /**
  * Loads associated objects for comment triggers.
  *
  * When an action is called in a context that does not match its type, the
  * object that the action expects must be retrieved. For example, when an action
  * that works on nodes is called during the comment hook, the node object is not
Index: modules/upload/upload.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/upload/upload.module,v
retrieving revision 1.260
diff -u -9 -p -r1.260 upload.module
--- modules/upload/upload.module	25 Sep 2009 14:24:34 -0000	1.260
+++ modules/upload/upload.module	3 Oct 2009 17:59:38 -0000
@@ -52,19 +52,19 @@ function upload_permission() {
       'title' => t('View uploaded files'),
       'description' => t('View and download files attached to content.'),
     ),
   );
 }
 
 /**
  * Inject links into $node for attachments.
  */
-function upload_node_links($node, $build_mode) {
+function upload_node_links(stdClass $node, $build_mode) {
   $links = array();
 
   // Display a link with the number of attachments
   $num_files = 0;
   foreach ($node->files as $file) {
     if ((object)$file->list) {
       $num_files++;
     }
   }
@@ -331,19 +331,19 @@ function upload_node_load($nodes, $types
   $files = file_load_multiple($fids);
   foreach ($uploads as $upload) {
     $nodes[$upload->nid]->files[$upload->fid] = $files[$upload->fid];
   }
 }
 
 /**
  * Implement hook_node_view().
  */
-function upload_node_view($node, $build_mode) {
+function upload_node_view(stdClass $node, $build_mode) {
   if (!isset($node->files)) {
     return;
   }
 
   if (user_access('view uploaded files') && $build_mode != 'rss') {
     if (count($node->files)) {
       if ($build_mode == 'full') {
         // Add the attachments list to node body with a heavy weight to ensure
         // they're below other elements.
@@ -377,63 +377,63 @@ function upload_node_view($node, $build_
         )
       );
     }
   }
 }
 
 /**
  * Implement hook_node_insert().
  */
-function upload_node_insert($node) {
+function upload_node_insert(stdClass $node) {
   if (user_access('upload files')) {
     upload_save($node);
   }
 }
 
 /**
  * Implement hook_node_update().
  */
-function upload_node_update($node) {
+function upload_node_update(stdClass $node) {
   if (user_access('upload files')) {
     upload_save($node);
   }
 }
 
 /**
  * Implement hook_node_delete().
  */
-function upload_node_delete($node) {
+function upload_node_delete(stdClass $node) {
   db_delete('upload')->condition('nid', $node->nid)->execute();
   if (!is_array($node->files)) {
     return;
   }
   foreach ($node->files as $file) {
     file_delete($file);
   }
 }
 
 /**
  * Implement hook_node_revision_delete().
  */
-function upload_node_revision_delete($node) {
+function upload_node_revision_delete(stdClass $node) {
   db_delete('upload')->condition('vid', $node->vid)->execute();
   if (!is_array($node->files)) {
     return;
   }
   foreach ($node->files as $file) {
     file_delete($file);
   }
 }
 
 /**
  * Implement hook_node_search_result().
  */
-function upload_node_search_result($node) {
+function upload_node_search_result(stdClass $node) {
   return isset($node->files) && is_array($node->files) ? format_plural(count($node->files), '1 attachment', '@count attachments') : NULL;
 }
 
 /**
  * Displays file attachments in table
  *
  * @ingroup themeable
  */
 function theme_upload_attachments($elements) {
@@ -468,19 +468,19 @@ function upload_space_used($uid) {
  * Determine how much disk space is occupied by uploaded files.
  *
  * @return
  *   The amount of disk space used by uploaded files in bytes.
  */
 function upload_total_space_used() {
   return db_query('SELECT SUM(f.filesize) FROM {file} f INNER JOIN {upload} u ON f.fid = u.fid')->fetchField();
 }
 
-function upload_save($node) {
+function upload_save(stdClass $node) {
   if (empty($node->files) || !is_array($node->files)) {
     return;
   }
 
   foreach ($node->files as $fid => $file) {
     // Convert file to object for compatibility
     $file = (object)$file;
 
     // Remove file. Process removals first since no further processing
@@ -521,19 +521,19 @@ function upload_save($node) {
         ->condition('fid', $file->fid, '=')
         ->condition('vid', $node->vid, '=')
         ->execute();
     }
     $file->status |= FILE_STATUS_PERMANENT;
     $file = file_save($file);
   }
 }
 
-function _upload_form($node) {
+function _upload_form(stdClass $node) {
   global $user;
 
   $form = array(
     '#theme' => 'upload_form_new',
     '#cache' => TRUE,
     '#prefix' => '<div id="attach-wrapper">',
     '#suffix' => '</div>',
   );
 
Index: modules/upload/upload.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/upload/upload.test,v
retrieving revision 1.26
diff -u -9 -p -r1.26 upload.test
--- modules/upload/upload.test	31 Aug 2009 05:47:34 -0000	1.26
+++ modules/upload/upload.test	3 Oct 2009 17:59:38 -0000
@@ -186,19 +186,19 @@ class UploadTestCase extends DrupalWebTe
   }
 
   /**
    * Upload file to specified node.
    *
    * @param object $node Node object.
    * @param string $filename Name of file to upload.
    * @param boolean $assert Assert that the node was successfully updated.
    */
-  function uploadFile($node, $filename, $assert = TRUE) {
+  function uploadFile(stdClass $node, $filename, $assert = TRUE) {
     $edit = array();
     $edit['files[upload]'] = $filename; //edit-upload
     $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
     if ($assert) {
       $this->assertRaw(t('Page %title has been updated.', array('%title' => $node->title)), 'File attached successfully.');
     }
   }
 
   /**
