Add DexCache table of <Method*, Method::GetCode()>

Change-Id: I69d46e61ff40456ff76888ad90b00e2036250d40
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 3c72dad..e0b55ca 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -425,15 +425,20 @@
 }
 
 DexCache* ClassLinker::AllocDexCache(const DexFile& dex_file) {
-  DexCache* dex_cache = down_cast<DexCache*>(AllocObjectArray<Object>(DexCache::kMax));
+  DexCache* dex_cache = down_cast<DexCache*>(AllocObjectArray<Object>(DexCache::LengthAsArray()));
   dex_cache->Init(String::AllocFromModifiedUtf8(dex_file.GetLocation().c_str()),
                   AllocObjectArray<String>(dex_file.NumStringIds()),
                   AllocObjectArray<Class>(dex_file.NumTypeIds()),
                   AllocObjectArray<Method>(dex_file.NumMethodIds()),
-                  AllocObjectArray<Field>(dex_file.NumFieldIds()));
+                  AllocObjectArray<Field>(dex_file.NumFieldIds()),
+                  AllocCodeAndMethods(dex_file.NumMethodIds()));
   return dex_cache;
 }
 
+CodeAndMethods* ClassLinker::AllocCodeAndMethods(size_t length) {
+  return down_cast<CodeAndMethods*>(IntArray::Alloc(CodeAndMethods::LengthAsArray(length)));
+}
+
 Class* ClassLinker::AllocClass(Class* java_lang_Class, size_t class_size) {
   DCHECK_GE(class_size, sizeof(Class));
   Class* klass = Heap::AllocObject(java_lang_Class, class_size)->AsClass();
@@ -761,6 +766,7 @@
   dst->dex_cache_types_ = klass->dex_cache_->GetTypes();
   dst->dex_cache_methods_ = klass->dex_cache_->GetMethods();
   dst->dex_cache_fields_ = klass->dex_cache_->GetFields();
+  dst->dex_cache_code_and_methods_ = klass->dex_cache_->GetCodeAndMethods();
 
   // TODO: check for finalize method