diff options
Diffstat (limited to 'runtime/mirror/executable.h')
-rw-r--r-- | runtime/mirror/executable.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/runtime/mirror/executable.h b/runtime/mirror/executable.h index 232fce8693..6c465f6bbb 100644 --- a/runtime/mirror/executable.h +++ b/runtime/mirror/executable.h @@ -32,9 +32,42 @@ namespace mirror { // C++ mirror of java.lang.reflect.Executable. class MANAGED Executable : public AccessibleObject { + public: + // Called from Constructor::CreateFromArtMethod, Method::CreateFromArtMethod. + template <PointerSize kPointerSize, bool kTransactionActive> + bool CreateFromArtMethod(ArtMethod* method) REQUIRES_SHARED(Locks::mutator_lock_) + REQUIRES(!Roles::uninterruptible_); + + ArtMethod* GetArtMethod() REQUIRES_SHARED(Locks::mutator_lock_); + // Only used by the image writer. + template <bool kTransactionActive = false> + void SetArtMethod(ArtMethod* method) REQUIRES_SHARED(Locks::mutator_lock_); + mirror::Class* GetDeclaringClass() REQUIRES_SHARED(Locks::mutator_lock_); + private: uint16_t has_real_parameter_data_; + HeapReference<mirror::Class> declaring_class_; + HeapReference<mirror::Class> declaring_class_of_overridden_method_; HeapReference<mirror::Array> parameters_; + uint64_t art_method_; + uint32_t access_flags_; + uint32_t dex_method_index_; + + static MemberOffset ArtMethodOffset() { + return MemberOffset(OFFSETOF_MEMBER(Executable, art_method_)); + } + static MemberOffset DeclaringClassOffset() { + return MemberOffset(OFFSETOF_MEMBER(Executable, declaring_class_)); + } + static MemberOffset DeclaringClassOfOverriddenMethodOffset() { + return MemberOffset(OFFSETOF_MEMBER(Executable, declaring_class_of_overridden_method_)); + } + static MemberOffset AccessFlagsOffset() { + return MemberOffset(OFFSETOF_MEMBER(Executable, access_flags_)); + } + static MemberOffset DexMethodIndexOffset() { + return MemberOffset(OFFSETOF_MEMBER(Executable, dex_method_index_)); + } friend struct art::ExecutableOffsets; // for verifying offset information DISALLOW_IMPLICIT_CONSTRUCTORS(Executable); |