Push revisions 1527, 1539, 1540, 1541, 1550, 1551 from bleeding_edge to trunk.

git-svn-id: http://v8.googlecode.com/svn/trunk@1555 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/objects-inl.h b/src/objects-inl.h
index 9aee342..941b84c 100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -2438,10 +2438,15 @@
 
 
 uint32_t StringHasher::GetHash() {
+  // Get the calculated raw hash value and do some more bit ops to distribute
+  // the hash further. Ensure that we never return zero as the hash value.
   uint32_t result = raw_running_hash_;
   result += (result << 3);
   result ^= (result >> 11);
   result += (result << 15);
+  if (result == 0) {
+    result = 27;
+  }
   return result;
 }