[vmkit-commits] [PATCH] Impl more JVM_* methods--Is{Interface, Array, Primitive}, GetPD, GetCompType
Will Dietz
wdietz2 at illinois.edu
Thu Nov 3 07:27:11 PDT 2011
Inlined below.
~Will
>From bf6022bd59d8c1c4cb5b3451de6be01450e05d47 Mon Sep 17 00:00:00 2001
From: Will Dietz <w at wdtz.org>
Date: Wed, 2 Nov 2011 21:05:45 -0500
Subject: [PATCH 06/17] Impl more JVM_*
methods--Is{Interface,Array,Primitive},GetPD,GetCompType
---
lib/J3/ClassLib/OpenJDK/OpenJDK.inc | 87 +++++++++++++++++++++++++++++++++--
1 files changed, 82 insertions(+), 5 deletions(-)
diff --git a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
index 60db37a..3d157ed 100644
--- a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
+++ b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
@@ -1106,7 +1106,24 @@ JVM_GetClassLoader(JNIEnv *env, jclass cls) {
JNIEXPORT jboolean JNICALL
JVM_IsInterface(JNIEnv *env, jclass cls) {
- NYI();
+ jboolean res = JNI_FALSE;
+
+ JavaObject * Cl = 0;
+ llvm_gcroot(Cl, 0);
+ BEGIN_JNI_EXCEPTION
+
+ Cl = *(JavaObject**)cls;
+
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false);
+
+ res = cl->isInterface();
+
+ RETURN_FROM_JNI(res);
+
+ END_JNI_EXCEPTION
+
+ return JNI_FALSE;
}
JNIEXPORT jobjectArray JNICALL
@@ -1121,7 +1138,20 @@ JVM_SetClassSigners(JNIEnv *env, jclass cls,
jobjectArray signers) {
JNIEXPORT jobject JNICALL
JVM_GetProtectionDomain(JNIEnv *env, jclass cls) {
- NYI();
+ JavaObjectClass * JOC = 0;
+ JavaObject * pd = 0;
+ llvm_gcroot(JOC, 0);
+ llvm_gcroot(pd, 0);
+ BEGIN_JNI_EXCEPTION
+
+ JOC = *(JavaObjectClass**)cls;
+ pd = JavaObjectClass::getProtectionDomain(JOC);
+
+ RETURN_FROM_JNI((jobject)th->pushJNIRef(pd));
+
+ END_JNI_EXCEPTION
+
+ return 0;
}
JNIEXPORT void JNICALL
@@ -1131,17 +1161,64 @@ JVM_SetProtectionDomain(JNIEnv *env, jclass
cls, jobject protection_domain) {
JNIEXPORT jboolean JNICALL
JVM_IsArrayClass(JNIEnv *env, jclass cls) {
- NYI();
+ JavaObject * Cl = 0;
+ llvm_gcroot(Cl, 0);
+ BEGIN_JNI_EXCEPTION
+
+ Cl = *(JavaObject**)cls;
+
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false);
+
+ RETURN_FROM_JNI(cl->isArray());
+
+ END_JNI_EXCEPTION
+
+ return JNI_FALSE;
}
JNIEXPORT jboolean JNICALL
JVM_IsPrimitiveClass(JNIEnv *env, jclass cls) {
- NYI();
+ JavaObject * Cl = 0;
+ llvm_gcroot(Cl, 0);
+ BEGIN_JNI_EXCEPTION
+
+ Cl = *(JavaObject**)cls;
+
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false);
+
+ RETURN_FROM_JNI(cl->isPrimitive());
+
+ END_JNI_EXCEPTION
+
+ return JNI_FALSE;
}
JNIEXPORT jclass JNICALL
JVM_GetComponentType(JNIEnv *env, jclass cls) {
- NYI();
+ JavaObject * Cl = 0;
+ JavaObject* res = 0;
+ llvm_gcroot(Cl, 0);
+ llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
+ Cl = *(JavaObject**)cls;
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false);
+
+ if (cl->isArray()) {
+ UserCommonClass* bc = cl->asArrayClass()->baseClass();
+ res = (JavaObject*)bc->getClassDelegateePtr(vm);
+ } else {
+ res = 0;
+ }
+
+ RETURN_FROM_JNI((jclass)res);
+
+ END_JNI_EXCEPTION
+
+ return 0;
}
JNIEXPORT jint JNICALL
--
1.7.5.1
More information about the vmkit-commits
mailing list