[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