[vmkit-commits] [vmkit] r56217 - /vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Sep 15 08:21:58 PDT 2008
Author: geoffray
Date: Mon Sep 15 10:21:58 2008
New Revision: 56217
URL: http://llvm.org/viewvc/llvm-project?rev=56217&view=rev
Log:
Use the correct class in a isolate environment.
Do invokeSpecial instead of invokeVirtual when it's possible.
Modified:
vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc
Modified: vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc?rev=56217&r1=56216&r2=56217&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc (original)
+++ vmkit/branches/isolate/lib/JnJVM/Classpath/ClasspathMethod.cpp.inc Mon Sep 15 10:21:58 2008
@@ -94,17 +94,17 @@
if (isVirtual(meth->access)) {
verifyNull(obj);
- UserCommonClass* cl;
-#ifdef MULTIPLE_VM
- jclass Cl = (jclass)vm->upcalls->methodClass->getInt32Field((JavaObject*)Meth);
- cl = NativeUtil::resolvedImplClass(Cl, false);
-
-#else
- cl = meth->classDef;
-#endif
if (!(obj->classOf->isAssignableFrom(cl))) {
vm->illegalArgumentExceptionForMethod(meth, cl, obj->classOf);
}
+#ifdef MULTIPLE_VM
+ if (isInterface(cl->classDef->access)) {
+ cl = obj->classOf->lookupClassFromMethod(meth);
+ } else {
+ jclass Cl = (jclass)vm->upcalls->methodClass->getInt32Field((JavaObject*)Meth);
+ cl = (UserClass*)NativeUtil::resolvedImplClass(Cl, false);
+ }
+#endif
} else {
cl->initialiseClass(vm);
@@ -121,7 +121,7 @@
#define RUN_METH(TYPE) \
try{ \
if (isVirtual(meth->access)) { \
- if (isPublic(meth->access)) { \
+ if (isPublic(meth->access) && !isFinal(meth->access) && !isFinal(meth->classDef->access)) { \
val = meth->invoke##TYPE##VirtualBuf(vm, cl, obj, _buf); \
} else { \
val = meth->invoke##TYPE##SpecialBuf(vm, cl, obj, _buf); \
More information about the vmkit-commits
mailing list