summaryrefslogtreecommitdiff
path: root/runtime/mirror/class-inl.h
diff options
context:
space:
mode:
author Roland Levillain <rpl@google.com> 2017-02-06 10:13:08 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2017-02-06 10:13:09 +0000
commitf85fc6bd9d65ef4689d6af797adb889da8cf15e3 (patch)
tree8fe8d622e30a550eb3a336bc12f925eb40828e6b /runtime/mirror/class-inl.h
parentfe076a51b0498c2771341cc09a77db15b437328f (diff)
parent8ca4e4e7a55f7a7079ec1f95a3188d9df434704b (diff)
Merge "Clean up art::mirror::Class::SetSuperClass."
Diffstat (limited to 'runtime/mirror/class-inl.h')
-rw-r--r--runtime/mirror/class-inl.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/runtime/mirror/class-inl.h b/runtime/mirror/class-inl.h
index 5465e37993..2cff47e8b4 100644
--- a/runtime/mirror/class-inl.h
+++ b/runtime/mirror/class-inl.h
@@ -65,6 +65,17 @@ inline Class* Class::GetSuperClass() {
OFFSET_OF_OBJECT_MEMBER(Class, super_class_));
}
+inline void Class::SetSuperClass(ObjPtr<Class> new_super_class) {
+ // Super class is assigned once, except during class linker initialization.
+ if (kIsDebugBuild) {
+ ObjPtr<Class> old_super_class =
+ GetFieldObject<Class>(OFFSET_OF_OBJECT_MEMBER(Class, super_class_));
+ DCHECK(old_super_class == nullptr || old_super_class == new_super_class);
+ }
+ DCHECK(new_super_class != nullptr);
+ SetFieldObject<false>(OFFSET_OF_OBJECT_MEMBER(Class, super_class_), new_super_class);
+}
+
template<VerifyObjectFlags kVerifyFlags, ReadBarrierOption kReadBarrierOption>
inline ClassLoader* Class::GetClassLoader() {
return GetFieldObject<ClassLoader, kVerifyFlags, kReadBarrierOption>(