diff options
Diffstat (limited to 'runtime/mirror/object-inl.h')
-rw-r--r-- | runtime/mirror/object-inl.h | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/runtime/mirror/object-inl.h b/runtime/mirror/object-inl.h index 2581fad740..7c73f9f03d 100644 --- a/runtime/mirror/object-inl.h +++ b/runtime/mirror/object-inl.h @@ -28,8 +28,9 @@ #include "monitor.h" #include "object_array-inl.h" #include "read_barrier-inl.h" -#include "runtime.h" #include "reference.h" +#include "runtime.h" +#include "string-inl.h" #include "throwable.h" namespace art { @@ -337,9 +338,14 @@ inline DoubleArray* Object::AsDoubleArray() { return down_cast<DoubleArray*>(this); } -template<VerifyObjectFlags kVerifyFlags> +template<VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> +inline bool Object::IsString() { + return GetClass<kVerifyFlags, kReadBarrierOption>()->IsStringClass(); +} + +template<VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption> inline String* Object::AsString() { - DCHECK(GetClass<kVerifyFlags>()->IsStringClass()); + DCHECK((IsString<kVerifyFlags, kReadBarrierOption>())); return down_cast<String*>(this); } @@ -385,6 +391,9 @@ inline size_t Object::SizeOf() { } else if (IsClass<kNewFlags, kReadBarrierOption>()) { result = AsClass<kNewFlags, kReadBarrierOption>()-> template SizeOf<kNewFlags, kReadBarrierOption>(); + } else if (GetClass<kNewFlags, kReadBarrierOption>()->IsStringClass()) { + result = AsString<kNewFlags, kReadBarrierOption>()-> + template SizeOf<kNewFlags>(); } else { result = GetClass<kNewFlags, kReadBarrierOption>()-> template GetObjectSize<kNewFlags, kReadBarrierOption>(); @@ -947,7 +956,7 @@ inline void Object::VisitReferences(const Visitor& visitor, mirror::Class* klass = GetClass<kVerifyFlags>(); if (klass == Class::GetJavaLangClass()) { AsClass<kVerifyNone>()->VisitReferences<kVisitClass>(klass, visitor); - } else if (klass->IsArrayClass()) { + } else if (klass->IsArrayClass() || klass->IsStringClass()) { if (klass->IsObjectArrayClass<kVerifyNone>()) { AsObjectArray<mirror::Object, kVerifyNone>()->VisitReferences<kVisitClass>(visitor); } else if (kVisitClass) { |