[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