Move reference processing next to its implementation.

With this change, all of the reference processing now happens in the
same module.  As such, we can make all of the implementation routines
static.

Change-Id: If3f1ff2e48f49b57b75cfc9d0af61ad892435c47
diff --git a/vm/alloc/Heap.c b/vm/alloc/Heap.c
index d6e08ae..7e47e73 100644
--- a/vm/alloc/Heap.c
+++ b/vm/alloc/Heap.c
@@ -676,35 +676,13 @@
         dvmHeapReScanMarkedObjects();
     }
 
-    /* All strongly-reachable objects have now been marked.
+    /*
+     * All strongly-reachable objects have now been marked.  Process
+     * weakly-reachable objects discovered while tracing.
      */
-    LOGD_HEAP("Handling soft references...");
-    if (!clearSoftRefs) {
-        dvmHandleSoftRefs(&gcHeap->softReferences);
-    }
-    dvmClearWhiteRefs(&gcHeap->softReferences);
-
-    LOGD_HEAP("Handling weak references...");
-    dvmClearWhiteRefs(&gcHeap->weakReferences);
-
-    /* Once all weak-reachable objects have been taken
-     * care of, any remaining unmarked objects can be finalized.
-     */
-    LOGD_HEAP("Finding finalizations...");
-    dvmHeapScheduleFinalizations();
-
-    LOGD_HEAP("Handling f-reachable soft references...");
-    dvmClearWhiteRefs(&gcHeap->softReferences);
-
-    LOGD_HEAP("Handling f-reachable weak references...");
-    dvmClearWhiteRefs(&gcHeap->weakReferences);
-
-    /* Any remaining objects that are not pending finalization
-     * could be phantom-reachable.  This will mark any phantom-reachable
-     * objects, as well as enqueue their references.
-     */
-    LOGD_HEAP("Handling phantom references...");
-    dvmClearWhiteRefs(&gcHeap->phantomReferences);
+    dvmHeapProcessReferences(&gcHeap->softReferences, clearSoftRefs,
+                             &gcHeap->weakReferences,
+                             &gcHeap->phantomReferences);
 
 #if defined(WITH_JIT)
     /*