[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