Added method fields for register map. Populated by verifier.

The register map consists of 2 ByteArrays, 1 for the header and 1 for
the actual data.

Change-Id: Ibd7455a2eff7572587dabff7dd67fd810ce21f84
diff --git a/src/dex_verifier.h b/src/dex_verifier.h
index 41223b2..404227d 100644
--- a/src/dex_verifier.h
+++ b/src/dex_verifier.h
@@ -34,10 +34,6 @@
 
 class DexVerifier {
  public:
-  /* Verify a class. Returns "true" on success. */
-  static bool VerifyClass(Class* klass);
-
- private:
   /*
    * RegType holds information about the type of data held in a register.
    * For most types it's a simple enum. For reference types it holds a
@@ -361,6 +357,20 @@
     }
   };
 
+  /* Header for RegisterMap */
+  struct RegisterMapHeader {
+    uint8_t format_;          /* enum RegisterMapFormat; MUST be first entry */
+    uint8_t reg_width_;       /* bytes per register line, 1+ */
+    uint16_t num_entries_;    /* number of entries */
+    bool    format_on_heap_;  /* indicates allocation on heap */
+
+    RegisterMapHeader(uint8_t format, uint8_t reg_width, uint16_t num_entries,
+        bool format_on_heap)
+        : format_(format), reg_width_(reg_width), num_entries_(num_entries),
+          format_on_heap_(format_on_heap) {
+    }
+  };
+
   /*
    * This is a single variable-size structure. It may be allocated on the
    * heap or mapped out of a (post-dexopt) DEX file.
@@ -374,19 +384,29 @@
    * Size of (format==FormatCompact16): 4 + (2 + reg_width) * num_entries
    */
   struct RegisterMap {
-    /* header */
-    uint8_t format_;          /* enum RegisterMapFormat; MUST be first entry */
-    uint8_t reg_width_;       /* bytes per register line, 1+ */
-    uint16_t num_entries_;    /* number of entries */
-    bool    format_on_heap_;  /* indicates allocation on heap */
+    RegisterMapHeader* header_;
+    uint8_t* data_;
+    bool needs_free_;
 
-    /* raw data starts here; need not be aligned */
-    UniquePtr<uint8_t[]> data_;
+    RegisterMap(ByteArray* header, ByteArray* data) {
+      header_ = (RegisterMapHeader*) header->GetData();
+      data_ = (uint8_t*) data->GetData();
+      needs_free_ = false;
+    }
 
     RegisterMap(uint8_t format, uint8_t reg_width, uint16_t num_entries,
-        bool format_on_heap, uint32_t data_size)
-        : format_(format), reg_width_(reg_width), num_entries_(num_entries),
-          format_on_heap_(format_on_heap), data_(new uint8_t[data_size]()) {
+        bool format_on_heap, uint32_t data_size) {
+      header_ = new RegisterMapHeader(format, reg_width, num_entries,
+          format_on_heap);
+      data_ = new uint8_t[data_size]();
+      needs_free_ = true;
+    }
+
+    ~RegisterMap() {
+      if (needs_free_) {
+        delete header_;
+        delete [] data_;
+      }
     }
   };
 
@@ -541,6 +561,10 @@
     return (uint32_t) (kRegTypeUninit | (uidx << kRegTypeUninitShift));
   }
 
+  /* Verify a class. Returns "true" on success. */
+  static bool VerifyClass(Class* klass);
+
+ private:
   /*
    * Perform verification on a single method.
    *