diff options
author | 2019-09-18 06:14:50 +0000 | |
---|---|---|
committer | 2019-09-18 06:14:50 +0000 | |
commit | 4ac0e1571e015a01d75091c3daef065f9624ad77 (patch) | |
tree | 4d13edeab88bd6fd724388c48385b0c3cca4f3a8 /runtime/mirror/executable.h | |
parent | 5a2301d897294ff4ee6de71f459dc2566dc3fa1a (diff) |
Revert "Revert "Basic structural redefinition support""
This reverts commit 5a2301d897294ff4ee6de71f459dc2566dc3fa1a.
Bug: 134162467
Reason for revert: Relanding as unclear if issue is due to topic.
Change-Id: Ib1d1cf2e9132e30c9649b760ae9ae2d8ceacf843
Diffstat (limited to 'runtime/mirror/executable.h')
-rw-r--r-- | runtime/mirror/executable.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/runtime/mirror/executable.h b/runtime/mirror/executable.h index a99c3ec461..8eca206d5a 100644 --- a/runtime/mirror/executable.h +++ b/runtime/mirror/executable.h @@ -41,6 +41,10 @@ class MANAGED Executable : public AccessibleObject { return reinterpret_cast64<ArtMethod*>(GetField64<kVerifyFlags>(ArtMethodOffset())); } + template <typename Visitor, + VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> + inline void VisitTarget(Visitor&& v) REQUIRES(Locks::mutator_lock_); + template <bool kTransactionActive = false, bool kCheckTransaction = true, VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags> @@ -61,6 +65,21 @@ class MANAGED Executable : public AccessibleObject { uint32_t access_flags_; uint32_t dex_method_index_; + template<bool kTransactionActive = false> + void SetDeclaringClass(ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_) { + SetFieldObject<kTransactionActive>(DeclaringClassOffset(), klass); + } + + template<bool kTransactionActive = false> + void SetAccessFlags(uint32_t flags) REQUIRES_SHARED(Locks::mutator_lock_) { + SetField32<kTransactionActive>(AccessFlagsOffset(), flags); + } + + template<bool kTransactionActive = false> + void SetDexMethodIndex(uint32_t idx) REQUIRES_SHARED(Locks::mutator_lock_) { + SetField32<kTransactionActive>(DexMethodIndexOffset(), idx); + } + static MemberOffset DeclaringClassOffset() { return MemberOffset(OFFSETOF_MEMBER(Executable, declaring_class_)); } |