Reviewers: Rico,

Description:
Fix missing setting of array to copy-on-write in
optimized string split.

Please review this at http://codereview.chromium.org/7849012/

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/heap.cc


Index: src/heap.cc
===================================================================
--- src/heap.cc (revision 9182)
+++ src/heap.cc (working copy)
@@ -2288,22 +2288,22 @@
     cache->set(index + kStringOffset, string);
     cache->set(index + kPatternOffset, pattern);
     cache->set(index + kArrayOffset, array);
-    return;
+  } else {
+    uint32_t index2 =
+ ((index + kArrayEntriesPerCacheEntry) & (kStringSplitCacheSize - 1));
+    if (cache->get(index2 + kStringOffset) == Smi::FromInt(0)) {
+      cache->set(index2 + kStringOffset, string);
+      cache->set(index2 + kPatternOffset, pattern);
+      cache->set(index2 + kArrayOffset, array);
+    } else {
+      cache->set(index2 + kStringOffset, Smi::FromInt(0));
+      cache->set(index2 + kPatternOffset, Smi::FromInt(0));
+      cache->set(index2 + kArrayOffset, Smi::FromInt(0));
+      cache->set(index + kStringOffset, string);
+      cache->set(index + kPatternOffset, pattern);
+      cache->set(index + kArrayOffset, array);
+    }
   }
-  uint32_t index2 =
-      ((index + kArrayEntriesPerCacheEntry) & (kStringSplitCacheSize - 1));
-  if (cache->get(index2 + kStringOffset) == Smi::FromInt(0)) {
-    cache->set(index2 + kStringOffset, string);
-    cache->set(index2 + kPatternOffset, pattern);
-    cache->set(index2 + kArrayOffset, array);
-    return;
-  }
-  cache->set(index2 + kStringOffset, Smi::FromInt(0));
-  cache->set(index2 + kPatternOffset, Smi::FromInt(0));
-  cache->set(index2 + kArrayOffset, Smi::FromInt(0));
-  cache->set(index + kStringOffset, string);
-  cache->set(index + kPatternOffset, pattern);
-  cache->set(index + kArrayOffset, array);
if (array->length() < 100) { // Limit how many new symbols we want to make.
     for (int i = 0; i < array->length(); i++) {
       String* str = String::cast(array->get(i));


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to