summaryrefslogtreecommitdiffstats
path: root/src/dex_cache.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/dex_cache.cc')
-rw-r--r--src/dex_cache.cc27
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) {