summaryrefslogtreecommitdiff
path: root/src/object_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/object_utils.h')
-rw-r--r--src/object_utils.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/object_utils.h b/src/object_utils.h
index 249fffb303..99768de070 100644
--- a/src/object_utils.h
+++ b/src/object_utils.h
@@ -67,11 +67,15 @@ class ClassHelper {
dex_cache_(NULL),
dex_file_(NULL),
interface_type_list_(NULL),
- klass_(c) {
+ klass_(NULL) {
+ if (c != NULL) {
+ ChangeClass(c);
+ }
}
void ChangeClass(const Class* new_c) {
- CHECK(new_c != NULL);
+ CHECK(new_c != NULL) << "klass_=" << klass_ << " " << HexDump(klass_, sizeof(Class), true);
+ CHECK(new_c->IsClass()) << "klass_=" << klass_ << " " << HexDump(klass_, sizeof(Class), true);
if (dex_cache_ != NULL) {
DexCache* new_c_dex_cache = new_c->GetDexCache();
if (new_c_dex_cache != dex_cache_) {
@@ -87,6 +91,7 @@ class ClassHelper {
// The returned const char* is only guaranteed to be valid for the lifetime of the ClassHelper.
// If you need it longer, copy it into a std::string.
const char* GetDescriptor() {
+ CHECK(klass_ != NULL);
if (UNLIKELY(klass_->IsArrayClass())) {
return GetArrayDescriptor();
} else if (UNLIKELY(klass_->IsPrimitive())) {
@@ -104,6 +109,7 @@ class ClassHelper {
const char* GetArrayDescriptor() {
std::string result("[");
const Class* saved_klass = klass_;
+ CHECK(saved_klass != NULL);
ChangeClass(klass_->GetComponentType());
result += GetDescriptor();
ChangeClass(saved_klass);
@@ -121,6 +127,7 @@ class ClassHelper {
}
uint32_t NumInterfaces() {
+ DCHECK(klass_ != NULL);
if (klass_->IsPrimitive()) {
return 0;
} else if (klass_->IsArrayClass()) {
@@ -138,12 +145,14 @@ class ClassHelper {
}
uint16_t GetInterfaceTypeIdx(uint32_t idx) {
+ DCHECK(klass_ != NULL);
DCHECK(!klass_->IsPrimitive());
DCHECK(!klass_->IsArrayClass());
return GetInterfaceTypeList()->GetTypeItem(idx).type_idx_;
}
Class* GetInterface(uint32_t idx) {
+ DCHECK(klass_ != NULL);
DCHECK(!klass_->IsPrimitive());
if (klass_->IsArrayClass()) {
if (idx == 0) {
@@ -203,6 +212,7 @@ class ClassHelper {
DexCache* GetDexCache() {
DexCache* result = dex_cache_;
if (result == NULL) {
+ DCHECK(klass_ != NULL);
result = klass_->GetDexCache();
dex_cache_ = result;
}