Index: runtime/vm/raw_object.cc |
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc |
index 04378e71a9bef9fdda6a42bda2119b5fb7c44436..31545928ce9ed1b961b61bad662fd643d3222e21 100644 |
--- a/runtime/vm/raw_object.cc |
+++ b/runtime/vm/raw_object.cc |
@@ -4,6 +4,7 @@ |
#include "vm/raw_object.h" |
+#include "vm/assembler.h" |
#include "vm/class_table.h" |
#include "vm/dart.h" |
#include "vm/freelist.h" |
@@ -115,6 +116,13 @@ intptr_t RawObject::SizeFromClass() const { |
instance_size = Array::InstanceSize(array_length); |
break; |
} |
+ case kObjectPoolCid: { |
+ const RawObjectPool* raw_object_pool = |
+ reinterpret_cast<const RawObjectPool*>(this); |
+ intptr_t len = raw_object_pool->ptr()->length_; |
+ instance_size = ObjectPool::InstanceSize(len); |
+ break; |
+ } |
#define SIZE_FROM_CLASS(clazz) \ |
case kTypedData##clazz##Cid: |
CLASS_LIST_TYPED_DATA(SIZE_FROM_CLASS) { |
@@ -523,6 +531,28 @@ intptr_t RawCode::VisitCodePointers(RawCode* raw_obj, |
} |
+RawObjectPool::Entry* RawObjectPool::from() { |
+ return &ptr()->data()[Assembler::kNumFixedEntries]; |
+} |
+ |
+ |
+RawObjectPool::Entry* RawObjectPool::to() { |
+ return &ptr()->data()[Assembler::kNumFixedEntries + |
+ ptr()->num_tagged_entries_ - 1]; |
+} |
+ |
+ |
+intptr_t RawObjectPool::VisitObjectPoolPointers( |
+ RawObjectPool* raw_obj, ObjectPointerVisitor* visitor) { |
+ for (Entry* current = raw_obj->from(); |
+ current <= raw_obj->to(); |
+ current++) { |
+ visitor->VisitPointer(¤t->raw_obj_); |
+ } |
+ return ObjectPool::InstanceSize(raw_obj->ptr()->length_); |
+} |
+ |
+ |
intptr_t RawInstructions::VisitInstructionsPointers( |
RawInstructions* raw_obj, ObjectPointerVisitor* visitor) { |
RawInstructions* obj = raw_obj->ptr(); |