Chromium Code Reviews| 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()); |