Tidy up and finish reference table dumping.

Change-Id: I9f0d214e27a75d373e3144b738f1e3da51bbc0ca
diff --git a/src/indirect_reference_table.cc b/src/indirect_reference_table.cc
index 14d804b..69f171c 100644
--- a/src/indirect_reference_table.cc
+++ b/src/indirect_reference_table.cc
@@ -60,9 +60,7 @@
   alloc_entries_ = max_entries_ = -1;
 }
 
-/*
- * Make sure that the entry at "idx" is correctly paired with "iref".
- */
+// Make sure that the entry at "idx" is correctly paired with "iref".
 bool IndirectReferenceTable::CheckEntry(const char* what, IndirectRef iref, int idx) const {
   const Object* obj = table_[idx];
   IndirectRef checkRef = ToIndirectRef(obj, idx);
@@ -89,12 +87,11 @@
   DCHECK_GE(segment_state_.parts.numHoles, prevState.parts.numHoles);
 
   if (topIndex == alloc_entries_) {
-    /* reached end of allocated space; did we hit buffer max? */
+    // reached end of allocated space; did we hit buffer max?
     if (topIndex == max_entries_) {
-      LOG(ERROR) << "JNI ERROR (app bug): " << kind_ << " table overflow "
-                 << "(max=" << max_entries_ << ")";
-      Dump();
-      LOG(FATAL); // TODO: operator<< for IndirectReferenceTable
+      LOG(FATAL) << "JNI ERROR (app bug): " << kind_ << " table overflow "
+                 << "(max=" << max_entries_ << ")\n"
+                 << Dumpable<IndirectReferenceTable>(*this);
     }
 
     size_t newSize = alloc_entries_ * 2;
@@ -106,12 +103,11 @@
     table_ = reinterpret_cast<const Object**>(realloc(table_, newSize * sizeof(const Object*)));
     slot_data_ = reinterpret_cast<IndirectRefSlot*>(realloc(slot_data_, newSize * sizeof(IndirectRefSlot)));
     if (table_ == NULL || slot_data_ == NULL) {
-      LOG(ERROR) << "JNI ERROR (app bug): unable to expand "
+      LOG(FATAL) << "JNI ERROR (app bug): unable to expand "
                  << kind_ << " table (from "
                  << alloc_entries_ << " to " << newSize
-                 << ", max=" << max_entries_ << ")";
-      Dump();
-      LOG(FATAL); // TODO: operator<< for IndirectReferenceTable
+                 << ", max=" << max_entries_ << ")\n"
+                 << Dumpable<IndirectReferenceTable>(*this);
     }
 
     // Clear the newly-allocated slot_data_ elements.
@@ -120,16 +116,14 @@
     alloc_entries_ = newSize;
   }
 
-  /*
-   * We know there's enough room in the table.  Now we just need to find
-   * the right spot.  If there's a hole, find it and fill it; otherwise,
-   * add to the end of the list.
-   */
+  // We know there's enough room in the table.  Now we just need to find
+  // the right spot.  If there's a hole, find it and fill it; otherwise,
+  // add to the end of the list.
   IndirectRef result;
   int numHoles = segment_state_.parts.numHoles - prevState.parts.numHoles;
   if (numHoles > 0) {
     DCHECK_GT(topIndex, 1U);
-    /* find the first hole; likely to be near the end of the list */
+    // Find the first hole; likely to be near the end of the list.
     const Object** pScan = &table_[topIndex - 1];
     DCHECK(*pScan != NULL);
     while (*--pScan != NULL) {
@@ -140,7 +134,7 @@
     *pScan = obj;
     segment_state_.parts.numHoles--;
   } else {
-    /* add to the end */
+    // Add to the end.
     UpdateSlotAdd(obj, topIndex);
     result = ToIndirectRef(obj, topIndex);
     table_[topIndex++] = obj;
@@ -157,16 +151,13 @@
 
 void IndirectReferenceTable::AssertEmpty() {
   if (begin() != end()) {
-    Dump();
-    LOG(FATAL) << "Internal Error: non-empty local reference table";
+    LOG(FATAL) << "Internal Error: non-empty local reference table\n"
+               << Dumpable<IndirectReferenceTable>(*this);
   }
 }
 
-/*
- * Verify that the indirect table lookup is valid.
- *
- * Returns "false" if something looks bad.
- */
+// Verifies that the indirect table lookup is valid.
+// Returns "false" if something looks bad.
 bool IndirectReferenceTable::GetChecked(IndirectRef iref) const {
   if (iref == NULL) {
     LOG(WARNING) << "Attempt to look up NULL " << kind_;
@@ -181,7 +172,6 @@
   int topIndex = segment_state_.parts.topIndex;
   int idx = ExtractIndex(iref);
   if (idx >= topIndex) {
-    /* bad -- stale reference? */
     LOG(ERROR) << "JNI ERROR (app bug): accessed stale " << kind_ << " "
                << iref << " (index " << idx << " in a table of size " << topIndex << ")";
     AbortMaybe();
@@ -214,19 +204,14 @@
   return Find(direct_pointer, 0, segment_state_.parts.topIndex, table_) != -1;
 }
 
-/*
- * Remove "obj" from "pRef".  We extract the table offset bits from "iref"
- * and zap the corresponding entry, leaving a hole if it's not at the top.
- *
- * If the entry is not between the current top index and the bottom index
- * specified by the cookie, we don't remove anything.  This is the behavior
- * required by JNI's DeleteLocalRef function.
- *
- * Note this is NOT called when a local frame is popped.  This is only used
- * for explicit single removals.
- *
- * Returns "false" if nothing was removed.
- */
+// Removes an object. We extract the table offset bits from "iref"
+// and zap the corresponding entry, leaving a hole if it's not at the top.
+// If the entry is not between the current top index and the bottom index
+// specified by the cookie, we don't remove anything. This is the behavior
+// required by JNI's DeleteLocalRef function.
+// This method is not called when a local frame is popped; this is only used
+// for explicit single removals.
+// Returns "false" if nothing was removed.
 bool IndirectReferenceTable::Remove(uint32_t cookie, IndirectRef iref) {
   IRTSegmentState prevState;
   prevState.all = cookie;
@@ -299,11 +284,9 @@
       }
     }
   } else {
-    /*
-     * Not the top-most entry.  This creates a hole.  We NULL out the
-     * entry to prevent somebody from deleting it twice and screwing up
-     * the hole count.
-     */
+    // Not the top-most entry.  This creates a hole.  We NULL out the
+    // entry to prevent somebody from deleting it twice and screwing up
+    // the hole count.
     if (table_[idx] == NULL) {
       LOG(INFO) << "--- WEIRD: removing null entry " << idx;
       return false;
@@ -329,10 +312,10 @@
   }
 }
 
-void IndirectReferenceTable::Dump() const {
-  LOG(WARNING) << kind_ << " table dump:";
+void IndirectReferenceTable::Dump(std::ostream& os) const {
+  os << kind_ << " table dump:\n";
   std::vector<const Object*> entries(table_, table_ + Capacity());
-  ReferenceTable::Dump(entries);
+  ReferenceTable::Dump(os, entries);
 }
 
 }  // namespace art