OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef VM_STACK_FRAME_H_ | 5 #ifndef VM_STACK_FRAME_H_ |
6 #define VM_STACK_FRAME_H_ | 6 #define VM_STACK_FRAME_H_ |
7 | 7 |
8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
9 #include "vm/object.h" | 9 #include "vm/object.h" |
10 #include "vm/stub_code.h" | 10 #include "vm/stub_code.h" |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 friend class StackFrameIterator; | 137 friend class StackFrameIterator; |
138 DISALLOW_COPY_AND_ASSIGN(ExitFrame); | 138 DISALLOW_COPY_AND_ASSIGN(ExitFrame); |
139 }; | 139 }; |
140 | 140 |
141 | 141 |
142 // Entry Frame is used to mark the transition from dart VM runtime code into | 142 // Entry Frame is used to mark the transition from dart VM runtime code into |
143 // dart code. | 143 // dart code. |
144 class EntryFrame : public StackFrame { | 144 class EntryFrame : public StackFrame { |
145 public: | 145 public: |
146 bool IsValid() const { | 146 bool IsValid() const { |
147 return StubCode::InInvocationStubForIsolate(isolate(), pc()); | 147 return StubCode::InInvocationStub(pc()); |
148 } | 148 } |
149 bool IsDartFrame(bool validate = true) const { return false; } | 149 bool IsDartFrame(bool validate = true) const { return false; } |
150 bool IsStubFrame() const { return false; } | 150 bool IsStubFrame() const { return false; } |
151 bool IsEntryFrame() const { return true; } | 151 bool IsEntryFrame() const { return true; } |
152 | 152 |
153 // Visit objects in the frame. | 153 // Visit objects in the frame. |
154 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor); | 154 virtual void VisitObjectPointers(ObjectPointerVisitor* visitor); |
155 | 155 |
156 protected: | 156 protected: |
157 virtual const char* GetName() const { return "entry"; } | 157 virtual const char* GetName() const { return "entry"; } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 // in one EntryFrame and ExitFrame block. | 199 // in one EntryFrame and ExitFrame block. |
200 class FrameSetIterator : public ValueObject { | 200 class FrameSetIterator : public ValueObject { |
201 public: | 201 public: |
202 // Checks if a next non entry/exit frame exists in the set. | 202 // Checks if a next non entry/exit frame exists in the set. |
203 bool HasNext() const { | 203 bool HasNext() const { |
204 if (fp_ == 0) { | 204 if (fp_ == 0) { |
205 return false; | 205 return false; |
206 } | 206 } |
207 const uword pc = *(reinterpret_cast<uword*>( | 207 const uword pc = *(reinterpret_cast<uword*>( |
208 sp_ + (kSavedPcSlotFromSp * kWordSize))); | 208 sp_ + (kSavedPcSlotFromSp * kWordSize))); |
209 return !StubCode::InInvocationStubForIsolate(isolate_, pc); | 209 return !StubCode::InInvocationStub(pc); |
210 } | 210 } |
211 | 211 |
212 // Get next non entry/exit frame in the set (assumes a next frame exists). | 212 // Get next non entry/exit frame in the set (assumes a next frame exists). |
213 StackFrame* NextFrame(bool validate); | 213 StackFrame* NextFrame(bool validate); |
214 | 214 |
215 private: | 215 private: |
216 explicit FrameSetIterator(Isolate* isolate) | 216 explicit FrameSetIterator(Isolate* isolate) |
217 : fp_(0), sp_(0), pc_(0), stack_frame_(isolate), isolate_(isolate) { } | 217 : fp_(0), sp_(0), pc_(0), stack_frame_(isolate), isolate_(isolate) { } |
218 uword fp_; | 218 uword fp_; |
219 uword sp_; | 219 uword sp_; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 uword pc_; | 324 uword pc_; |
325 GrowableArray<DeoptInstr*> deopt_instructions_; | 325 GrowableArray<DeoptInstr*> deopt_instructions_; |
326 ObjectPool& object_table_; | 326 ObjectPool& object_table_; |
327 | 327 |
328 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator); | 328 DISALLOW_COPY_AND_ASSIGN(InlinedFunctionsIterator); |
329 }; | 329 }; |
330 | 330 |
331 } // namespace dart | 331 } // namespace dart |
332 | 332 |
333 #endif // VM_STACK_FRAME_H_ | 333 #endif // VM_STACK_FRAME_H_ |
OLD | NEW |