| Index: runtime/vm/stack_frame.h
|
| diff --git a/runtime/vm/stack_frame.h b/runtime/vm/stack_frame.h
|
| index 2889a1eecc63910e82d874fe153f642aaa181d29..1c59ccb64dbcf95973c583862b4e0b46dfa56583 100644
|
| --- a/runtime/vm/stack_frame.h
|
| +++ b/runtime/vm/stack_frame.h
|
| @@ -85,13 +85,15 @@ class StackFrame : public ValueObject {
|
| intptr_t GetTokenPos() const;
|
|
|
| protected:
|
| - explicit StackFrame(Isolate* isolate)
|
| - : fp_(0), sp_(0), pc_(0), isolate_(isolate) { }
|
| + explicit StackFrame(Thread* thread)
|
| + : fp_(0), sp_(0), pc_(0), thread_(thread) { }
|
|
|
| // Name of the frame, used for generic frame printing functionality.
|
| virtual const char* GetName() const { return IsStubFrame()? "stub" : "dart"; }
|
|
|
| - Isolate* isolate() const { return isolate_; }
|
| + Isolate* isolate() const { return thread_->isolate(); }
|
| +
|
| + Thread* thread() const { return thread_; }
|
|
|
| private:
|
| RawCode* GetCodeObject() const;
|
| @@ -111,7 +113,7 @@ class StackFrame : public ValueObject {
|
| uword fp_;
|
| uword sp_;
|
| uword pc_;
|
| - Isolate* isolate_;
|
| + Thread* thread_;
|
|
|
| // The iterators FrameSetIterator and StackFrameIterator set the private
|
| // fields fp_ and sp_ when they return the respective frame objects.
|
| @@ -137,7 +139,7 @@ class ExitFrame : public StackFrame {
|
| virtual const char* GetName() const { return "exit"; }
|
|
|
| private:
|
| - explicit ExitFrame(Isolate* isolate) : StackFrame(isolate) { }
|
| + explicit ExitFrame(Thread* thread) : StackFrame(thread) { }
|
|
|
| friend class StackFrameIterator;
|
| DISALLOW_COPY_AND_ASSIGN(ExitFrame);
|
| @@ -162,18 +164,18 @@ class EntryFrame : public StackFrame {
|
| virtual const char* GetName() const { return "entry"; }
|
|
|
| private:
|
| - explicit EntryFrame(Isolate* isolate) : StackFrame(isolate) { }
|
| + explicit EntryFrame(Thread* thread) : StackFrame(thread) { }
|
|
|
| friend class StackFrameIterator;
|
| DISALLOW_COPY_AND_ASSIGN(EntryFrame);
|
| };
|
|
|
|
|
| -// A StackFrameIterator can be initialized with an isolate other than the
|
| -// current thread's isolate. Because this is generally a bad idea,
|
| -// it is only allowed on Windows- where it is needed for the profiler.
|
| -// It is the responsibility of users of StackFrameIterator to ensure that the
|
| -// isolate given is not running concurrently on another thread.
|
| +// A StackFrameIterator can be initialized with a thread other than the
|
| +// current thread. Because this is generally a bad idea, it is only allowed on
|
| +// Windows- where it is needed for the profiler. It is the responsibility of
|
| +// users of StackFrameIterator to ensure that the thread given is not running
|
| +// concurrently.
|
| class StackFrameIterator : public ValueObject {
|
| public:
|
| static const bool kValidateFrames = true;
|
| @@ -181,15 +183,15 @@ class StackFrameIterator : public ValueObject {
|
|
|
| // Iterators for iterating over all frames from the last ExitFrame to the
|
| // first EntryFrame.
|
| - explicit StackFrameIterator(bool validate,
|
| - Isolate* isolate = Isolate::Current());
|
| + StackFrameIterator(bool validate,
|
| + Thread* thread = Thread::Current());
|
| StackFrameIterator(uword last_fp, bool validate,
|
| - Isolate* isolate = Isolate::Current());
|
| + Thread* thread = Thread::Current());
|
|
|
| // Iterator for iterating over all frames from the current frame (given by its
|
| // fp, sp, and pc) to the first EntryFrame.
|
| StackFrameIterator(uword fp, uword sp, uword pc, bool validate,
|
| - Isolate* isolate = Isolate::Current());
|
| + Thread* thread = Thread::Current());
|
|
|
| // Checks if a next frame exists.
|
| bool HasNextFrame() const { return frames_.fp_ != 0; }
|
| @@ -218,13 +220,13 @@ class StackFrameIterator : public ValueObject {
|
| StackFrame* NextFrame(bool validate);
|
|
|
| private:
|
| - explicit FrameSetIterator(Isolate* isolate)
|
| - : fp_(0), sp_(0), pc_(0), stack_frame_(isolate), isolate_(isolate) { }
|
| + explicit FrameSetIterator(Thread* thread)
|
| + : fp_(0), sp_(0), pc_(0), stack_frame_(thread), thread_(thread) { }
|
| uword fp_;
|
| uword sp_;
|
| uword pc_;
|
| StackFrame stack_frame_; // Singleton frame returned by NextFrame().
|
| - Isolate* isolate_;
|
| + Thread* thread_;
|
|
|
| friend class StackFrameIterator;
|
| DISALLOW_COPY_AND_ASSIGN(FrameSetIterator);
|
| @@ -250,7 +252,7 @@ class StackFrameIterator : public ValueObject {
|
| ExitFrame exit_; // Singleton exit frame returned by NextExitFrame().
|
| FrameSetIterator frames_;
|
| StackFrame* current_frame_; // Points to the current frame in the iterator.
|
| - Isolate* isolate_;
|
| + Thread* thread_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(StackFrameIterator);
|
| };
|
| @@ -265,16 +267,17 @@ class StackFrameIterator : public ValueObject {
|
| // isolate given is not running concurrently on another thread.
|
| class DartFrameIterator : public ValueObject {
|
| public:
|
| - explicit DartFrameIterator(Isolate* isolate = Isolate::Current())
|
| - : frames_(StackFrameIterator::kDontValidateFrames, isolate) { }
|
| + explicit DartFrameIterator(Thread* thread = Thread::Current())
|
| + : frames_(StackFrameIterator::kDontValidateFrames, thread) { }
|
| DartFrameIterator(uword last_fp,
|
| - Isolate* isolate = Isolate::Current())
|
| - : frames_(last_fp, StackFrameIterator::kDontValidateFrames, isolate) { }
|
| + Thread* thread = Thread::Current())
|
| + : frames_(last_fp, StackFrameIterator::kDontValidateFrames, thread) { }
|
| DartFrameIterator(uword fp,
|
| uword sp,
|
| uword pc,
|
| - Isolate* isolate = Isolate::Current())
|
| - : frames_(fp, sp, pc, StackFrameIterator::kDontValidateFrames, isolate) {
|
| + Thread* thread = Thread::Current())
|
| + : frames_(fp, sp, pc,
|
| + StackFrameIterator::kDontValidateFrames, thread) {
|
| }
|
| // Get next dart frame.
|
| StackFrame* NextFrame() {
|
|
|