Merge "Compiler set up of InitializedStaticStorage" into dalvik-dev
diff --git a/src/compiler.cc b/src/compiler.cc
index b88fd5a..017861f 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -62,27 +62,27 @@
 
   // Strings are easy, they always are simply resolved to literals in the same file
   DexCache* dex_cache = class_linker->FindDexCache(dex_file);
-  for (size_t i = 0; i < dex_cache->NumStrings(); i++) {
-    class_linker->ResolveString(dex_file, i, dex_cache);
+  for (size_t string_idx = 0; string_idx < dex_cache->NumStrings(); string_idx++) {
+    class_linker->ResolveString(dex_file, string_idx, dex_cache);
   }
 
   // Class derived values are more complicated, they require the linker and loader
-  for (size_t i = 0; i < dex_cache->NumResolvedTypes(); i++) {
-    Class* klass = class_linker->ResolveType(dex_file, i, dex_cache, class_loader);
+  for (size_t type_idx = 0; type_idx < dex_cache->NumResolvedTypes(); type_idx++) {
+    Class* klass = class_linker->ResolveType(dex_file, type_idx, dex_cache, class_loader);
     CHECK(klass->IsResolved());
   }
-  for (size_t i = 0; i < dex_cache->NumResolvedMethods(); i++) {
+  for (size_t method_idx = 0; method_idx < dex_cache->NumResolvedMethods(); method_idx++) {
     // unknown if direct or virtual, try both
-    Method* method = class_linker->ResolveMethod(dex_file, i, dex_cache, class_loader, false);
+    Method* method = class_linker->ResolveMethod(dex_file, method_idx, dex_cache, class_loader, false);
     if (method == NULL) {
-      class_linker->ResolveMethod(dex_file, i, dex_cache, class_loader, true);
+      class_linker->ResolveMethod(dex_file, method_idx, dex_cache, class_loader, true);
     }
   }
-  for (size_t i = 0; i < dex_cache->NumResolvedFields(); i++) {
+  for (size_t field_idx = 0; field_idx < dex_cache->NumResolvedFields(); field_idx++) {
     // unknown if instance or static, try both
-    Field* field = class_linker->ResolveField(dex_file, i, dex_cache, class_loader, false);
+    Field* field = class_linker->ResolveField(dex_file, field_idx, dex_cache, class_loader, false);
     if (field == NULL) {
-      class_linker->ResolveField(dex_file, i, dex_cache, class_loader, true);
+      class_linker->ResolveField(dex_file, field_idx, dex_cache, class_loader, true);
     }
   }
 }
@@ -98,8 +98,8 @@
 
 void Compiler::VerifyDexFile(const ClassLoader* class_loader, const DexFile& dex_file) {
   ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
-  for (size_t i = 0; i < dex_file.NumClassDefs(); i++) {
-    const DexFile::ClassDef& class_def = dex_file.GetClassDef(i);
+  for (size_t class_def_index = 0; class_def_index < dex_file.NumClassDefs(); class_def_index++) {
+    const DexFile::ClassDef& class_def = dex_file.GetClassDef(class_def_index);
     const char* descriptor = dex_file.GetClassDescriptor(class_def);
     Class* klass = class_linker->FindClass(descriptor, class_loader);
     CHECK(klass->IsResolved());
@@ -120,8 +120,8 @@
 
 void Compiler::InitializeClassesWithoutClinit(const ClassLoader* class_loader, const DexFile& dex_file) {
   ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
-  for (size_t i = 0; i < dex_file.NumClassDefs(); i++) {
-    const DexFile::ClassDef& class_def = dex_file.GetClassDef(i);
+  for (size_t class_def_index = 0; class_def_index < dex_file.NumClassDefs(); class_def_index++) {
+    const DexFile::ClassDef& class_def = dex_file.GetClassDef(class_def_index);
     const char* descriptor = dex_file.GetClassDescriptor(class_def);
     Class* klass = class_linker->FindClass(descriptor, class_loader);
     CHECK(klass != NULL);
@@ -137,9 +137,14 @@
       continue;
     }
     klass->SetStatus(Class::kStatusInitialized);
-    // TODO: enable after crash investigation
-    // DexCache* dex_cache = class_linker->FindDexCache(dex_file);
-    // dex_cache->GetInitializedStaticStorage()->Set(i, klass);
+  }
+
+  DexCache* dex_cache = class_linker->FindDexCache(dex_file);
+  for (size_t type_idx = 0; type_idx < dex_cache->NumResolvedTypes(); type_idx++) {
+    Class* klass = class_linker->ResolveType(dex_file, type_idx, dex_cache, class_loader);
+    if (klass->IsInitialized()) {
+      dex_cache->GetInitializedStaticStorage()->Set(type_idx, klass);
+    }
   }
 }
 
@@ -154,8 +159,8 @@
 
 void Compiler::CompileDexFile(const ClassLoader* class_loader, const DexFile& dex_file) {
   ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
-  for (size_t i = 0; i < dex_file.NumClassDefs(); i++) {
-    const DexFile::ClassDef& class_def = dex_file.GetClassDef(i);
+  for (size_t class_def_index = 0; class_def_index < dex_file.NumClassDefs(); class_def_index++) {
+    const DexFile::ClassDef& class_def = dex_file.GetClassDef(class_def_index);
     const char* descriptor = dex_file.GetClassDescriptor(class_def);
     Class* klass = class_linker->FindClass(descriptor, class_loader);
     CHECK(klass != NULL);