Reviewers: Michael Starzinger,

Message:
PTAL

Description:
Enable weak embedded objects in optimized code with a fix for heap verifier.

BUG=v8:2073
[email protected]

Please review this at https://chromiumcodereview.appspot.com/25702008/

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

Affected files (+14, -1 lines):
  M src/flag-definitions.h
  M src/heap.cc
  M src/objects.h


Index: src/flag-definitions.h
diff --git a/src/flag-definitions.h b/src/flag-definitions.h
index e40ffe4b4169177253b21d24ebe73e0e35647fa7..5b6814ec689ba3a3047bc7caf5e7eff58887edb4 100644
--- a/src/flag-definitions.h
+++ b/src/flag-definitions.h
@@ -511,7 +511,7 @@ DEFINE_bool(collect_maps, true,
             "garbage collect maps from which no objects can be reached")
 DEFINE_bool(weak_embedded_maps_in_optimized_code, true,
             "make maps embedded in optimized code weak")
-DEFINE_bool(weak_embedded_objects_in_optimized_code, false,
+DEFINE_bool(weak_embedded_objects_in_optimized_code, true,
             "make objects embedded in optimized code weak")
 DEFINE_bool(flush_code, true,
             "flush code that we expect not to use again (during full gc)")
Index: src/heap.cc
diff --git a/src/heap.cc b/src/heap.cc
index 0a594e77ee3eb95dff3789ed5fb211d54dc7d152..b0335d0efdd5da06accdc84acf018f626cf8fd66 100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -6886,6 +6886,9 @@ MaybeObject* Heap::AddWeakObjectToCodeDependency(Object* obj,
       WeakHashTable::cast(weak_object_to_code_table_)->Put(obj, dep);
   WeakHashTable* table;
   if (!maybe_obj->To(&table)) return maybe_obj;
+  if (ShouldZapGarbage() && weak_object_to_code_table_ != table) {
+    WeakHashTable::cast(weak_object_to_code_table_)->Zap(the_hole_value());
+  }
   set_weak_object_to_code_table(table);
ASSERT_EQ(dep, WeakHashTable::cast(weak_object_to_code_table_)->Lookup(obj));
   return weak_object_to_code_table_;
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index 7d57b731a4b7f2df7df481f6b8a76e4560e88f7c..328133a7485d93b390e9612053e12a427c75a636 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -4001,6 +4001,16 @@ class WeakHashTable: public HashTable<WeakHashTableShape<2>, Object*> {
   // key to the hole value causes removal of the whole entry.
   MUST_USE_RESULT MaybeObject* Put(Object* key, Object* value);

+#ifdef DEBUG
+  void Zap(Object* value) {
+    int capacity = Capacity();
+    for (int i = 0; i < capacity; i++) {
+      set(EntryToIndex(i), value);
+      set(EntryToValueIndex(i), value);
+    }
+  }
+#endif
+
  private:
   friend class MarkCompactCollector;



--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to