| Index: src/frames.h
|
| diff --git a/src/frames.h b/src/frames.h
|
| index 1a78d09b15fc114eddde1b29b1ecf6fbe3e6c282..4d4b7ea83ad789dde3c5db9e2ae10f4641e9cfd9 100644
|
| --- a/src/frames.h
|
| +++ b/src/frames.h
|
| @@ -321,7 +321,11 @@ class StackFrame BASE_EMBEDDED {
|
| inline StackHandler* top_handler() const;
|
|
|
| // Compute the stack frame type for the given state.
|
| - static Type ComputeType(Isolate* isolate, State* state);
|
| + static Type ComputeType(const StackFrameIterator* iterator, State* state);
|
| +
|
| +#ifdef DEBUG
|
| + bool can_access_heap_objects() const;
|
| +#endif
|
|
|
| private:
|
| const StackFrameIterator* iterator_;
|
| @@ -782,11 +786,6 @@ class StackFrameIterator BASE_EMBEDDED {
|
| // An iterator that iterates over a given thread's stack.
|
| StackFrameIterator(Isolate* isolate, ThreadLocalTop* t);
|
|
|
| - // An iterator that can start from a given FP address.
|
| - // If use_top, then work as usual, if fp isn't NULL, use it,
|
| - // otherwise, do nothing.
|
| - StackFrameIterator(Isolate* isolate, bool use_top, Address fp, Address sp);
|
| -
|
| StackFrame* frame() const {
|
| ASSERT(!done());
|
| return frame_;
|
| @@ -798,6 +797,12 @@ class StackFrameIterator BASE_EMBEDDED {
|
| void Advance() { (this->*advance_)(); }
|
|
|
| private:
|
| + // An iterator that can start from a given FP address.
|
| + // If use_top, then work as usual, if fp isn't NULL, use it,
|
| + // otherwise, do nothing. This constructor is used to create
|
| + // StackFrameIterator for "safe" stack iteration.
|
| + StackFrameIterator(Isolate* isolate, bool use_top, Address fp, Address sp);
|
| +
|
| // Go back to the first frame.
|
| void Reset();
|
|
|
| @@ -811,6 +816,7 @@ class StackFrameIterator BASE_EMBEDDED {
|
| Address fp_;
|
| Address sp_;
|
| void (StackFrameIterator::*advance_)();
|
| + const bool can_access_heap_objects_;
|
|
|
| StackHandler* handler() const {
|
| ASSERT(!done());
|
| @@ -879,8 +885,6 @@ class SafeStackFrameIterator BASE_EMBEDDED {
|
| bool done() const { return iteration_done_ || iterator_.done(); }
|
| void Advance();
|
|
|
| - static bool is_active(Isolate* isolate);
|
| -
|
| private:
|
| void AdvanceOneFrame();
|
|
|
| @@ -921,20 +925,6 @@ class SafeStackFrameIterator BASE_EMBEDDED {
|
| static bool IsValidTop(Isolate* isolate,
|
| Address low_bound, Address high_bound);
|
|
|
| - // This is a nasty hack to make sure the active count is incremented
|
| - // before the constructor for the embedded iterator is invoked. This
|
| - // is needed because the constructor will start looking at frames
|
| - // right away and we need to make sure it doesn't start inspecting
|
| - // heap objects.
|
| - class ActiveCountMaintainer BASE_EMBEDDED {
|
| - public:
|
| - explicit ActiveCountMaintainer(Isolate* isolate);
|
| - ~ActiveCountMaintainer();
|
| - private:
|
| - Isolate* isolate_;
|
| - };
|
| -
|
| - ActiveCountMaintainer maintainer_;
|
| StackAddressValidator stack_validator_;
|
| const bool is_valid_top_;
|
| const bool is_valid_fp_;
|
|
|