From 9437b78780f9e6ffa5797ebe82de8e8d7f3a5ed6 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Wed, 25 Mar 2015 10:08:51 +0000 Subject: Revert "Revert "Inline across dex files."" This reverts commit 6a816cf624ba56bf2872916d7b65b18fd9a411ef. Change-Id: I36cb524108786dd7996f2aea0443675be1f1b859 --- compiler/driver/compiler_driver-inl.h | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'compiler/driver/compiler_driver-inl.h') diff --git a/compiler/driver/compiler_driver-inl.h b/compiler/driver/compiler_driver-inl.h index 4a35e9fbe7..8babc28db9 100644 --- a/compiler/driver/compiler_driver-inl.h +++ b/compiler/driver/compiler_driver-inl.h @@ -39,6 +39,22 @@ inline mirror::ClassLoader* CompilerDriver::GetClassLoader(ScopedObjectAccess& s return soa.Decode(mUnit->GetClassLoader()); } +inline mirror::Class* CompilerDriver::ResolveClass( + const ScopedObjectAccess& soa, Handle dex_cache, + Handle class_loader, uint16_t cls_index, + const DexCompilationUnit* mUnit) { + DCHECK_EQ(dex_cache->GetDexFile(), mUnit->GetDexFile()); + DCHECK_EQ(class_loader.Get(), soa.Decode(mUnit->GetClassLoader())); + mirror::Class* cls = mUnit->GetClassLinker()->ResolveType( + *mUnit->GetDexFile(), cls_index, dex_cache, class_loader); + DCHECK_EQ(cls == nullptr, soa.Self()->IsExceptionPending()); + if (UNLIKELY(cls == nullptr)) { + // Clean up any exception left by type resolution. + soa.Self()->ClearException(); + } + return cls; +} + inline mirror::Class* CompilerDriver::ResolveCompilingMethodsClass( const ScopedObjectAccess& soa, Handle dex_cache, Handle class_loader, const DexCompilationUnit* mUnit) { @@ -46,14 +62,7 @@ inline mirror::Class* CompilerDriver::ResolveCompilingMethodsClass( DCHECK_EQ(class_loader.Get(), soa.Decode(mUnit->GetClassLoader())); const DexFile::MethodId& referrer_method_id = mUnit->GetDexFile()->GetMethodId(mUnit->GetDexMethodIndex()); - mirror::Class* referrer_class = mUnit->GetClassLinker()->ResolveType( - *mUnit->GetDexFile(), referrer_method_id.class_idx_, dex_cache, class_loader); - DCHECK_EQ(referrer_class == nullptr, soa.Self()->IsExceptionPending()); - if (UNLIKELY(referrer_class == nullptr)) { - // Clean up any exception left by type resolution. - soa.Self()->ClearException(); - } - return referrer_class; + return ResolveClass(soa, dex_cache, class_loader, referrer_method_id.class_idx_, mUnit); } inline mirror::ArtField* CompilerDriver::ResolveFieldWithDexFile( -- cgit v1.2.3-59-g8ed1b