Chromium Code Reviews| Index: src/frames-inl.h |
| diff --git a/src/frames-inl.h b/src/frames-inl.h |
| index e6eaec0e0ce518591370193e2e5edcf35ee3176b..2962ce75bb2b9a957ef508b49dbdb103dd60f930 100644 |
| --- a/src/frames-inl.h |
| +++ b/src/frames-inl.h |
| @@ -89,10 +89,20 @@ inline Address* StackHandler::pc_address() const { |
| inline StackHandler* StackFrame::top_handler() const { |
| + ASSERT((tagged_isolate_ptr_ & kIsolateTag) == 0); |
| return iterator_->handler(); |
| } |
| +inline Isolate* StackFrame::isolate() const { |
|
Vitaly Repeshko
2011/04/04 20:37:08
I'm not convinced we need this tricky stuff. Usual
mnaganov (inactive)
2011/04/05 08:28:23
I agree. I was in a premature optimization mood. S
|
| + if ((tagged_isolate_ptr_ & kIsolateTag) == 0) { |
| + return iterator_->isolate(); |
| + } else { |
| + return reinterpret_cast<Isolate*>(tagged_isolate_ptr_ & ~kIsolateTag); |
| + } |
| +} |
| + |
| + |
| inline Code* StackFrame::GetContainingCode(Isolate* isolate, Address pc) { |
| return isolate->pc_to_code_cache()->GetCacheEntry(pc)->code; |
| } |
| @@ -168,6 +178,13 @@ inline Object* JavaScriptFrame::function() const { |
| template<typename Iterator> |
| +inline JavaScriptFrameIteratorTemp<Iterator>::JavaScriptFrameIteratorTemp( |
| + Isolate* isolate) |
| + : iterator_(isolate) { |
| + if (!done()) Advance(); |
| +} |
| + |
| +template<typename Iterator> |
| inline JavaScriptFrame* JavaScriptFrameIteratorTemp<Iterator>::frame() const { |
| // TODO(1233797): The frame hierarchy needs to change. It's |
| // problematic that we can't use the safe-cast operator to cast to |
| @@ -181,11 +198,9 @@ inline JavaScriptFrame* JavaScriptFrameIteratorTemp<Iterator>::frame() const { |
| template<typename Iterator> |
| JavaScriptFrameIteratorTemp<Iterator>::JavaScriptFrameIteratorTemp( |
| - StackFrame::Id id) { |
| - while (!done()) { |
| - Advance(); |
| - if (frame()->id() == id) return; |
| - } |
| + Isolate* isolate, StackFrame::Id id) |
| + : iterator_(isolate) { |
| + AdvanceToId(id); |
| } |
| @@ -206,6 +221,15 @@ void JavaScriptFrameIteratorTemp<Iterator>::AdvanceToArgumentsFrame() { |
| template<typename Iterator> |
| +void JavaScriptFrameIteratorTemp<Iterator>::AdvanceToId(StackFrame::Id id) { |
| + while (!done()) { |
| + Advance(); |
| + if (frame()->id() == id) return; |
| + } |
| +} |
| + |
| + |
| +template<typename Iterator> |
| void JavaScriptFrameIteratorTemp<Iterator>::Reset() { |
| iterator_.Reset(); |
| if (!done()) Advance(); |