Fixes for "null instanceof" and class initialization

First issue was that the codegen seemed to expect r0 to contain 0 for
a false result in the null object case. This is a quick fix to make
that true. Given that the code is doing the work of a null check and
pulling out the object's class, the code should probably just pass the
class to the helper function, making this a case of IsAssignableFrom,
not instanceof.

Second issues were related to missing EnsureInitialized calls in two
different code paths, one coming from reflection, one coming from
managed code. New Class::AllocObject assert should help keep us out of
trouble in the future in this area, although perhaps Heap::AllocObject
should have a check as well.

Change-Id: Ib7975b6457481c1ac85135d38f42c6061e6443a0
diff --git a/src/object.h b/src/object.h
index 1a137bd..47aa98d 100644
--- a/src/object.h
+++ b/src/object.h
@@ -191,11 +191,9 @@
 // C++ mirror of java.lang.Object
 class MANAGED Object {
  public:
-  static bool InstanceOf(const Object* object, const Class* klass) {
-    if (object == NULL) {
-      return false;
-    }
-    return object->InstanceOf(klass);
+  static uint32_t InstanceOfFromCode(const Object* object, const Class* klass) {
+    DCHECK(object != NULL);
+    return object->InstanceOf(klass) ? 1 : 0;
   }
 
   static MemberOffset ClassOffset() {
@@ -1295,6 +1293,11 @@
     return GetStatus() >= kStatusVerified;
   }
 
+  // Returns true if the class is initializing.
+  bool IsInitializing() const {
+    return GetStatus() >= kStatusInitializing;
+  }
+
   // Returns true if the class is initialized.
   bool IsInitialized() const {
     return GetStatus() == kStatusInitialized;