- Add an isolate field to visitors.

Review URL: https://chromiumcodereview.appspot.com//10502004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8337 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
iposva@google.com 2012-06-06 14:47:17 +00:00
parent a4711ef435
commit 6a5ef0e692
8 changed files with 30 additions and 13 deletions

View file

@ -120,7 +120,7 @@ class MarkingVisitor : public ObjectPointerVisitor {
Heap* heap, Heap* heap,
PageSpace* page_space, PageSpace* page_space,
MarkingStack* marking_stack) MarkingStack* marking_stack)
: isolate_(isolate), : ObjectPointerVisitor(isolate),
heap_(heap), heap_(heap),
vm_heap_(Dart::vm_isolate()->heap()), vm_heap_(Dart::vm_isolate()->heap()),
page_space_(page_space), page_space_(page_space),
@ -143,7 +143,7 @@ class MarkingVisitor : public ObjectPointerVisitor {
// Mark the object and push it on the marking stack. // Mark the object and push it on the marking stack.
ASSERT(!raw_obj->IsMarked()); ASSERT(!raw_obj->IsMarked());
RawClass* raw_class = isolate_->class_table()->At(raw_obj->GetClassId()); RawClass* raw_class = isolate()->class_table()->At(raw_obj->GetClassId());
raw_obj->SetMarkBit(); raw_obj->SetMarkBit();
marking_stack_->Push(raw_obj); marking_stack_->Push(raw_obj);
@ -178,7 +178,6 @@ class MarkingVisitor : public ObjectPointerVisitor {
MarkAndPush(raw_obj); MarkAndPush(raw_obj);
} }
Isolate* isolate_;
Heap* heap_; Heap* heap_;
Heap* vm_heap_; Heap* vm_heap_;
PageSpace* page_space_; PageSpace* page_space_;

View file

@ -2287,7 +2287,8 @@ class Code : public Object {
// An object finder visitor interface. // An object finder visitor interface.
class FindRawCodeVisitor : public FindObjectVisitor { class FindRawCodeVisitor : public FindObjectVisitor {
public: public:
explicit FindRawCodeVisitor(uword pc) : pc_(pc) { } explicit FindRawCodeVisitor(uword pc)
: FindObjectVisitor(Isolate::Current()), pc_(pc) { }
virtual ~FindRawCodeVisitor() { } virtual ~FindRawCodeVisitor() { }
// Check if object matches find condition. // Check if object matches find condition.

View file

@ -252,7 +252,7 @@ intptr_t RawObject::SizeFromClass() const {
intptr_t RawObject::VisitPointers(ObjectPointerVisitor* visitor) { intptr_t RawObject::VisitPointers(ObjectPointerVisitor* visitor) {
intptr_t size = 0; intptr_t size = 0;
NoHandleScope no_handles(Isolate::Current()); NoHandleScope no_handles(visitor->isolate());
// Only reasonable to be called on heap objects. // Only reasonable to be called on heap objects.
ASSERT(IsHeapObject()); ASSERT(IsHeapObject());

View file

@ -47,8 +47,9 @@ static inline void ForwardTo(uword orignal, uword target) {
class ScavengerVisitor : public ObjectPointerVisitor { class ScavengerVisitor : public ObjectPointerVisitor {
public: public:
explicit ScavengerVisitor(Scavenger* scavenger) explicit ScavengerVisitor(Isolate* isolate, Scavenger* scavenger)
: scavenger_(scavenger), : ObjectPointerVisitor(isolate),
scavenger_(scavenger),
heap_(scavenger->heap_), heap_(scavenger->heap_),
vm_heap_(Dart::vm_isolate()->heap()) {} vm_heap_(Dart::vm_isolate()->heap()) {}
@ -377,7 +378,7 @@ void Scavenger::Scavenge(bool invoke_api_callbacks) {
Timer timer(FLAG_verbose_gc, "Scavenge"); Timer timer(FLAG_verbose_gc, "Scavenge");
timer.Start(); timer.Start();
// Setup the visitor and run a scavenge. // Setup the visitor and run a scavenge.
ScavengerVisitor visitor(this); ScavengerVisitor visitor(isolate, this);
Prologue(isolate, invoke_api_callbacks); Prologue(isolate, invoke_api_callbacks);
IterateRoots(isolate, &visitor, !invoke_api_callbacks); IterateRoots(isolate, &visitor, !invoke_api_callbacks);
ProcessToSpace(&visitor); ProcessToSpace(&visitor);

View file

@ -570,7 +570,8 @@ class ScriptSnapshotWriter : public SnapshotWriter {
// objects to a snap shot. // objects to a snap shot.
class SnapshotWriterVisitor : public ObjectPointerVisitor { class SnapshotWriterVisitor : public ObjectPointerVisitor {
public: public:
explicit SnapshotWriterVisitor(SnapshotWriter* writer) : writer_(writer) {} explicit SnapshotWriterVisitor(SnapshotWriter* writer)
: ObjectPointerVisitor(Isolate::Current()), writer_(writer) {}
virtual void VisitPointers(RawObject** first, RawObject** last); virtual void VisitPointers(RawObject** first, RawObject** last);

View file

@ -28,7 +28,7 @@ void VerifyPointersVisitor::VisitPointers(RawObject** first, RawObject** last) {
!Dart::vm_isolate()->heap()->Contains(obj_addr)) { !Dart::vm_isolate()->heap()->Contains(obj_addr)) {
FATAL1("Invalid object pointer encountered 0x%lx\n", obj_addr); FATAL1("Invalid object pointer encountered 0x%lx\n", obj_addr);
} }
raw_obj->Validate(isolate_); raw_obj->Validate(isolate());
} }
} }
} }

View file

@ -29,15 +29,15 @@ class RawObject;
// the pointers visited are contained in the isolate heap. // the pointers visited are contained in the isolate heap.
class VerifyPointersVisitor : public ObjectPointerVisitor { class VerifyPointersVisitor : public ObjectPointerVisitor {
public: public:
explicit VerifyPointersVisitor(Isolate* isolate) : isolate_(isolate) {} explicit VerifyPointersVisitor(Isolate* isolate)
: ObjectPointerVisitor(isolate) {
}
virtual void VisitPointers(RawObject** first, RawObject** last); virtual void VisitPointers(RawObject** first, RawObject** last);
static void VerifyPointers(); static void VerifyPointers();
private: private:
Isolate* isolate_;
DISALLOW_COPY_AND_ASSIGN(VerifyPointersVisitor); DISALLOW_COPY_AND_ASSIGN(VerifyPointersVisitor);
}; };

View file

@ -10,13 +10,17 @@
namespace dart { namespace dart {
// Forward declarations. // Forward declarations.
class Isolate;
class RawObject; class RawObject;
// An object pointer visitor interface. // An object pointer visitor interface.
class ObjectPointerVisitor { class ObjectPointerVisitor {
public: public:
explicit ObjectPointerVisitor(Isolate* isolate) : isolate_(isolate) {}
virtual ~ObjectPointerVisitor() {} virtual ~ObjectPointerVisitor() {}
Isolate* isolate() const { return isolate_; }
// Range of pointers to visit 'first' <= pointer <= 'last'. // Range of pointers to visit 'first' <= pointer <= 'last'.
virtual void VisitPointers(RawObject** first, RawObject** last) = 0; virtual void VisitPointers(RawObject** first, RawObject** last) = 0;
@ -26,16 +30,27 @@ class ObjectPointerVisitor {
} }
void VisitPointer(RawObject** p) { VisitPointers(p , p); } void VisitPointer(RawObject** p) { VisitPointers(p , p); }
private:
Isolate* isolate_;
DISALLOW_IMPLICIT_CONSTRUCTORS(ObjectPointerVisitor);
}; };
// An object finder visitor interface. // An object finder visitor interface.
class FindObjectVisitor { class FindObjectVisitor {
public: public:
explicit FindObjectVisitor(Isolate* isolate) : isolate_(isolate) {}
virtual ~FindObjectVisitor() {} virtual ~FindObjectVisitor() {}
// Check if object matches find condition. // Check if object matches find condition.
virtual bool FindObject(RawObject* obj) = 0; virtual bool FindObject(RawObject* obj) = 0;
private:
Isolate* isolate_;
DISALLOW_IMPLICIT_CONSTRUCTORS(FindObjectVisitor);
}; };
} // namespace dart } // namespace dart