Add compiler allocation paths Class::NewInstanceFromCode and Array::AllocFromCode

Change-Id: I604377656f182f29692cda757dc7fdb4acc938b9
diff --git a/src/class_linker.cc b/src/class_linker.cc
index e0b55ca..4738926 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -89,9 +89,11 @@
   // Object[] is for DexCache and int[] is for various Class members.
   Class* object_array_class = AllocClass(java_lang_Class, sizeof(Class));
   CHECK(object_array_class != NULL);
+  object_array_class->array_rank_ = 1;
   object_array_class->component_type_ = java_lang_Object;
   Class* int_array_class = AllocClass(java_lang_Class, sizeof(Class));
   CHECK(int_array_class != NULL);
+  int_array_class->array_rank_ = 1;
   IntArray::SetArrayClass(int_array_class);
 
   // String and char[] are necessary so that FindClass can assign names to members
@@ -102,6 +104,7 @@
   String::SetClass(java_lang_String);
   Class* char_array_class = AllocClass(java_lang_Class, sizeof(Class));
   CHECK(char_array_class != NULL);
+  char_array_class->array_rank_ = 1;
   CharArray::SetArrayClass(char_array_class);
   // Now String::Alloc* can be used
 
@@ -258,7 +261,7 @@
     ClassRoot class_root = static_cast<ClassRoot>(i);
     Class* klass = GetClassRoot(class_root);
     CHECK(klass != NULL);
-    DCHECK(klass->IsArray() || klass->IsPrimitive() || klass->dex_cache_ != NULL);
+    DCHECK(klass->IsArrayClass() || klass->IsPrimitive() || klass->dex_cache_ != NULL);
     // note SetClassRoot does additional validation.
     // if possible add new checks there to catch errors early
   }
@@ -373,7 +376,7 @@
   if (dex_cache != NULL) {
     state->dex_caches.insert(dex_cache);
   } else {
-    DCHECK(klass->IsArray() || klass->IsPrimitive());
+    DCHECK(klass->IsArrayClass() || klass->IsPrimitive());
   }
 
   // check if this is a root, if so, register it
@@ -1865,7 +1868,7 @@
     resolved = FindClass(descriptor, class_loader);
   }
   if (resolved != NULL) {
-    Class* check = resolved->IsArray() ? resolved->component_type_ : resolved;
+    Class* check = resolved->IsArrayClass() ? resolved->component_type_ : resolved;
     if (dex_cache != check->GetDexCache()) {
       if (check->GetClassLoader() != NULL) {
         LG << "Class resolved by unexpected DEX";  // TODO: IllegalAccessError