- 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,
PageSpace* page_space,
MarkingStack* marking_stack)
: isolate_(isolate),
: ObjectPointerVisitor(isolate),
heap_(heap),
vm_heap_(Dart::vm_isolate()->heap()),
page_space_(page_space),
@ -143,7 +143,7 @@ class MarkingVisitor : public ObjectPointerVisitor {
// Mark the object and push it on the marking stack.
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();
marking_stack_->Push(raw_obj);
@ -178,7 +178,6 @@ class MarkingVisitor : public ObjectPointerVisitor {
MarkAndPush(raw_obj);
}
Isolate* isolate_;
Heap* heap_;
Heap* vm_heap_;
PageSpace* page_space_;

View file

@ -2287,7 +2287,8 @@ class Code : public Object {
// An object finder visitor interface.
class FindRawCodeVisitor : public FindObjectVisitor {
public:
explicit FindRawCodeVisitor(uword pc) : pc_(pc) { }
explicit FindRawCodeVisitor(uword pc)
: FindObjectVisitor(Isolate::Current()), pc_(pc) { }
virtual ~FindRawCodeVisitor() { }
// 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 size = 0;
NoHandleScope no_handles(Isolate::Current());
NoHandleScope no_handles(visitor->isolate());
// Only reasonable to be called on heap objects.
ASSERT(IsHeapObject());

View file

@ -47,8 +47,9 @@ static inline void ForwardTo(uword orignal, uword target) {
class ScavengerVisitor : public ObjectPointerVisitor {
public:
explicit ScavengerVisitor(Scavenger* scavenger)
: scavenger_(scavenger),
explicit ScavengerVisitor(Isolate* isolate, Scavenger* scavenger)
: ObjectPointerVisitor(isolate),
scavenger_(scavenger),
heap_(scavenger->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.Start();
// Setup the visitor and run a scavenge.
ScavengerVisitor visitor(this);
ScavengerVisitor visitor(isolate, this);
Prologue(isolate, invoke_api_callbacks);
IterateRoots(isolate, &visitor, !invoke_api_callbacks);
ProcessToSpace(&visitor);

View file

@ -570,7 +570,8 @@ class ScriptSnapshotWriter : public SnapshotWriter {
// objects to a snap shot.
class SnapshotWriterVisitor : public ObjectPointerVisitor {
public:
explicit SnapshotWriterVisitor(SnapshotWriter* writer) : writer_(writer) {}
explicit SnapshotWriterVisitor(SnapshotWriter* writer)
: ObjectPointerVisitor(Isolate::Current()), writer_(writer) {}
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)) {
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.
class VerifyPointersVisitor : public ObjectPointerVisitor {
public:
explicit VerifyPointersVisitor(Isolate* isolate) : isolate_(isolate) {}
explicit VerifyPointersVisitor(Isolate* isolate)
: ObjectPointerVisitor(isolate) {
}
virtual void VisitPointers(RawObject** first, RawObject** last);
static void VerifyPointers();
private:
Isolate* isolate_;
DISALLOW_COPY_AND_ASSIGN(VerifyPointersVisitor);
};

View file

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