diff options
| author | Dan Bornstein <danfuzz@android.com> | 2011-03-16 09:53:14 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-03-16 09:53:14 -0700 |
| commit | 1b4822ecb93021e6273c92093f78dcb6ccc0cf91 (patch) | |
| tree | b6ff5a3af84067279b3f55755f5d47ebbf93f6d4 | |
| parent | 4b74b47d2120d4f3fecc47d5dd62ac65708737e5 (diff) | |
| parent | 7f02b2dcf790fd1637dcea136af8d248e0aac56e (diff) | |
| download | android_dalvik-1b4822ecb93021e6273c92093f78dcb6ccc0cf91.tar.gz android_dalvik-1b4822ecb93021e6273c92093f78dcb6ccc0cf91.tar.bz2 android_dalvik-1b4822ecb93021e6273c92093f78dcb6ccc0cf91.zip | |
Merge "Clean up dvmFindReferenceMembers()." into dalvik-dev
| -rw-r--r-- | vm/InitRefs.c | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/vm/InitRefs.c b/vm/InitRefs.c index bd892aae5..137a48116 100644 --- a/vm/InitRefs.c +++ b/vm/InitRefs.c @@ -21,11 +21,6 @@ #include "Dalvik.h" -/* - * Helper for dvmInitRequiredClassesAndMembers(), which looks up - * classes and stores them to the indicated pointer, returning a - * failure code (false == failure). - */ static bool initClassReference(ClassObject** pClass, const char* name) { ClassObject* result; @@ -274,15 +269,8 @@ static bool initFieldOffsets(void) { return true; } -static bool initDirectMethodReference(Method** pMethod, const char* className, +static bool initDirectMethodReferenceByClass(Method** pMethod, ClassObject* clazz, const char* name, const char* descriptor) { - ClassObject* clazz = dvmFindSystemClassNoInit(className); - - if (clazz == NULL) { - LOGE("Could not find essential class %s for direct method lookup\n", className); - return false; - } - Method* method = dvmFindDirectMethodByDescriptor(clazz, name, descriptor); if (method == NULL) { @@ -295,6 +283,18 @@ static bool initDirectMethodReference(Method** pMethod, const char* className, return true; } +static bool initDirectMethodReference(Method** pMethod, const char* className, + const char* name, const char* descriptor) { + ClassObject* clazz = dvmFindSystemClassNoInit(className); + + if (clazz == NULL) { + LOGE("Could not find essential class %s for direct method lookup\n", className); + return false; + } + + return initDirectMethodReferenceByClass(pMethod, clazz, name, descriptor); +} + static bool initConstructorReferences(void) { static struct { Method** method; const char* name; const char* descriptor; } constructors[] = { { &gDvm.methJavaLangStackTraceElement_init, "Ljava/lang/StackTraceElement;", @@ -462,21 +462,16 @@ bool dvmFindReferenceMembers(ClassObject* classReference) { return false; } - bool ok = true; - - ok &= initFieldOffset(classReference, &gDvm.offJavaLangRefReference_pendingNext, - "pendingNext", "Ljava/lang/ref/Reference;"); - ok &= initFieldOffset(classReference, &gDvm.offJavaLangRefReference_queue, - "queue", "Ljava/lang/ref/ReferenceQueue;"); - ok &= initFieldOffset(classReference, &gDvm.offJavaLangRefReference_queueNext, - "queueNext", "Ljava/lang/ref/Reference;"); - ok &= initFieldOffset(classReference, &gDvm.offJavaLangRefReference_referent, - "referent", "Ljava/lang/Object;"); - - /* enqueueInternal() is private and thus a direct method. */ - Method *meth = dvmFindDirectMethodByDescriptor(classReference, "enqueueInternal", "()Z"); - ok &= (meth != NULL); - gDvm.methJavaLangRefReference_enqueueInternal = meth; - - return ok; + /* Note: enqueueInternal() is private and thus a direct method. */ + + return initFieldOffset(classReference, &gDvm.offJavaLangRefReference_pendingNext, + "pendingNext", "Ljava/lang/ref/Reference;") + && initFieldOffset(classReference, &gDvm.offJavaLangRefReference_queue, + "queue", "Ljava/lang/ref/ReferenceQueue;") + && initFieldOffset(classReference, &gDvm.offJavaLangRefReference_queueNext, + "queueNext", "Ljava/lang/ref/Reference;") + && initFieldOffset(classReference, &gDvm.offJavaLangRefReference_referent, + "referent", "Ljava/lang/Object;") + && initDirectMethodReferenceByClass(&gDvm.methJavaLangRefReference_enqueueInternal, + classReference, "enqueueInternal", "()Z"); } |
