Index: src/isolate.cc |
diff --git a/src/isolate.cc b/src/isolate.cc |
index f3596483112c00f8dbc2081c1a24bab75fae6c4e..14072e4686862f9b747ff760cf3d46cb94663cd0 100644 |
--- a/src/isolate.cc |
+++ b/src/isolate.cc |
@@ -1043,6 +1043,8 @@ Object* Isolate::FindHandler() { |
for (StackFrameIterator iter(this); !iter.done(); iter.Advance()) { |
StackFrame* frame = iter.frame(); |
+ RemoveMaterializedObjectsOnUnwind(frame); |
Michael Starzinger
2015/05/04 15:17:03
As discussed offline: I think the materialized obj
|
+ |
// For JSEntryStub frames we always have a handler. |
if (frame->is_entry() || frame->is_entry_construct()) { |
StackHandler* handler = frame->top_handler(); |
@@ -1117,6 +1119,17 @@ Object* Isolate::FindHandler() { |
} |
+void Isolate::RemoveMaterializedObjectsOnUnwind(StackFrame* frame) { |
+ if (frame->is_optimized()) { |
+ bool removed = materialized_object_store_->Remove(frame->fp()); |
+ USE(removed); |
+ // If there were any materialized objects, the code should be |
+ // marked for deopt. |
+ DCHECK(!removed || frame->LookupCode()->marked_for_deoptimization()); |
+ } |
+} |
+ |
+ |
Isolate::CatchType Isolate::PredictExceptionCatcher() { |
Address external_handler = thread_local_top()->try_catch_handler_address(); |
Address entry_handler = Isolate::handler(thread_local_top()); |