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_HANDLES_H_ | 5 #ifndef VM_HANDLES_H_ |
6 #define VM_HANDLES_H_ | 6 #define VM_HANDLES_H_ |
7 | 7 |
8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
9 #include "vm/flags.h" | 9 #include "vm/flags.h" |
10 #include "vm/os.h" | 10 #include "vm/os.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 // .... | 54 // .... |
55 // .... | 55 // .... |
56 // } | 56 // } |
57 | 57 |
58 | 58 |
59 // Forward declarations. | 59 // Forward declarations. |
60 class ObjectPointerVisitor; | 60 class ObjectPointerVisitor; |
61 class Thread; | 61 class Thread; |
62 | 62 |
63 DECLARE_FLAG(bool, verify_handles); | 63 DECLARE_FLAG(bool, verify_handles); |
64 DECLARE_DEBUG_FLAG(bool, trace_handles); | |
65 | 64 |
66 class HandleVisitor { | 65 class HandleVisitor { |
67 public: | 66 public: |
68 explicit HandleVisitor(Thread* thread) : thread_(thread) {} | 67 explicit HandleVisitor(Thread* thread) : thread_(thread) {} |
69 virtual ~HandleVisitor() {} | 68 virtual ~HandleVisitor() {} |
70 | 69 |
71 Thread* thread() const { return thread_; } | 70 Thread* thread() const { return thread_; } |
72 | 71 |
73 virtual void VisitHandle(uword addr) = 0; | 72 virtual void VisitHandle(uword addr) = 0; |
74 | 73 |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 static const int kOffsetOfRawPtr = kWordSize; | 249 static const int kOffsetOfRawPtr = kWordSize; |
251 class VMHandles : public Handles<kVMHandleSizeInWords, | 250 class VMHandles : public Handles<kVMHandleSizeInWords, |
252 kVMHandlesPerChunk, | 251 kVMHandlesPerChunk, |
253 kOffsetOfRawPtr> { | 252 kOffsetOfRawPtr> { |
254 public: | 253 public: |
255 static const int kOffsetOfRawPtrInHandle = kOffsetOfRawPtr; | 254 static const int kOffsetOfRawPtrInHandle = kOffsetOfRawPtr; |
256 | 255 |
257 VMHandles() : Handles<kVMHandleSizeInWords, | 256 VMHandles() : Handles<kVMHandleSizeInWords, |
258 kVMHandlesPerChunk, | 257 kVMHandlesPerChunk, |
259 kOffsetOfRawPtr>() { | 258 kOffsetOfRawPtr>() { |
260 #ifdef DEBUG | |
261 if (FLAG_trace_handles) { | 259 if (FLAG_trace_handles) { |
262 OS::PrintErr("*** Starting a new VM handle block 0x%" Px "\n", | 260 OS::PrintErr("*** Starting a new VM handle block 0x%" Px "\n", |
263 reinterpret_cast<intptr_t>(this)); | 261 reinterpret_cast<intptr_t>(this)); |
264 } | 262 } |
265 #endif | |
266 } | 263 } |
267 ~VMHandles(); | 264 ~VMHandles(); |
268 | 265 |
269 // Visit all object pointers stored in the various handles. | 266 // Visit all object pointers stored in the various handles. |
270 void VisitObjectPointers(ObjectPointerVisitor* visitor); | 267 void VisitObjectPointers(ObjectPointerVisitor* visitor); |
271 | 268 |
272 // Allocates a handle in the current handle scope of 'zone', which must be | 269 // Allocates a handle in the current handle scope of 'zone', which must be |
273 // the current zone. This handle is valid only in the current handle scope | 270 // the current zone. This handle is valid only in the current handle scope |
274 // and is destroyed when the current handle scope ends. | 271 // and is destroyed when the current handle scope ends. |
275 static uword AllocateHandle(Zone* zone); | 272 static uword AllocateHandle(Zone* zone); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 }; | 350 }; |
354 #endif // defined(DEBUG) | 351 #endif // defined(DEBUG) |
355 | 352 |
356 // Macro to start a no handles scope in the code. | 353 // Macro to start a no handles scope in the code. |
357 #define NOHANDLESCOPE(thread) \ | 354 #define NOHANDLESCOPE(thread) \ |
358 dart::NoHandleScope no_vm_internal_handles_scope_(thread); | 355 dart::NoHandleScope no_vm_internal_handles_scope_(thread); |
359 | 356 |
360 } // namespace dart | 357 } // namespace dart |
361 | 358 |
362 #endif // VM_HANDLES_H_ | 359 #endif // VM_HANDLES_H_ |
OLD | NEW |