[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