Index: src/mark-compact.cc |
diff --git a/src/mark-compact.cc b/src/mark-compact.cc |
index f04a8bcb9a64105a496b8e4926cc833d06b7bc3a..b2b782bd879b0c2555f4280bb7e9ca234b22290c 100644 |
--- a/src/mark-compact.cc |
+++ b/src/mark-compact.cc |
@@ -449,7 +449,7 @@ void MarkCompactCollector::CollectGarbage() { |
#ifdef VERIFY_HEAP |
if (heap()->weak_embedded_objects_verification_enabled()) { |
- VerifyWeakEmbeddedObjectsInOptimizedCode(); |
+ VerifyWeakEmbeddedObjectsInCode(); |
} |
if (FLAG_collect_maps && FLAG_omit_map_checks_for_leaf_maps) { |
VerifyOmittedMapChecks(); |
@@ -510,13 +510,13 @@ void MarkCompactCollector::VerifyMarkbitsAreClean() { |
} |
-void MarkCompactCollector::VerifyWeakEmbeddedObjectsInOptimizedCode() { |
+void MarkCompactCollector::VerifyWeakEmbeddedObjectsInCode() { |
HeapObjectIterator code_iterator(heap()->code_space()); |
for (HeapObject* obj = code_iterator.Next(); |
obj != NULL; |
obj = code_iterator.Next()) { |
Code* code = Code::cast(obj); |
- if (code->kind() != Code::OPTIMIZED_FUNCTION) continue; |
+ if (!code->is_optimized_code() && !code->is_weak_stub()) continue; |
if (WillBeDeoptimized(code)) continue; |
code->VerifyEmbeddedObjectsDependency(); |
} |
@@ -2720,7 +2720,9 @@ void MarkCompactCollector::ClearAndDeoptimizeDependentCode( |
ASSERT(entries->is_code_at(i)); |
Code* code = entries->code_at(i); |
- if (IsMarked(code) && !code->marked_for_deoptimization()) { |
+ if (code->is_weak_stub()) { |
Toon Verwaest
2014/04/03 15:18:36
Also IsMarked(code)?
ulan
2014/04/03 15:40:26
Good catch, done.
|
+ IC::InvalidateMapsAndHandlers(code); |
+ } else if (IsMarked(code) && !code->marked_for_deoptimization()) { |
code->set_marked_for_deoptimization(true); |
code->InvalidateEmbeddedObjects(); |
have_code_to_deoptimize_ = true; |
@@ -3409,7 +3411,7 @@ void MarkCompactCollector::InvalidateCode(Code* code) { |
// Return true if the given code is deoptimized or will be deoptimized. |
bool MarkCompactCollector::WillBeDeoptimized(Code* code) { |
- return code->marked_for_deoptimization(); |
+ return code->is_optimized_code() && code->marked_for_deoptimization(); |
} |