[vmkit-commits] [vmkit] r199588 - Able to find the main class.
Gael Thomas
gael.thomas at lip6.fr
Sun Jan 19 04:01:26 PST 2014
Author: gthomas
Date: Sun Jan 19 06:01:26 2014
New Revision: 199588
URL: http://llvm.org/viewvc/llvm-project?rev=199588&view=rev
Log:
Able to find the main class.
Modified:
vmkit/branches/mcjit/include/j3/j3.h
vmkit/branches/mcjit/include/j3/j3class.h
vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
vmkit/branches/mcjit/lib/j3/vm/j3.cc
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
Modified: vmkit/branches/mcjit/include/j3/j3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3.h?rev=199588&r1=199587&r2=199588&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3.h (original)
+++ vmkit/branches/mcjit/include/j3/j3.h Sun Jan 19 06:01:26 2014
@@ -72,7 +72,7 @@ namespace j3 {
void* interfaceTrampoline;
- J3Type** arrayInterfaces;
+ J3Class** arrayInterfaces;
uint32_t nbArrayInterfaces;
J3Class* objectClass;
J3ArrayClass* charArrayClass;
@@ -105,6 +105,11 @@ namespace j3 {
J3Field* constructorClassSlot;
J3Method* constructorClassInit;
+ J3Class* methodClass;
+ J3Field* methodClassClass;
+ J3Field* methodClassSlot;
+ J3Method* methodClassInit;
+
J3Field* throwableClassBacktrace;
J3Class* stackTraceElementClass;
Modified: vmkit/branches/mcjit/include/j3/j3class.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3class.h?rev=199588&r1=199587&r2=199588&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3class.h (original)
+++ vmkit/branches/mcjit/include/j3/j3class.h Sun Jan 19 06:01:26 2014
@@ -125,7 +125,6 @@ namespace j3 {
J3InterfaceSlotDescriptor* slotDescriptorAt(uint32_t index) { return &_interfaceSlotDescriptors[index]; }
void prepareInterfaceTable();
-
bool isObjectType() { return 1; }
static J3ObjectType* nativeClass(J3ObjectHandle* handle);
Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=199588&r1=199587&r2=199588&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sun Jan 19 06:01:26 2014
@@ -788,11 +788,37 @@ jstring JNICALL JVM_GetClassName(JNIEnv*
return res;
}
-jobjectArray JNICALL JVM_GetClassInterfaces(JNIEnv* env, jclass cls) { enterJVM(); leaveJVM(); NYI(); }
+jobjectArray JNICALL JVM_GetClassInterfaces(JNIEnv* env, jclass cls) {
+ jobject res;
+ enterJVM();
+ J3* vm = J3Thread::get()->vm();
+ J3ObjectType* type = J3ObjectType::nativeClass(cls);
+ J3Class** interfaces;
+ uint32_t nbInterfaces;
+
+ if(type->isClass()) {
+ J3Class* cl = type->asClass();
+ interfaces = cl->interfaces();
+ nbInterfaces = cl->nbInterfaces();
+ } else {
+ interfaces = vm->arrayInterfaces;
+ nbInterfaces = vm->nbArrayInterfaces;
+ }
+
+ res = J3ObjectHandle::doNewArray(vm->classClass->getArray(), nbInterfaces);
+
+ for(uint32_t i=0; i<nbInterfaces; i++)
+ res->setObjectAt(i, interfaces[i]->javaClass());
+
+ leaveJVM();
+
+ return res;
+}
+
jobject JNICALL JVM_GetClassLoader(JNIEnv* env, jclass cls) {
jobject res;
enterJVM();
- res = J3Class::nativeClass(cls)->loader()->javaClassLoader();
+ res = J3ObjectType::nativeClass(cls)->loader()->javaClassLoader();
leaveJVM();
return res;
}
@@ -876,7 +902,7 @@ jobjectArray JNICALL JVM_GetClassDeclare
if(type->isClass()) {
J3Class* cl = type->asClass();
cl->resolve();
- res = J3ObjectHandle::doNewArray(vm->constructorClass->getArray(),
+ res = J3ObjectHandle::doNewArray(vm->methodClass->getArray(),
publicOnly ?
cl->staticLayout()->nbPublicMethods() + cl->nbPublicMethods() - cl->nbPublicConstructors() :
cl->staticLayout()->nbMethods() + cl->nbMethods() - cl->nbConstructors());
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=199588&r1=199587&r2=199588&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sun Jan 19 06:01:26 2014
@@ -106,7 +106,7 @@ void J3::run() {
nbArrayInterfaces = 2;
- arrayInterfaces = (J3Type**)initialClassLoader->allocator()->allocate(2*sizeof(J3Type*));
+ arrayInterfaces = (J3Class**)initialClassLoader->allocator()->allocate(2*sizeof(J3Type*));
arrayInterfaces[0] = z_class("java.lang.Cloneable");
arrayInterfaces[1] = z_class("java.io.Serializable");
@@ -151,6 +151,12 @@ void J3::run() {
constructorClassInit = z_method(0, constructorClass, initName,
names()->get("(Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B)V"));
+ methodClass = z_class("java.lang.reflect.Method");
+ methodClassClass = z_field(0, methodClass, "clazz", classClass);
+ methodClassSlot = z_field(0, methodClass, "slot", typeInteger);
+ methodClassInit = z_method(0, methodClass, initName,
+ names()->get("(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B[B)V"));
+
throwableClassBacktrace = z_field(0, z_class("java.lang.Throwable"), "backtrace", objectClass);
stackTraceElementClass = z_class("java.lang.StackTraceElement");
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=199588&r1=199587&r2=199588&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Sun Jan 19 06:01:26 2014
@@ -297,8 +297,24 @@ J3ObjectHandle* J3Method::javaMethod() {
vm->nameToString(signature()->name(), 0),
annotations,
paramAnnotations);
- } else
- J3::internalError("implement me: javaMethod");
+ } else {
+ J3ObjectHandle* annotationDefault = cl()->asClass()->extractAttribute(attributes()->lookup(vm->annotationDefaultAttribute));
+
+ _javaMethod = cl()->loader()->globalReferences()->add(J3ObjectHandle::doNewObject(vm->methodClass));
+
+ vm->methodClassInit->invokeSpecial(_javaMethod,
+ cl()->javaClass(0),
+ vm->nameToString(name(), 0),
+ parameters,
+ signature()->javaOut()->javaClass(0),
+ exceptions,
+ access(),
+ slot(),
+ vm->nameToString(signature()->name(), 0),
+ annotations,
+ paramAnnotations,
+ annotationDefault);
+ }
J3Thread::get()->restore(prev);
}
More information about the vmkit-commits
mailing list