Add HeapTest and make GC work enough to pass it
Change-Id: If06eaef2921b64b3226bfd347acaec60ec993e67
diff --git a/src/heap.h b/src/heap.h
index bbd05db..d4d43e7 100644
--- a/src/heap.h
+++ b/src/heap.h
@@ -67,6 +67,48 @@
return mark_bitmap_;
}
+ static void SetReferenceOffsets(size_t reference_referent_offset,
+ size_t reference_queue_offset,
+ size_t reference_queueNext_offset,
+ size_t reference_pendingNext_offset,
+ size_t finalizer_reference_zombie_offset) {
+ CHECK_NE(reference_referent_offset, 0U);
+ CHECK_NE(reference_queue_offset, 0U);
+ CHECK_NE(reference_queueNext_offset, 0U);
+ CHECK_NE(reference_pendingNext_offset, 0U);
+ CHECK_NE(finalizer_reference_zombie_offset, 0U);
+ reference_referent_offset_ = reference_referent_offset;
+ reference_queue_offset_ = reference_queue_offset;
+ reference_queueNext_offset_ = reference_queueNext_offset;
+ reference_pendingNext_offset_ = reference_pendingNext_offset;
+ finalizer_reference_zombie_offset_ = finalizer_reference_zombie_offset;
+ }
+
+ static size_t GetReferenceReferentOffset() {
+ DCHECK_NE(reference_referent_offset_, 0U);
+ return reference_referent_offset_;
+ }
+
+ static size_t GetReferenceQueueOffset() {
+ DCHECK_NE(reference_queue_offset_, 0U);
+ return reference_queue_offset_;
+ }
+
+ static size_t GetReferenceQueueNextOffset() {
+ DCHECK_NE(reference_queueNext_offset_, 0U);
+ return reference_queueNext_offset_;
+ }
+
+ static size_t GetReferencePendingNextOffset() {
+ DCHECK_NE(reference_pendingNext_offset_, 0U);
+ return reference_pendingNext_offset_;
+ }
+
+ static size_t GetFinalizerReferenceZombieOffset() {
+ DCHECK_NE(finalizer_reference_zombie_offset_, 0U);
+ return finalizer_reference_zombie_offset_;
+ }
+
private:
// Allocates uninitialized storage.
static Object* Allocate(size_t num_bytes);
@@ -108,6 +150,21 @@
// free.
static size_t num_objects_allocated_;
+ // offset of java.lang.ref.Reference.referent
+ static size_t reference_referent_offset_;
+
+ // offset of java.lang.ref.Reference.queue
+ static size_t reference_queue_offset_;
+
+ // offset of java.lang.ref.Reference.queueNext
+ static size_t reference_queueNext_offset_;
+
+ // offset of java.lang.ref.Reference.pendingNext
+ static size_t reference_pendingNext_offset_;
+
+ // offset of java.lang.ref.FinalizerReference.zombie
+ static size_t finalizer_reference_zombie_offset_;
+
DISALLOW_IMPLICIT_CONSTRUCTORS(Heap);
};