[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