diff options
author | 2015-12-15 15:02:47 -0800 | |
---|---|---|
committer | 2015-12-16 14:16:31 -0800 | |
commit | e64300b8488716056775ecbfa2915dd1b4ce7e08 (patch) | |
tree | be23a7086c1e369527dda5450a9868f2d29c5669 /runtime/entrypoints/entrypoint_utils.cc | |
parent | bc90a0538e56f98b8e138cb622e6b9d834244ad9 (diff) |
Revert "Revert "Combine direct_methods_ and virtual_methods_ fields of mirror::Class""
This reverts commit ae358c1d5cef227b44d6f4971b79e1ab91aa26eb.
Bug: 24618811
Change-Id: I8becf9bae3258450b90cfef5e79589db7c535a4d
Diffstat (limited to 'runtime/entrypoints/entrypoint_utils.cc')
-rw-r--r-- | runtime/entrypoints/entrypoint_utils.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/runtime/entrypoints/entrypoint_utils.cc b/runtime/entrypoints/entrypoint_utils.cc index 87e29ae3c3..915d9ab5e7 100644 --- a/runtime/entrypoints/entrypoint_utils.cc +++ b/runtime/entrypoints/entrypoint_utils.cc @@ -306,11 +306,13 @@ JValue InvokeProxyInvocationHandler(ScopedObjectAccessAlreadyRunnable& soa, cons mirror::Method* interface_method = soa.Decode<mirror::Method*>(interface_method_jobj); ArtMethod* proxy_method = rcvr->GetClass()->FindVirtualMethodForInterface( interface_method->GetArtMethod(), sizeof(void*)); - auto* virtual_methods = proxy_class->GetVirtualMethodsPtr(); + auto virtual_methods = proxy_class->GetVirtualMethodsSlice(sizeof(void*)); size_t num_virtuals = proxy_class->NumVirtualMethods(); size_t method_size = ArtMethod::Size(sizeof(void*)); + // Rely on the fact that the methods are contiguous to determine the index of the method in + // the slice. int throws_index = (reinterpret_cast<uintptr_t>(proxy_method) - - reinterpret_cast<uintptr_t>(virtual_methods)) / method_size; + reinterpret_cast<uintptr_t>(&virtual_methods.At(0))) / method_size; CHECK_LT(throws_index, static_cast<int>(num_virtuals)); mirror::ObjectArray<mirror::Class>* declared_exceptions = proxy_class->GetThrows()->Get(throws_index); |