mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 20:41:24 +00:00
- 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:
parent
a4711ef435
commit
6a5ef0e692
|
@ -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_;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue