summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Bornstein <danfuzz@android.com>2011-03-16 09:53:14 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-03-16 09:53:14 -0700
commit1b4822ecb93021e6273c92093f78dcb6ccc0cf91 (patch)
treeb6ff5a3af84067279b3f55755f5d47ebbf93f6d4
parent4b74b47d2120d4f3fecc47d5dd62ac65708737e5 (diff)
parent7f02b2dcf790fd1637dcea136af8d248e0aac56e (diff)
downloadandroid_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.c55
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");
}