From fc45cf767b04acc1650ecb3b79e66a35e36c5f28 Mon Sep 17 00:00:00 2001 From: Joel Dice Date: Wed, 2 Mar 2011 08:29:44 -0700 Subject: [PATCH] implement JNIEnv::GetSuperclass; use vm::run in JNIEnv::GetObjectClass --- src/jnienv.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/jnienv.cpp b/src/jnienv.cpp index 3fb07db9ad..3d17a22949 100644 --- a/src/jnienv.cpp +++ b/src/jnienv.cpp @@ -430,12 +430,40 @@ GetDirectBufferCapacity(Thread*, jobject) return -1; } +uint64_t +getObjectClass(Thread* t, uintptr_t* arguments) +{ + jobject o = reinterpret_cast(arguments[0]); + + return reinterpret_cast + (makeLocalReference(t, getJClass(t, objectClass(t, *o)))); +} + jclass JNICALL GetObjectClass(Thread* t, jobject o) { - ENTER(t, Thread::ActiveState); + uintptr_t arguments[] = { reinterpret_cast(o) }; - return makeLocalReference(t, getJClass(t, objectClass(t, *o))); + return reinterpret_cast(run(t, getObjectClass, arguments)); +} + +uint64_t +getSuperclass(Thread* t, uintptr_t* arguments) +{ + jclass c = reinterpret_cast(arguments[0]); + + object super = classSuper(t, jclassVmClass(t, *c)); + + return super ? reinterpret_cast + (makeLocalReference(t, getJClass(t, super))) : 0; +} + +jclass JNICALL +GetSuperclass(Thread* t, jclass c) +{ + uintptr_t arguments[] = { reinterpret_cast(c) }; + + return reinterpret_cast(run(t, getSuperclass, arguments)); } jboolean JNICALL @@ -2358,6 +2386,7 @@ populateJNITables(JavaVMVTable* vmTable, JNIEnvVTable* envTable) envTable->GetDirectBufferCapacity = local::GetDirectBufferCapacity; envTable->DeleteLocalRef = local::DeleteLocalRef; envTable->GetObjectClass = local::GetObjectClass; + envTable->GetSuperclass = local::GetSuperclass; envTable->IsInstanceOf = local::IsInstanceOf; envTable->IsAssignableFrom = local::IsAssignableFrom; envTable->GetFieldID = local::GetFieldID;