[vmkit-commits] [vmkit] r198498 - replace findVirtual/findStatic by generic find methods

Gael Thomas gael.thomas at lip6.fr
Sat Jan 4 07:33:08 PST 2014


Author: gthomas
Date: Sat Jan  4 09:33:07 2014
New Revision: 198498

URL: http://llvm.org/viewvc/llvm-project?rev=198498&view=rev
Log:
replace findVirtual/findStatic by generic find methods

Modified:
    vmkit/branches/mcjit/include/j3/j3class.h
    vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3class.cc
    vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
    vmkit/branches/mcjit/lib/j3/vm/j3method.cc
    vmkit/branches/mcjit/lib/j3/vm/j3object.cc
    vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc

Modified: vmkit/branches/mcjit/include/j3/j3class.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3class.h?rev=198498&r1=198497&r2=198498&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3class.h (original)
+++ vmkit/branches/mcjit/include/j3/j3class.h Sat Jan  4 09:33:07 2014
@@ -125,8 +125,7 @@ namespace j3 {
 		J3InterfaceSlotDescriptor* slotDescriptorAt(uint32_t index) { return &_interfaceSlotDescriptors[index]; }
 		void                       prepareInterfaceTable();
 
-		virtual J3Method*          findVirtualMethod(const vmkit::Name* name, J3Signature* signature, bool error=1);
-		virtual J3Method*          findStaticMethod(const vmkit::Name* name, J3Signature* signature, bool error=1);
+		virtual J3Method*          findMethod(uint32_t access, const vmkit::Name* name, J3Signature* signature, bool error=1);
 
 		bool                       isObjectType() { return 1; }
 
@@ -164,8 +163,8 @@ namespace j3 {
 		size_t            nbPublicMethods() { return _nbPublicMethods; }
 		J3Method**        methods() { return _methods; }
 
-		J3Method*         findMethod(const vmkit::Name* name, J3Signature* signature);
-		J3Field*          findField(const vmkit::Name* name, const J3Type* type);
+		J3Method*         localFindMethod(const vmkit::Name* name, J3Signature* signature);
+		J3Field*          localFindField(const vmkit::Name* name, const J3Type* type);
 
 		virtual J3ObjectHandle* extractAttribute(J3Attribute* attr) = 0;
 	};
@@ -256,11 +255,8 @@ namespace j3 {
 
 		bool                isClass() { return 1; }
 
-		J3Method*           findVirtualMethod(const vmkit::Name* name, J3Signature* signature, bool error=1);
-		J3Method*           findStaticMethod(const vmkit::Name* name, J3Signature* signature, bool error=1);
-
-		J3Field*            findVirtualField(const vmkit::Name* name, J3Type* type, bool error=1);
-		J3Field*            findStaticField(const vmkit::Name* name, J3Type* type, bool error=1);
+		J3Method*           findMethod(uint32_t access, const vmkit::Name* name, J3Signature* signature, bool error=1);
+		J3Field*            findField(uint32_t access, const vmkit::Name* name, J3Type* type, bool error=1);
 	};
 
 	class J3ArrayClass : public J3ObjectType {
@@ -278,8 +274,7 @@ namespace j3 {
 		J3Type*             component() { return _component; }
 		bool                isArrayClass() { return 1; }
 
-		J3Method*           findVirtualMethod(const vmkit::Name* name, J3Signature* signature, bool error=1);
-		J3Method*           findStaticMethod(const vmkit::Name* name, J3Signature* signature, bool error=1);
+		J3Method*           findMethod(uint32_t access, const vmkit::Name* name, J3Signature* signature, bool error=1);
 	};
 
 	class J3Primitive : public J3Type {

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc?rev=198498&r1=198497&r2=198498&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc Sat Jan  4 09:33:07 2014
@@ -49,7 +49,7 @@ void J3Lib::bootstrap(J3* vm) {
 	J3ObjectHandle* mainThread = J3ObjectHandle::doNewObject(vm->threadClass);
 
 	J3Thread::get()->assocJavaThread(mainThread);
-	mainThread->setInteger(vm->threadClass->findVirtualField(vm->names()->get("priority"), vm->typeInteger), 5);
+	mainThread->setInteger(vm->threadClass->findField(0, vm->names()->get("priority"), vm->typeInteger), 5);
 
 	threadInit->invokeSpecial(mainThread, appThreadGroup, vm->utfToString("main"));
 						

Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=198498&r1=198497&r2=198498&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sat Jan  4 09:33:07 2014
@@ -100,9 +100,7 @@ void J3::run() {
 
 #define z_class(clName)                      initialClassLoader->loadClass(names()->get(clName))
 #define z_method(access, cl, name, signature)     initialClassLoader->method(access, cl, name, initialClassLoader->getSignature(cl, signature))
-#define z_field(access, cl, name, type)      J3Cst::isStatic(access)	\
-			? cl->findStaticField(names()->get(name), type)									\
-			: cl->findVirtualField(names()->get(name), type);
+#define z_field(access, cl, name, type)      cl->findField(access, names()->get(name), type)
 
 
 	nbArrayInterfaces    = 2;
@@ -122,12 +120,11 @@ void J3::run() {
 	J3Field hf(J3Cst::ACC_PRIVATE, names()->get("** vmData **"), typeLong);
 	classClass->resolve(&hf, 1);
 	classClassInit           = z_method(0, classClass, initName, names()->get("()V"));
-	classClassVMData         = classClass->findVirtualField(hf.name(), hf.type());
+	classClassVMData         = classClass->findField(0, hf.name(), hf.type());
 
 	threadClass              = z_class("java/lang/Thread");
 	threadClassRun           = z_method(0, threadClass, names()->get("run"), names()->get("()V"));
-	threadClassVMData        = initialClassLoader->loadClass(names()->get("java/lang/Thread"))
-		->findVirtualField(names()->get("eetop"), typeLong);
+	threadClassVMData        = z_field(0, threadClass, "eetop", typeLong);
 
 	fieldClass               = z_class("java/lang/reflect/Field");
 	fieldClassClass          = z_field(0, fieldClass, "clazz", classClass);

Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=198498&r1=198497&r2=198498&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Sat Jan  4 09:33:07 2014
@@ -168,14 +168,10 @@ llvm::Type* J3ObjectType::llvmType() {
 	return loader()->vm()->typeJ3ObjectPtr;
 }
 
-J3Method* J3ObjectType::findVirtualMethod(const vmkit::Name* name, J3Signature* signature, bool error) {
+J3Method* J3ObjectType::findMethod(uint32_t access, const vmkit::Name* name, J3Signature* signature, bool error) {
 	J3::internalError("should not happe: %s::%s\n", J3ObjectType::name()->cStr(), name->cStr());
 }
 
-J3Method* J3ObjectType::findStaticMethod(const vmkit::Name* name, J3Signature* signature, bool error) {
-	J3::internalError("should not happen");
-}
-
 J3ObjectType* J3ObjectType::nativeClass(J3ObjectHandle* handle) {
 	return (J3ObjectType*)(uintptr_t)handle->getLong(J3Thread::get()->vm()->classClassVMData);
 }
@@ -202,7 +198,7 @@ void J3ObjectType::prepareInterfaceTable
 					//fprintf(stderr, "    processing %s method %s %s\n", 
 					//J3Cst::isAbstract(base->access()) ? "abstract" : "concrete",
 					//base->signature()->cStr(), base->name()->cStr());
-					J3Method* method = findVirtualMethod(base->name(), base->signature(), J3Cst::isAbstract(base->access()));
+					J3Method* method = findMethod(0, base->name(), base->signature(), J3Cst::isAbstract(base->access()));
 
 					if(!method)
 						method = base;
@@ -264,7 +260,7 @@ uintptr_t J3Layout::structSize() {
 	return _structSize; 
 }
 
-J3Method* J3Layout::findMethod(const vmkit::Name* name, J3Signature* signature) {
+J3Method* J3Layout::localFindMethod(const vmkit::Name* name, J3Signature* signature) {
 	for(size_t i=0; i<nbMethods(); i++) {
 		J3Method* cur = methods()[i];
 
@@ -277,7 +273,7 @@ J3Method* J3Layout::findMethod(const vmk
 	return 0;
 }
 
-J3Field* J3Layout::findField(const vmkit::Name* name, const J3Type* type) {
+J3Field* J3Layout::localFindField(const vmkit::Name* name, const J3Type* type) {
 	for(size_t i=0; i<nbFields(); i++) {
 		J3Field* cur = fields() + i;
 
@@ -313,14 +309,13 @@ J3ObjectHandle* J3Class::extractAttribut
 		return J3ObjectHandle::doNewArray(loader()->vm()->typeByte->getArray(), 0);
 }
 
-J3Method* J3Class::findVirtualMethod(const vmkit::Name* name, J3Signature* signature, bool error) {
-	//loader()->vm()->log("Lookup: %s %s in %s (%d)", methName->cStr(), methSign->cStr(), name()->cStr(), nbVirtualMethods);
+J3Method* J3Class::findMethod(uint32_t access, const vmkit::Name* name, J3Signature* signature, bool error) {
 	resolve();
 
 	J3Class* cur = this;
-
 	while(1) {
-		J3Method* res = cur->findMethod(name, signature);
+		J3Layout* layout = J3Cst::isStatic(access) ? (J3Layout*)cur->staticLayout() : cur;
+		J3Method* res = layout->localFindMethod(name, signature);
 
 		if(res)
 			return res;
@@ -335,35 +330,14 @@ J3Method* J3Class::findVirtualMethod(con
 	}
 }
 
-J3Method* J3Class::findStaticMethod(const vmkit::Name* name, J3Signature* signature, bool error) {
-	//loader()->vm()->log("Lookup: %s %s in %s", methName->cStr(), methSign->cStr(), name()->cStr());
-	resolve();
-
-	J3Class* cur = this;
-
-	while(1) {
-		J3Method* res = cur->staticLayout()->findMethod(name, signature);
-
-		if(res)
-			return res;
-
-		if(cur == cur->super()) {
-			if(error)
-				J3::noSuchMethodError("no such method", this, name, signature);
-			else
-				return 0;
-		}
-		cur = cur->super();
-	}
-}
-
-J3Field* J3Class::findVirtualField(const vmkit::Name* name, J3Type* type, bool error) {
+J3Field* J3Class::findField(uint32_t access, const vmkit::Name* name, J3Type* type, bool error) {
 	//loader()->vm()->log("Lookup: %s %s in %s", type->name()->cStr(), name->cStr(), J3Class::name()->cStr());
 	resolve();
 	J3Class* cur = this;
 
 	while(1) {
-		J3Field* res = cur->findField(name, type);
+		J3Layout* layout = J3Cst::isStatic(access) ? (J3Layout*)cur->staticLayout() : cur;
+		J3Field* res = layout->localFindField(name, type);
 
 		if(res)
 			return res;
@@ -378,24 +352,12 @@ J3Field* J3Class::findVirtualField(const
 	}
 }
 
-J3Field* J3Class::findStaticField(const vmkit::Name* fname, J3Type* ftype, bool error) {
-	//fprintf(stderr, "Lookup static field %s %s::%s\n", ftype->name()->cStr(), name()->cStr(), fname->cStr());
-	resolve();
-
-	J3Field* res = staticLayout()->findField(fname, ftype);
-
-	if(!res)
-		J3::internalError("implement me");
-
-	return res;
-}
-
 void J3Class::registerNative(const vmkit::Name* name, const vmkit::Name* signatureName, void* fnPtr) {
 	resolve();
 	J3Signature* signature = loader()->getSignature(this, signatureName);
-	J3Method* res = staticLayout()->findMethod(name, signature);
+	J3Method* res = staticLayout()->localFindMethod(name, signature);
 	if(!res)
-		res = findMethod(name, signature);
+		res = localFindMethod(name, signature);
 	if(!res || !J3Cst::isNative(res->access()))
 		J3::noSuchMethodError("unable to find native method", this, name, signature);
 
@@ -451,7 +413,7 @@ void J3Class::doInitialise() {
 			}
 		}
 
-		J3Method* clinit = staticLayout()->findMethod(loader()->vm()->clinitName, loader()->vm()->clinitSign);
+		J3Method* clinit = staticLayout()->localFindMethod(loader()->vm()->clinitName, loader()->vm()->clinitSign);
 			
 		if(clinit)
 			clinit->invokeStatic();
@@ -787,7 +749,7 @@ J3Field* J3Class::fieldAt(uint16_t idx,
 	if(!type)
 		ctpResolved[ntIdx] = type = loader()->getType(this, nameAt(ctpValues[ntIdx] & 0xffff));
 	
-	res = J3Cst::isStatic(access) ? cl->findStaticField(name, type) : cl->findVirtualField(name, type);
+	res = cl->findField(access, name, type);
 
 	return res;
 }
@@ -886,12 +848,8 @@ J3ObjectHandle* J3ArrayClass::clone(J3Ob
 	return res;
 }
 
-J3Method* J3ArrayClass::findVirtualMethod(const vmkit::Name* name, J3Signature* signature, bool error) {
-	return loader()->vm()->objectClass->findVirtualMethod(name, signature, error);
-}
-
-J3Method* J3ArrayClass::findStaticMethod(const vmkit::Name* name, J3Signature* signature, bool error) {
-	return loader()->vm()->objectClass->findStaticMethod(name, signature, error);
+J3Method* J3ArrayClass::findMethod(uint32_t access, const vmkit::Name* name, J3Signature* signature, bool error) {
+	return loader()->vm()->objectClass->findMethod(access, name, signature, error);
 }
 
 void J3ArrayClass::doResolve(J3Field* hiddenFields, size_t nbHiddenFields) {

Modified: vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3jni.cc?rev=198498&r1=198497&r2=198498&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Sat Jan  4 09:33:07 2014
@@ -113,7 +113,7 @@ jmethodID JNICALL GetMethodID(JNIEnv* en
 	J3ObjectType* cl = J3ObjectType::nativeClass(clazz);
 	cl->initialise();
 	vmkit::Names* n = cl->loader()->vm()->names();
-	res = cl->findVirtualMethod(n->get(name), cl->loader()->getSignature(cl, n->get(sig)));
+	res = cl->findMethod(0, n->get(name), cl->loader()->getSignature(cl, n->get(sig)));
 	leaveJVM(); 
 
 	return res;
@@ -127,7 +127,7 @@ jmethodID JNICALL GetStaticMethodID(JNIE
 	J3ObjectType* cl = J3ObjectType::nativeClass(clazz);
 	cl->initialise();
 	vmkit::Names* n = cl->loader()->vm()->names();
-	res = cl->findStaticMethod(n->get(name), cl->loader()->getSignature(cl, n->get(sig)));
+	res = cl->findMethod(J3Cst::ACC_STATIC, n->get(name), cl->loader()->getSignature(cl, n->get(sig)));
 
 	leaveJVM(); 
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3method.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3method.cc?rev=198498&r1=198497&r2=198498&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Sat Jan  4 09:33:07 2014
@@ -109,7 +109,7 @@ J3Method* J3Method::resolve(J3ObjectHand
 	if(cl()->loader()->vm()->options()->debugLinking)
 		fprintf(stderr, "virtual linking %s::%s\n", cl()->name()->cStr(), name()->cStr());
 	vmkit::Names* n = cl()->loader()->vm()->names();
-	return obj->vt()->type()->asObjectType()->findVirtualMethod(name(), signature());
+	return obj->vt()->type()->asObjectType()->findMethod(0, name(), signature());
 }
 
 J3Value J3Method::internalInvoke(J3ObjectHandle* handle, J3Value* inArgs) {

Modified: vmkit/branches/mcjit/lib/j3/vm/j3object.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3object.cc?rev=198498&r1=198497&r2=198498&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3object.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3object.cc Sat Jan  4 09:33:07 2014
@@ -52,7 +52,7 @@ J3VirtualTable* J3VirtualTable::create(J
 
 	for(uint32_t i=0; i<cl->nbMethods(); i++) {
 		J3Method* meth = cl->methods()[i];
-		J3Method* parent = cl == super ? 0 : super->findVirtualMethod(meth->name(), meth->signature(), 0);
+		J3Method* parent = cl == super ? 0 : super->findMethod(0, meth->name(), meth->signature(), 0);
 		
 		if(parent) {
 			pm[i] = parent;

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=198498&r1=198497&r2=198498&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3trampoline.cc Sat Jan  4 09:33:07 2014
@@ -36,7 +36,7 @@ void* J3Trampoline::virtualTrampoline(J3
 	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->signature());
+	J3Method* impl = cl == target->cl() ? target : cl->findMethod(0, target->name(), target->signature());
 
 	impl->ensureCompiled(0);
 	void* res = impl->fnPtr();





More information about the vmkit-commits mailing list