diff options
| author | 2017-10-03 07:57:14 +0000 | |
|---|---|---|
| committer | 2017-10-03 07:57:14 +0000 | |
| commit | aeafbe4d42b132c8705a364d2f6bde301c3d379f (patch) | |
| tree | a663f0b2fecf4e3af5ea0ff3c6656d04320b3421 /runtime/interpreter/interpreter_common.h | |
| parent | 026b3d4604e0c15b45da1ccefbca6a9daf0236c8 (diff) | |
| parent | 2e59994c3c586d8b753e4b14a94c81bce3dba1a9 (diff) | |
Merge "ART: support for const-method-{handle,type}"
Diffstat (limited to 'runtime/interpreter/interpreter_common.h')
| -rw-r--r-- | runtime/interpreter/interpreter_common.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/runtime/interpreter/interpreter_common.h b/runtime/interpreter/interpreter_common.h index 50bd7e73cd..fafb2a36f7 100644 --- a/runtime/interpreter/interpreter_common.h +++ b/runtime/interpreter/interpreter_common.h @@ -202,6 +202,25 @@ static inline bool DoInvoke(Thread* self, } } +static inline mirror::MethodHandle* ResolveMethodHandle(uint32_t method_handle_index, + ArtMethod* referrer) + REQUIRES_SHARED(Locks::mutator_lock_) { + ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); + return class_linker->ResolveMethodHandle(method_handle_index, referrer); +} + +static inline mirror::MethodType* ResolveMethodType(Thread* self, + uint32_t method_type_index, + ArtMethod* referrer) + REQUIRES_SHARED(Locks::mutator_lock_) { + ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); + const DexFile* dex_file = referrer->GetDexFile(); + StackHandleScope<2> hs(self); + Handle<mirror::DexCache> dex_cache(hs.NewHandle(referrer->GetDexCache())); + Handle<mirror::ClassLoader> class_loader(hs.NewHandle(referrer->GetClassLoader())); + return class_linker->ResolveMethodType(*dex_file, method_type_index, dex_cache, class_loader); +} + // Performs a signature polymorphic invoke (invoke-polymorphic/invoke-polymorphic-range). template<bool is_range> bool DoInvokePolymorphic(Thread* self, |