diff options
Diffstat (limited to 'runtime/mirror/class.h')
-rw-r--r-- | runtime/mirror/class.h | 63 |
1 files changed, 22 insertions, 41 deletions
diff --git a/runtime/mirror/class.h b/runtime/mirror/class.h index c545a9b7d5..95fc35dd35 100644 --- a/runtime/mirror/class.h +++ b/runtime/mirror/class.h @@ -18,6 +18,7 @@ #define ART_RUNTIME_MIRROR_CLASS_H_ #include "base/bit_utils.h" +#include "base/casts.h" #include "base/enums.h" #include "base/iteration_range.h" #include "class_flags.h" @@ -77,38 +78,16 @@ class MANAGED Class FINAL : public Object { static constexpr uint32_t kPrimitiveTypeSizeShiftShift = 16; static constexpr uint32_t kPrimitiveTypeMask = (1u << kPrimitiveTypeSizeShiftShift) - 1; - // Make ClassStatus available as Class::Status. - using Status = ClassStatus; - - // Required for a minimal change. Fix up and remove in a future change. - static constexpr Status kStatusRetired = Status::kStatusRetired; - static constexpr Status kStatusErrorResolved = Status::kStatusErrorResolved; - static constexpr Status kStatusErrorUnresolved = Status::kStatusErrorUnresolved; - static constexpr Status kStatusNotReady = Status::kStatusNotReady; - static constexpr Status kStatusIdx = Status::kStatusIdx; - static constexpr Status kStatusLoaded = Status::kStatusLoaded; - static constexpr Status kStatusResolving = Status::kStatusResolving; - static constexpr Status kStatusResolved = Status::kStatusResolved; - static constexpr Status kStatusVerifying = Status::kStatusVerifying; - static constexpr Status kStatusRetryVerificationAtRuntime = - Status::kStatusRetryVerificationAtRuntime; - static constexpr Status kStatusVerifyingAtRuntime = Status::kStatusVerifyingAtRuntime; - static constexpr Status kStatusVerified = Status::kStatusVerified; - static constexpr Status kStatusSuperclassValidated = Status::kStatusSuperclassValidated; - static constexpr Status kStatusInitializing = Status::kStatusInitializing; - static constexpr Status kStatusInitialized = Status::kStatusInitialized; - static constexpr Status kStatusMax = Status::kStatusMax; - template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> - Status GetStatus() REQUIRES_SHARED(Locks::mutator_lock_) { + ClassStatus GetStatus() REQUIRES_SHARED(Locks::mutator_lock_) { // Avoid including "subtype_check_bits_and_status.h" to get the field. // The ClassStatus is always in the least-significant bits of status_. - return static_cast<Status>(static_cast<uint8_t>( - static_cast<uint32_t>(GetField32Volatile<kVerifyFlags>(StatusOffset())) & 0xff)); + return enum_cast<ClassStatus>( + static_cast<uint32_t>(GetField32Volatile<kVerifyFlags>(StatusOffset())) & 0xff); } // This is static because 'this' may be moved by GC. - static void SetStatus(Handle<Class> h_this, Status new_status, Thread* self) + static void SetStatus(Handle<Class> h_this, ClassStatus new_status, Thread* self) REQUIRES_SHARED(Locks::mutator_lock_) REQUIRES(!Roles::uninterruptible_); static MemberOffset StatusOffset() { @@ -118,24 +97,24 @@ class MANAGED Class FINAL : public Object { // Returns true if the class has been retired. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool IsRetired() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetStatus<kVerifyFlags>() == kStatusRetired; + return GetStatus<kVerifyFlags>() == ClassStatus::kRetired; } // Returns true if the class has failed to link. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool IsErroneousUnresolved() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetStatus<kVerifyFlags>() == kStatusErrorUnresolved; + return GetStatus<kVerifyFlags>() == ClassStatus::kErrorUnresolved; } // Returns true if the class has failed to initialize. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool IsErroneousResolved() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetStatus<kVerifyFlags>() == kStatusErrorResolved; + return GetStatus<kVerifyFlags>() == ClassStatus::kErrorResolved; } // Returns true if the class status indicets that the class has failed to link or initialize. - static bool IsErroneous(Status status) { - return status == kStatusErrorUnresolved || status == kStatusErrorResolved; + static bool IsErroneous(ClassStatus status) { + return status == ClassStatus::kErrorUnresolved || status == ClassStatus::kErrorResolved; } // Returns true if the class has failed to link or initialize. @@ -147,44 +126,44 @@ class MANAGED Class FINAL : public Object { // Returns true if the class has been loaded. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool IsIdxLoaded() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetStatus<kVerifyFlags>() >= kStatusIdx; + return GetStatus<kVerifyFlags>() >= ClassStatus::kIdx; } // Returns true if the class has been loaded. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool IsLoaded() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetStatus<kVerifyFlags>() >= kStatusLoaded; + return GetStatus<kVerifyFlags>() >= ClassStatus::kLoaded; } // Returns true if the class has been linked. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool IsResolved() REQUIRES_SHARED(Locks::mutator_lock_) { - Status status = GetStatus<kVerifyFlags>(); - return status >= kStatusResolved || status == kStatusErrorResolved; + ClassStatus status = GetStatus<kVerifyFlags>(); + return status >= ClassStatus::kResolved || status == ClassStatus::kErrorResolved; } // Returns true if the class should be verified at runtime. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool ShouldVerifyAtRuntime() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetStatus<kVerifyFlags>() == kStatusRetryVerificationAtRuntime; + return GetStatus<kVerifyFlags>() == ClassStatus::kRetryVerificationAtRuntime; } // Returns true if the class has been verified. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool IsVerified() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetStatus<kVerifyFlags>() >= kStatusVerified; + return GetStatus<kVerifyFlags>() >= ClassStatus::kVerified; } // Returns true if the class is initializing. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool IsInitializing() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetStatus<kVerifyFlags>() >= kStatusInitializing; + return GetStatus<kVerifyFlags>() >= ClassStatus::kInitializing; } // Returns true if the class is initialized. template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> bool IsInitialized() REQUIRES_SHARED(Locks::mutator_lock_) { - return GetStatus<kVerifyFlags>() == kStatusInitialized; + return GetStatus<kVerifyFlags>() == ClassStatus::kInitialized; } template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> @@ -333,8 +312,10 @@ class MANAGED Class FINAL : public Object { // Returns true if this class is the placeholder and should retire and // be replaced with a class with the right size for embedded imt/vtable. bool IsTemp() REQUIRES_SHARED(Locks::mutator_lock_) { - Status s = GetStatus(); - return s < Status::kStatusResolving && s != kStatusErrorResolved && ShouldHaveEmbeddedVTable(); + ClassStatus s = GetStatus(); + return s < ClassStatus::kResolving && + s != ClassStatus::kErrorResolved && + ShouldHaveEmbeddedVTable(); } String* GetName() REQUIRES_SHARED(Locks::mutator_lock_); // Returns the cached name. |