[vmkit-commits] [vmkit] r197891 - correctly handle virtual calls

Gael Thomas gael.thomas at lip6.fr
Sun Dec 22 13:09:21 PST 2013


Author: gthomas
Date: Sun Dec 22 15:09:21 2013
New Revision: 197891

URL: http://llvm.org/viewvc/llvm-project?rev=197891&view=rev
Log:
correctly handle virtual calls

Modified:
    vmkit/branches/mcjit/lib/j3/vm/j3options.cc
    vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc

Modified: vmkit/branches/mcjit/lib/j3/vm/j3options.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3options.cc?rev=197891&r1=197890&r2=197891&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3options.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3options.cc Sun Dec 22 15:09:21 2013
@@ -19,7 +19,7 @@ J3Options::J3Options() {
 	debugLoad = 0;
 	debugResolve = 0;
 	debugIniting = 0;
-	debugTranslate = 0;
+	debugTranslate = 1;
 	debugLinking = 0;
 
 	genDebugExecute = debugExecute ? 1 : 0;

Modified: vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc?rev=197891&r1=197890&r2=197891&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc Sun Dec 22 15:09:21 2013
@@ -1,6 +1,8 @@
 #include "j3/j3trampoline.h"
 #include "j3/j3object.h"
 #include "j3/j3method.h"
+#include "j3/j3thread.h"
+#include "j3/j3class.h"
 #include "j3/j3.h"
 
 using namespace j3;
@@ -10,23 +12,17 @@ void* J3Trampoline::staticTrampoline(J3O
 }
 	
 void* J3Trampoline::virtualTrampoline(J3Object* obj, J3Method* target) {
-	return staticTrampoline(obj, target);
-	J3::internalError(L"implement me: virtualTrampoline");
-#if 0
 	J3ObjectHandle* prev = J3Thread::get()->tell();
 	J3ObjectHandle* handle = J3Thread::get()->push(obj);
+	J3ObjectType* cl = handle->vt()->type()->asObjectType();
+	J3Method* impl = cl == target->cl() ? target : cl->findVirtualMethod(target->name(), target->sign());
 
-	fprintf(stderr, "target: %ls::%ls\n", target->cl()->name()->cStr(), target->name()->cStr());
-
-	void* res = target->fnPtr();
-
-	if(!J3Cst::isStatic(target->access()))
-		handle->vt()->virtualMethods()[target->index()] = res;
+	void* res = impl->fnPtr();
+	handle->vt()->virtualMethods()[impl->index()] = res;
 
 	J3Thread::get()->restore(prev);
 
 	return res;
-#endif
 }
 
 void* J3Trampoline::buildTrampoline(vmkit::BumpAllocator* allocator, J3Method* m, void* tra) {	





More information about the vmkit-commits mailing list