Index: src/frames.h |
diff --git a/src/frames.h b/src/frames.h |
index 8cbbc6267978b5929277e97787a684ee3167dcb0..98aaead28bd16a19dbb14fc4c5435008c31b85ca 100644 |
--- a/src/frames.h |
+++ b/src/frames.h |
@@ -114,6 +114,12 @@ class StackFrame BASE_EMBEDDED { |
// by the debugger. |
enum Id { NO_ID = 0 }; |
+ // Copy constructor; it breaks the connection to host iterator. |
+ StackFrame(const StackFrame& original) { |
+ this->state_ = original.state_; |
+ this->iterator_ = NULL; |
+ } |
+ |
// Type testers. |
bool is_entry() const { return type() == ENTRY; } |
bool is_entry_construct() const { return type() == ENTRY_CONSTRUCT; } |
@@ -132,6 +138,8 @@ class StackFrame BASE_EMBEDDED { |
Address pc() const { return *pc_address(); } |
void set_pc(Address pc) { *pc_address() = pc; } |
+ virtual void SetCallerFp(Address caller_fp) = 0; |
+ |
Address* pc_address() const { return state_.pc_address; } |
// Get the id of this stack frame. |
@@ -200,7 +208,8 @@ class StackFrame BASE_EMBEDDED { |
friend class StackHandlerIterator; |
friend class SafeStackFrameIterator; |
- DISALLOW_IMPLICIT_CONSTRUCTORS(StackFrame); |
+ private: |
+ void operator=(const StackFrame& original); |
}; |
@@ -218,6 +227,7 @@ class EntryFrame: public StackFrame { |
ASSERT(frame->is_entry()); |
return static_cast<EntryFrame*>(frame); |
} |
+ virtual void SetCallerFp(Address caller_fp); |
protected: |
explicit EntryFrame(StackFrameIterator* iterator) : StackFrame(iterator) { } |
@@ -268,6 +278,8 @@ class ExitFrame: public StackFrame { |
// Garbage collection support. |
virtual void Iterate(ObjectVisitor* v) const; |
+ virtual void SetCallerFp(Address caller_fp); |
+ |
static ExitFrame* cast(StackFrame* frame) { |
ASSERT(frame->is_exit()); |
return static_cast<ExitFrame*>(frame); |
@@ -303,6 +315,8 @@ class StandardFrame: public StackFrame { |
inline void SetExpression(int index, Object* value); |
int ComputeExpressionsCount() const; |
+ virtual void SetCallerFp(Address caller_fp); |
+ |
static StandardFrame* cast(StackFrame* frame) { |
ASSERT(frame->is_standard()); |
return static_cast<StandardFrame*>(frame); |
@@ -658,6 +672,10 @@ class StackFrameLocator BASE_EMBEDDED { |
}; |
+// Reads all frames on the current stack and copies them into the current |
+// zone memory. |
+Vector<StackFrame*> CreateStackMap(); |
+ |
} } // namespace v8::internal |
#endif // V8_FRAMES_H_ |