diff options
Diffstat (limited to 'src/dex_cache.cc')
-rw-r--r-- | src/dex_cache.cc | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/dex_cache.cc b/src/dex_cache.cc index 02a8a55..adb889b 100644 --- a/src/dex_cache.cc +++ b/src/dex_cache.cc @@ -23,29 +23,34 @@ namespace art { -void DexCache::Init(String* location, +void DexCache::Init(const DexFile* dex_file, + String* location, ObjectArray<String>* strings, ObjectArray<Class>* resolved_types, - ObjectArray<Method>* resolved_methods, + ObjectArray<AbstractMethod>* resolved_methods, ObjectArray<Field>* resolved_fields, ObjectArray<StaticStorageBase>* initialized_static_storage) { + CHECK(dex_file != NULL); CHECK(location != NULL); CHECK(strings != NULL); CHECK(resolved_types != NULL); CHECK(resolved_methods != NULL); CHECK(resolved_fields != NULL); CHECK(initialized_static_storage != NULL); - Set(kLocation, location); - Set(kStrings, strings); - Set(kResolvedTypes, resolved_types); - Set(kResolvedMethods, resolved_methods); - Set(kResolvedFields, resolved_fields); - Set(kInitializedStaticStorage, initialized_static_storage); + + SetFieldPtr(OFFSET_OF_OBJECT_MEMBER(DexCache, dex_file_), dex_file, false); + SetFieldObject(OFFSET_OF_OBJECT_MEMBER(DexCache, location_), location, false); + SetFieldObject(StringsOffset(), strings, false); + SetFieldObject(OFFSET_OF_OBJECT_MEMBER(DexCache, resolved_types_), resolved_types, false); + SetFieldObject(ResolvedMethodsOffset(), resolved_methods, false); + SetFieldObject(ResolvedFieldsOffset(), resolved_fields, false); + SetFieldObject(OFFSET_OF_OBJECT_MEMBER(DexCache, initialized_static_storage_), + initialized_static_storage, false); Runtime* runtime = Runtime::Current(); if (runtime->HasResolutionMethod()) { // Initialize the resolve methods array to contain trampolines for resolution. - Method* trampoline = runtime->GetResolutionMethod(); + AbstractMethod* trampoline = runtime->GetResolutionMethod(); size_t length = resolved_methods->GetLength(); for (size_t i = 0; i < length; i++) { resolved_methods->SetWithoutChecks(i, trampoline); @@ -53,10 +58,10 @@ void DexCache::Init(String* location, } } -void DexCache::Fixup(Method* trampoline) { +void DexCache::Fixup(AbstractMethod* trampoline) { // Fixup the resolve methods array to contain trampoline for resolution. CHECK(trampoline != NULL); - ObjectArray<Method>* resolved_methods = down_cast<ObjectArray<Method>*>(Get(kResolvedMethods)); + ObjectArray<AbstractMethod>* resolved_methods = GetResolvedMethods(); size_t length = resolved_methods->GetLength(); for (size_t i = 0; i < length; i++) { if (resolved_methods->GetWithoutChecks(i) == NULL) { |