[vmkit-commits] [vmkit] r180477 - Fixed a bug in identifying anonymous classes. Fixed a bug in identifying outer and inner classes.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:16:09 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:14:38 2013
New Revision: 180477

URL: http://llvm.org/viewvc/llvm-project?rev=180477&view=rev
Log:
Fixed a bug in identifying anonymous classes. Fixed a bug in identifying outer and inner classes.
(cherry picked from commit 62163dc358e7316f6f3a0fe66f987fd895cc265f)

Modified:
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc
    vmkit/trunk/lib/j3/ClassLib/Reflect.inc
    vmkit/trunk/lib/j3/VMCore/JavaClass.cpp

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180477&r1=180476&r2=180477&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 12:14:38 2013
@@ -71,6 +71,7 @@ public:
   static JavaObject* getDeclaringClass(JavaObjectClass* Cl);
   static int getModifiers(JavaObjectClass* Cl);
   static JavaObject* getEnclosingClass(JavaObjectClass* Cl);
+  static bool isAnonymousClass(JavaObjectClass* Cl);
 };
 
 class JavaObjectVMField : public JavaObject {

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=180477&r1=180476&r2=180477&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc Thu Apr 25 12:14:38 2013
@@ -518,17 +518,14 @@ JNIEXPORT jboolean Java_java_lang_VMClas
 JNIEnv *env,
 jclass clazz, 
 #endif
-JavaObject* Cl) {
+JavaObjectClass* Cl) {
  
   jboolean res = false;
   llvm_gcroot(Cl, 0);
 
   BEGIN_NATIVE_EXCEPTION(0)
   
-  Jnjvm* vm = JavaThread::get()->getJVM();
-  UserClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false)->asClass();
-
-  if (cl) res = cl->isAnonymous;
+  res = JavaObjectClass::isAnonymousClass(Cl);
 
   END_NATIVE_EXCEPTION
 

Modified: vmkit/trunk/lib/j3/ClassLib/Reflect.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/Reflect.inc?rev=180477&r1=180476&r2=180477&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/Reflect.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/Reflect.inc Thu Apr 25 12:14:38 2013
@@ -256,13 +256,28 @@ JavaObject* JavaObjectClass::getEnclosin
 	llvm_gcroot(res, 0);
 
 	Jnjvm* vm = JavaThread::get()->getJVM();
-	UserCommonClass* cl = UserCommonClass::resolvedImplClass(vm, Cl, false);
-	if (cl->isClass()) {
-		UserClass *outerCl = cl->asClass()->getOuterClass();
+	UserCommonClass* ccl = UserCommonClass::resolvedImplClass(vm, Cl, false);
+	if (ccl->isClass()) {
+		UserClass *cl = ccl->asClass();
+		cl->resolveInnerOuterClasses();
+		UserClass *outerCl = cl->getOuterClass();
 		if (outerCl != NULL)
 			res = outerCl->getClassDelegatee(vm, NULL);
 	}
 	return res;
 }
 
+bool JavaObjectClass::isAnonymousClass(JavaObjectClass* Cl)
+{
+	llvm_gcroot(Cl, 0);
+
+	Jnjvm* vm = JavaThread::get()->getJVM();
+	UserCommonClass* ccl = UserCommonClass::resolvedImplClass(vm, Cl, false);
+	if (!ccl->isClass()) return false;
+
+	UserClass *cl = ccl->asClass();
+	cl->resolveInnerOuterClasses();
+	return cl->isAnonymous;
+}
+
 } // end namespace j3

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180477&r1=180476&r2=180477&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 12:14:38 2013
@@ -991,6 +991,7 @@ void UserClass::resolveInnerOuterClasses
 
         if (clInner == this) {
           outerClass = clOuter;
+          if (!innerName) isAnonymous = true;
         } else if (clOuter == this) {
           if (!innerClasses) {
             innerClasses = (Class**)
@@ -998,7 +999,7 @@ void UserClass::resolveInnerOuterClasses
                                               "Inner classes");
           }
           clInner->setInnerAccess(accessFlags);
-          if (!innerName) isAnonymous = true;
+          if (!innerName) clInner->isAnonymous = true;
           innerClasses[nbInnerClasses++] = clInner;
         }
       }





More information about the vmkit-commits mailing list