[vmkit-commits] [vmkit] r180446 - Implementation of "Class getEnclosingClass(Class klass)"
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 10:12:16 PDT 2013
Author: peter.senna
Date: Thu Apr 25 12:10:26 2013
New Revision: 180446
URL: http://llvm.org/viewvc/llvm-project?rev=180446&view=rev
Log:
Implementation of "Class getEnclosingClass(Class klass)"
(cherry picked from commit 6a7e03ddb8f9ea820277f42eb22f726469fe7b0e)
Modified:
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc?rev=180446&r1=180445&r2=180446&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc Thu Apr 25 12:10:26 2013
@@ -535,4 +535,48 @@ JavaObject* Cl) {
return res;
}
+/**
+ * Returns the class which immediately encloses the specified class.If
+ * the class is a top-level class, this method returns null
+ *
+ * @param klass the class whose enclosing class should be returned.
+ * @return the immediate enclosing class, or nul if this is
+ * a top-level class.
+ * @since 1.5
+ * static native Class getEnclosingClass(Class klass);
+ */
+
+
+JNIEXPORT JavaObject* JNICALL Java_java_lang_VMClass_getEnclosingClass(
+#ifdef NATIVE_JNI
+JNIEnv *env,
+jclass clazz,
+#endif
+JavaObjectClass* klass) {
+ JavaObject* res;
+ llvm_gcroot(klass, 0);
+ llvm_gcroot(res, 0);
+
+ UserCommonClass* cl = JavaObjectClass::getClass(klass);
+ const UTF8* name=cl->name;
+
+ char enclosingClassName[name->size];
+
+ int i;
+ for(i=name->size-1;i>0;i--)
+ if((char)name->elements[i]=='$'){
+ for (int j=0;j<i;j++)
+ enclosingClassName[j]=(char)name->elements[j];
+ enclosingClassName[i]=0;
+ break;
+ }
+
+ if(i){
+ UserCommonClass* tmp=cl->classLoader->loadClassFromAsciiz(enclosingClassName, 0, 1);
+ res=tmp->getClassDelegatee((Jnjvm*)vmkit::Thread::get()->MyVM);
+ }
+
+ return res;
+}
+
}
More information about the vmkit-commits
mailing list