Better unresolved type support.

Also fix bug where miranda methods were changing their declaring class
and thereby breaking their return type indices.
Add support for dumping stacks on abort.

Change-Id: I3782864736b12d1f81ab9aea4909213d3344ba13
diff --git a/src/dex_verifier.h b/src/dex_verifier.h
index d12e14f..b1e6e29 100644
--- a/src/dex_verifier.h
+++ b/src/dex_verifier.h
@@ -92,7 +92,9 @@
     return IsUninitializedReference() || IsUninitializedThisReference() ||
         IsUnresolvedAndUninitializedReference();
   }
-
+  bool IsUnresolvedTypes() const {
+    return IsUnresolvedReference() || IsUnresolvedAndUninitializedReference();
+  }
   bool IsLowHalf() const { return type_ == kRegTypeLongLo ||
                                   type_ == kRegTypeDoubleLo ||
                                   type_ == kRegTypeConstLo; }
@@ -191,6 +193,9 @@
     return down_cast<Class*>(klass_or_descriptor_);
   }
 
+  bool IsJavaLangObject() const {
+    return IsReference() && GetClass()->IsObjectClass();
+  }
   String* GetDescriptor() const {
     DCHECK(IsUnresolvedReference());
     DCHECK(klass_or_descriptor_ != NULL);
@@ -1125,7 +1130,8 @@
    * Returned references are assumed to be initialized. Returns kRegTypeUnknown for "void".
    */
   const RegType& GetMethodReturnType() {
-    return reg_types_.FromClass(method_->GetReturnType());
+    return reg_types_.FromDescriptor(method_->GetDeclaringClass()->GetClassLoader(),
+                                     method_->GetReturnTypeDescriptor());
   }
 
   /*