diff options
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/mirror/class-inl.h | 15 | ||||
-rw-r--r-- | runtime/mirror/class.cc | 5 | ||||
-rw-r--r-- | runtime/mirror/class.h | 9 | ||||
-rw-r--r-- | runtime/mirror/object-inl.h | 3 |
4 files changed, 24 insertions, 8 deletions
diff --git a/runtime/mirror/class-inl.h b/runtime/mirror/class-inl.h index a556a1c..d454ae8 100644 --- a/runtime/mirror/class-inl.h +++ b/runtime/mirror/class-inl.h @@ -33,8 +33,14 @@ namespace art { namespace mirror { +template<VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> inline uint32_t Class::GetObjectSize() { - DCHECK(!IsVariableSize()) << " class=" << PrettyTypeOf(this); + if (kIsDebugBuild) { + // Use a local variable as (D)CHECK can't handle the space between + // the two template params. + bool is_variable_size = IsVariableSize<kVerifyFlags, kReadBarrierOption>(); + CHECK(!is_variable_size) << " class=" << PrettyTypeOf(this); + } return GetField32(OFFSET_OF_OBJECT_MEMBER(Class, object_size_)); } @@ -514,6 +520,13 @@ bool Class::IsArtMethodClass() { return this == ArtMethod::GetJavaLangReflectArtMethod<kReadBarrierOption>(); } +template<VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> +inline bool Class::IsClassClass() { + Class* java_lang_Class = GetClass<kVerifyFlags, kReadBarrierOption>()-> + template GetClass<kVerifyFlags, kReadBarrierOption>(); + return this == java_lang_Class; +} + } // namespace mirror } // namespace art diff --git a/runtime/mirror/class.cc b/runtime/mirror/class.cc index 662303e..ff63782 100644 --- a/runtime/mirror/class.cc +++ b/runtime/mirror/class.cc @@ -315,11 +315,6 @@ bool Class::IsInSamePackage(Class* that) { ClassHelper(klass2).GetDescriptor()); } -bool Class::IsClassClass() { - Class* java_lang_Class = GetClass()->GetClass(); - return this == java_lang_Class; -} - bool Class::IsStringClass() const { return this == String::GetJavaLangString(); } diff --git a/runtime/mirror/class.h b/runtime/mirror/class.h index 00ecead..1f393db 100644 --- a/runtime/mirror/class.h +++ b/runtime/mirror/class.h @@ -366,6 +366,8 @@ class MANAGED Class : public Object { return GetComponentType<kVerifyFlags, kReadBarrierOption>() != NULL; } + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, + ReadBarrierOption kReadBarrierOption = kWithReadBarrier> bool IsClassClass() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); bool IsStringClass() const; @@ -423,10 +425,13 @@ class MANAGED Class : public Object { Object* AllocNonMovableObject(Thread* self) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, + ReadBarrierOption kReadBarrierOption = kWithReadBarrier> bool IsVariableSize() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { // Classes and arrays vary in size, and so the object_size_ field cannot // be used to get their instance size - return IsClassClass() || IsArrayClass(); + return IsClassClass<kVerifyFlags, kReadBarrierOption>() || + IsArrayClass<kVerifyFlags, kReadBarrierOption>(); } template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, @@ -443,6 +448,8 @@ class MANAGED Class : public Object { void SetClassSize(uint32_t new_class_size) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, + ReadBarrierOption kReadBarrierOption = kWithReadBarrier> uint32_t GetObjectSize() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); void SetObjectSize(uint32_t new_object_size) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { diff --git a/runtime/mirror/object-inl.h b/runtime/mirror/object-inl.h index 064fe30..a2072a2 100644 --- a/runtime/mirror/object-inl.h +++ b/runtime/mirror/object-inl.h @@ -389,7 +389,8 @@ inline size_t Object::SizeOf() { result = AsClass<kNewFlags, kReadBarrierOption>()-> template SizeOf<kNewFlags, kReadBarrierOption>(); } else { - result = GetClass<kNewFlags, kReadBarrierOption>()->GetObjectSize(); + result = GetClass<kNewFlags, kReadBarrierOption>()-> + template GetObjectSize<kNewFlags, kReadBarrierOption>(); } DCHECK_GE(result, sizeof(Object)) << " class=" << PrettyTypeOf(GetClass<kNewFlags, kReadBarrierOption>()); |