[vmkit-commits] [vmkit] r198511 - add a flag to specify whether we need a local or a global reference in javaClass, *ToString and stringAt functions.

Gael Thomas gael.thomas at lip6.fr
Sat Jan 4 13:50:34 PST 2014


Author: gthomas
Date: Sat Jan  4 15:50:33 2014
New Revision: 198511

URL: http://llvm.org/viewvc/llvm-project?rev=198511&view=rev
Log:
add a flag to specify whether we need  a local or a global reference in javaClass, *ToString and stringAt functions.

Modified:
    vmkit/branches/mcjit/include/j3/j3.h
    vmkit/branches/mcjit/include/j3/j3class.h
    vmkit/branches/mcjit/include/j3/j3codegen.h
    vmkit/branches/mcjit/include/j3/j3meta.def
    vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3class.cc
    vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
    vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
    vmkit/branches/mcjit/lib/j3/vm/j3field.cc
    vmkit/branches/mcjit/lib/j3/vm/j3jni.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=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3.h (original)
+++ vmkit/branches/mcjit/include/j3/j3.h Sat Jan  4 15:50:33 2014
@@ -123,9 +123,9 @@ namespace j3 {
 
 		J3Options*                 options() { return &_options; }
 		vmkit::Names*              names() { return &_names; }
-		J3ObjectHandle*            utfToString(const char* name);
-		J3ObjectHandle*            nameToString(const vmkit::Name* name);
-		J3ObjectHandle*            arrayToString(J3ObjectHandle* array);
+		J3ObjectHandle*            utfToString(const char* name, bool doPush);
+		J3ObjectHandle*            nameToString(const vmkit::Name* name, bool doPush);
+		J3ObjectHandle*            arrayToString(J3ObjectHandle* array, bool doPush);
 
 		void                       run();
 		void                       start(int argc, char** argv);

Modified: vmkit/branches/mcjit/include/j3/j3class.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3class.h?rev=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3class.h (original)
+++ vmkit/branches/mcjit/include/j3/j3class.h Sat Jan  4 15:50:33 2014
@@ -63,7 +63,7 @@ namespace j3 {
 	public:
 		J3Type(J3ClassLoader* loader, const vmkit::Name* name);
 
-		J3ObjectHandle*             javaClass();
+		J3ObjectHandle*             javaClass(bool doPush);
 
 		virtual uint32_t            logSize() = 0;
 		uint64_t                    getSizeInBits();
@@ -249,7 +249,7 @@ namespace j3 {
 		double              doubleAt(uint16_t idx);
 		uint32_t            integerAt(uint16_t idx);
 		uint64_t            longAt(uint16_t idx);
-		J3ObjectHandle*     stringAt(uint16_t idx);
+		J3ObjectHandle*     stringAt(uint16_t idx, bool doPush);
 		J3ObjectType*       classAt(uint16_t idx);
 		J3Method*           interfaceMethodAt(uint16_t idx, uint16_t access);
 		J3Method*           methodAt(uint16_t idx, uint16_t access);

Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Sat Jan  4 15:50:33 2014
@@ -100,7 +100,7 @@ namespace j3 {
 		llvm::Value*        unflatten(llvm::Value* v, llvm::Type* type);
 
 		llvm::Value*        handleToObject(llvm::Value* obj);
-		llvm::Value*        javaClass(J3ObjectType* type);
+		llvm::Value*        javaClass(J3ObjectType* type, bool doPush);
 		llvm::Value*        staticInstance(J3Class* cl);
 		llvm::Value*        vt(J3ObjectType* cl, bool resolve=0);
 		llvm::Value*        vt(llvm::Value* obj);

Modified: vmkit/branches/mcjit/include/j3/j3meta.def
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3meta.def?rev=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3meta.def (original)
+++ vmkit/branches/mcjit/include/j3/j3meta.def Sat Jan  4 15:50:33 2014
@@ -4,8 +4,8 @@ _x(funcJ3TypeVTAndResolve,       "j3::J3
 _x(funcJ3TypeInitialise,         "j3::J3Type::initialise()")
 _x(funcJ3LayoutStructSize,       "j3::J3Layout::structSize()")
 _x(funcJ3ClassStaticInstance,    "j3::J3Class::staticInstance()")
-_x(funcJ3ClassStringAt,          "j3::J3Class::stringAt(unsigned short)")
-_x(funcJ3TypeJavaClass,          "j3::J3Type::javaClass()")
+_x(funcJ3ClassStringAt,          "j3::J3Class::stringAt(unsigned short, bool)")
+_x(funcJ3TypeJavaClass,          "j3::J3Type::javaClass(bool)")
 _x(funcJniEnv,                   "j3::J3::jniEnv()")
 _x(funcJ3ObjectAllocate,         "j3::J3Object::allocate(j3::J3VirtualTable*, unsigned long)")
 _x(funcJ3ObjectMonitorEnter,     "j3::J3Object::monitorEnter(j3::J3Object*)")

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=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc Sat Jan  4 15:50:33 2014
@@ -33,7 +33,7 @@ void J3Lib::bootstrap(J3* vm) {
 
 	J3Method* appThreadGroupInit = threadGroupClass->findMethod(0, vm->initName, z_signature("(Ljava/lang/ThreadGroup;Ljava/lang/String;)V"));
 	J3ObjectHandle* appThreadGroup = J3ObjectHandle::doNewObject(threadGroupClass);
-	appThreadGroupInit->invokeSpecial(appThreadGroup, sysThreadGroup, vm->utfToString("main"));
+	appThreadGroupInit->invokeSpecial(appThreadGroup, sysThreadGroup, vm->utfToString("main", 0));
 
 	J3Method* threadInit = vm->threadClass->findMethod(0, vm->initName, z_signature("(Ljava/lang/ThreadGroup;Ljava/lang/String;)V"));
 	J3ObjectHandle* mainThread = J3ObjectHandle::doNewObject(vm->threadClass);
@@ -41,7 +41,7 @@ void J3Lib::bootstrap(J3* vm) {
 	J3Thread::get()->assocJavaThread(mainThread);
 	mainThread->setInteger(vm->threadClass->findField(0, vm->names()->get("priority"), vm->typeInteger), 5);
 
-	threadInit->invokeSpecial(mainThread, appThreadGroup, vm->utfToString("main"));
+	threadInit->invokeSpecial(mainThread, appThreadGroup, vm->utfToString("main", 0));
 						
 	vm->initialClassLoader
 		->loadClass(vm->names()->get("java/lang/System"))

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=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sat Jan  4 15:50:33 2014
@@ -6,6 +6,7 @@
 #include "j3/j3method.h"
 #include "j3/j3constants.h"
 #include "j3/j3field.h"
+#include "j3/j3utf16.h"
 #include "jvm.h"
 
 using namespace j3;
@@ -61,15 +62,11 @@ jstring JNICALL JVM_InternString(JNIEnv*
 	J3* vm = J3Thread::get()->vm();
 
 	J3ObjectHandle* value = str->getObject(vm->stringClassValue);
-	uint32_t length = value->arrayLength();
-	char copy[length+1];
+	char copy[J3Utf16Decoder::maxSize(value)];
+	
+	J3Utf16Decoder::decode(value, copy);
 
-	for(uint32_t i=0; i<length; i++)
-		copy[i] = value->getCharAt(i);
-
-	copy[length] = 0;
-
-	res = vm->nameToString(vm->names()->get(copy));
+	res = vm->utfToString(copy, 1);
 
 	leaveJVM(); 
 	return res;
@@ -403,7 +400,7 @@ jclass JNICALL JVM_GetCallerClass(JNIEnv
 	if(!caller)
 		J3::internalError("unable to find caller class, what should I do?");
 
-	res = caller->cl()->javaClass();
+	res = caller->cl()->javaClass(1);
 
 	leaveJVM(); 
 
@@ -416,36 +413,39 @@ jclass JNICALL JVM_GetCallerClass(JNIEnv
  * utf: class name
  */
 jclass JNICALL JVM_FindPrimitiveClass(JNIEnv* env, const char *utf) { 
+	jclass res;
+
 	enterJVM(); 
 	J3* vm = J3Thread::get()->vm();
 
 	J3ClassLoader* loader = vm->initialClassLoader;
 	vmkit::Names* names = vm->names();
-	J3Class* res;
+	J3Class* cl;
 
   if(!strcmp(utf, "boolean"))
-		res = loader->loadClass(names->get("java/lang/Boolean"));
+		cl = loader->loadClass(names->get("java/lang/Boolean"));
 	else if(!strcmp(utf, "byte"))
-		res = loader->loadClass(names->get("java/lang/Byte"));
+		cl = loader->loadClass(names->get("java/lang/Byte"));
 	else if(!strcmp(utf, "char"))
-		res = loader->loadClass(names->get("java/lang/Character"));
+		cl = loader->loadClass(names->get("java/lang/Character"));
 	else if(!strcmp(utf, "short"))
-		res = loader->loadClass(names->get("java/lang/Short"));
+		cl = loader->loadClass(names->get("java/lang/Short"));
 	else if(!strcmp(utf, "int"))
-		res = loader->loadClass(names->get("java/lang/Integer"));
+		cl = loader->loadClass(names->get("java/lang/Integer"));
 	else if(!strcmp(utf, "long"))
-		res = loader->loadClass(names->get("java/lang/Long"));
+		cl = loader->loadClass(names->get("java/lang/Long"));
 	else if(!strcmp(utf, "float"))
-		res = loader->loadClass(names->get("java/lang/Float"));
+		cl = loader->loadClass(names->get("java/lang/Float"));
 	else if(!strcmp(utf, "double"))
-		res = loader->loadClass(names->get("java/lang/Double"));
+		cl = loader->loadClass(names->get("java/lang/Double"));
 	else if(!strcmp(utf, "void"))
-		res = loader->loadClass(names->get("java/lang/Void"));
+		cl = loader->loadClass(names->get("java/lang/Void"));
 	else
 		J3::internalError("unsupported primitive: %s", utf);
 
+	res = cl->javaClass(1);
 	leaveJVM(); 
-	return res->javaClass();
+	return res;
 }
 
 /*
@@ -484,7 +484,7 @@ jclass JNICALL JVM_FindClassFromClassLoa
 	else
 		cl->resolve();
 
-	res = cl->javaClass();
+	res = cl->javaClass(1);
 
 	leaveJVM(); 
 	return res;
@@ -513,7 +513,7 @@ jclass JNICALL JVM_DefineClassWithSource
 jstring JNICALL JVM_GetClassName(JNIEnv* env, jclass cls) { 
 	jstring res;
 	enterJVM(); 
-	res = J3Thread::get()->vm()->nameToString(J3ObjectType::nativeClass(cls)->name());
+	res = J3Thread::get()->vm()->nameToString(J3ObjectType::nativeClass(cls)->name(), 1);
 	leaveJVM(); 
 	return res;
 }

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=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sat Jan  4 15:50:33 2014
@@ -146,7 +146,7 @@ JNIEnv* J3::jniEnv() {
 	return J3Thread::get()->jniEnv();
 }
 
-J3ObjectHandle* J3::arrayToString(J3ObjectHandle* array) {
+J3ObjectHandle* J3::arrayToString(J3ObjectHandle* array, bool doPush) {
 	pthread_mutex_lock(&stringsMutex);
 	J3ObjectHandle* res = charArrayToStrings[array];
 	if(!res) {
@@ -159,10 +159,10 @@ J3ObjectHandle* J3::arrayToString(J3Obje
 		charArrayToStrings[array] = res;
 	}
 	pthread_mutex_unlock(&stringsMutex);
-	return res;
+	return doPush ? J3Thread::get()->push(res) : res;
 }
 
-J3ObjectHandle* J3::nameToString(const vmkit::Name* name) {
+J3ObjectHandle* J3::nameToString(const vmkit::Name* name, bool doPush) {
 	pthread_mutex_lock(&stringsMutex);
 	J3ObjectHandle* res = nameToCharArrays[name];
 	if(!res) {
@@ -181,11 +181,11 @@ J3ObjectHandle* J3::nameToString(const v
 		nameToCharArrays[name] = res;
 	}
 	pthread_mutex_unlock(&stringsMutex);
-	return arrayToString(res);
+	return arrayToString(res, doPush);
 }
 
-J3ObjectHandle* J3::utfToString(const char* name) {
-	return nameToString(names()->get(name));
+J3ObjectHandle* J3::utfToString(const char* name, bool doPush) {
+	return nameToString(names()->get(name), doPush);
 }
 
 void J3::classCastException() {

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=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Sat Jan  4 15:50:33 2014
@@ -49,19 +49,19 @@ void J3Type::dump() {
 	fprintf(stderr, "Type: %s", name()->cStr());
 }
 
-J3ObjectHandle* J3Type::javaClass() {
+J3ObjectHandle* J3Type::javaClass(bool doPush) {
 	if(!_javaClass) {
 		lock();
 		if(!_javaClass) {
 			J3ObjectHandle* prev = J3Thread::get()->tell();
 			_javaClass = loader()->globalReferences()->add(J3ObjectHandle::doNewObject(loader()->vm()->classClass));
 			J3Thread::get()->restore(prev);
-			javaClass()->setLong(loader()->vm()->classClassVMData, (int64_t)(uintptr_t)this);
-			loader()->vm()->classClassInit->invokeSpecial(javaClass());
+			_javaClass->setLong(loader()->vm()->classClassVMData, (int64_t)(uintptr_t)this);
+			loader()->vm()->classClassInit->invokeSpecial(_javaClass);
 		}
 		unlock();
 	}
-	return _javaClass;
+	return doPush ? J3Thread::get()->push(_javaClass) : _javaClass;
 }
 
 void J3Type::doNativeName() {
@@ -436,7 +436,7 @@ void J3Class::doInitialise() {
 					case J3Cst::CONSTANT_Float:   staticInstance()->setFloat(cur, floatAt(idx)); break;
 					case J3Cst::CONSTANT_Double:  staticInstance()->setDouble(cur, doubleAt(idx)); break;
 					case J3Cst::CONSTANT_Integer: staticInstance()->setInteger(cur, integerAt(idx)); break;
-					case J3Cst::CONSTANT_String:  staticInstance()->setObject(cur, stringAt(idx)); break;
+					case J3Cst::CONSTANT_String:  staticInstance()->setObject(cur, stringAt(idx, 0)); break;
 					default:
 						J3::classFormatError(this, "invalid ctp entry ConstantAttribute with type %d", getCtpType(idx));
 				}
@@ -688,11 +688,11 @@ void* J3Class::getCtpResolved(uint16_t i
 	return ctpResolved[idx];
 }
 
-J3ObjectHandle* J3Class::stringAt(uint16_t idx) {
+J3ObjectHandle* J3Class::stringAt(uint16_t idx, bool doPush) {
 	check(idx, J3Cst::CONSTANT_String);
 	J3ObjectHandle* res = (J3ObjectHandle*)ctpResolved[idx];
 	if(!res) {
-		ctpResolved[idx] = res = loader()->vm()->nameToString(nameAt(ctpValues[idx]));
+		ctpResolved[idx] = res = loader()->vm()->nameToString(nameAt(ctpValues[idx]), 0);
 	}
 	return (J3ObjectHandle*)res;
 }

Modified: vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc?rev=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc Sat Jan  4 15:50:33 2014
@@ -28,12 +28,12 @@ J3ClassLoader::J3ClassLoader(J3* v, J3Ob
 		interfaces(j3InterfaceMethodLess, allocator),
 		methodTypes(vmkit::Name::less, allocator),
 		nativeLibraries(allocator) {
-	_javaClassLoader = javaClassLoader;
-
 	pthread_mutex_init(&_mutexClasses, 0);
 	pthread_mutex_init(&_mutexTypes, 0);
 	pthread_mutex_init(&_mutexInterfaces, 0);
 	pthread_mutex_init(&_mutexMethodTypes, 0);
+
+	_javaClassLoader = globalReferences()->add(javaClassLoader);
 }
 
 uint32_t J3ClassLoader::interfaceIndex(J3Method* method) {

Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Sat Jan  4 15:50:33 2014
@@ -324,8 +324,8 @@ void J3CodeGen::initialiseJ3ObjectType(J
 		builder->CreateCall(funcJ3TypeInitialise, typeDescriptor(cl, vm->typeJ3TypePtr));
 }
 
-llvm::Value* J3CodeGen::javaClass(J3ObjectType* type) {
-	return builder->CreateCall(funcJ3TypeJavaClass, typeDescriptor(type, vm->typeJ3TypePtr));
+llvm::Value* J3CodeGen::javaClass(J3ObjectType* type, bool doPush) {
+	return builder->CreateCall2(funcJ3TypeJavaClass, typeDescriptor(type, vm->typeJ3TypePtr), builder->getInt1(doPush));
 }
 
 llvm::Value* J3CodeGen::handleToObject(llvm::Value* obj) {
@@ -684,11 +684,12 @@ void J3CodeGen::ldc(uint32_t idx) {
 		case J3Cst::CONSTANT_Integer: res = builder->getInt32(cl->integerAt(idx)); break;
 		case J3Cst::CONSTANT_Float:   res = llvm::ConstantFP::get(builder->getFloatTy(), cl->floatAt(idx)); break;
 		case J3Cst::CONSTANT_Double:  res = llvm::ConstantFP::get(builder->getDoubleTy(), cl->doubleAt(idx)); break;
-		case J3Cst::CONSTANT_Class:   res = handleToObject(javaClass(cl->classAt(idx))); break;
+		case J3Cst::CONSTANT_Class:   res = handleToObject(javaClass(cl->classAt(idx), 0)); break;
 		case J3Cst::CONSTANT_String:  
-			res = handleToObject(builder->CreateCall2(funcJ3ClassStringAt, 
+			res = handleToObject(builder->CreateCall3(funcJ3ClassStringAt, 
 																								typeDescriptor(cl, vm->typeJ3ClassPtr),
-																								builder->getInt16(idx)));
+																								builder->getInt16(idx),
+																								builder->getInt1(0)));
 			break;
 		default:
 			J3::classFormatError(cl, "wrong ldc type: %d\n", cl->getCtpType(idx));
@@ -1747,7 +1748,7 @@ void J3CodeGen::generateNative() {
 
 	args.push_back(builder->CreateCall(funcJniEnv));
 	if(J3Cst::isStatic(method->access()))
-		args.push_back(builder->CreateCall2(funcJ3ThreadPushHandle, thread, javaClass(cl)));
+		args.push_back(javaClass(cl, 1));
 
 	uint32_t selfDone = 0;
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3field.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3field.cc?rev=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3field.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3field.cc Sat Jan  4 15:50:33 2014
@@ -18,13 +18,13 @@ J3ObjectHandle* J3Field::javaField() {
 
 			J3* vm = layout()->loader()->vm();
 
-			vm->fieldClassInit->invokeSpecial(_javaField,                       /* this */
-																				layout()->javaClass(),            /* declaring class */
-																				vm->nameToString(name()),         /* name */
-																				type()->javaClass(),              /* type */
-																				access(),                         /* access */
-																				slot(),                           /* slot */
-																				vm->nameToString(type()->name()), /* signature */
+			vm->fieldClassInit->invokeSpecial(_javaField,                          /* this */
+																				layout()->javaClass(0),              /* declaring class */
+																				vm->nameToString(name(), 0),         /* name */
+																				type()->javaClass(0),                /* type */
+																				access(),                            /* access */
+																				slot(),                              /* slot */
+																				vm->nameToString(type()->name(), 0), /* signature */
 																				layout()->extractAttribute(attributes()->lookup(vm->annotationsAttribute)));/* annotations */
 
 			J3Thread::get()->restore(prev);

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=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Sat Jan  4 15:50:33 2014
@@ -26,7 +26,7 @@ jclass JNICALL FindClass(JNIEnv* env, co
 	J3ClassLoader* loader = m ? m->cl()->loader() : J3Thread::get()->vm()->initialClassLoader;
 	J3Class* cl = loader->loadClass(loader->vm()->names()->get(name));
 	cl->initialise();
-	res = cl->javaClass();
+	res = cl->javaClass(1);
 	leaveJVM(); 
 
 	return res;
@@ -41,7 +41,7 @@ jclass JNICALL GetSuperclass(JNIEnv* env
 	jclass res;
 	enterJVM();
 	J3ObjectType* cl = J3ObjectType::nativeClass(sub);
-	res = J3Thread::get()->vm()->objectClass ? 0 : cl->javaClass();
+	res = J3Thread::get()->vm()->objectClass ? 0 : cl->javaClass(1);
 	leaveJVM(); 
 	return res;
 }
@@ -131,7 +131,7 @@ jclass JNICALL GetObjectClass(JNIEnv* en
 	jclass res;
 
 	enterJVM(); 
-	res = obj->vt()->type()->asObjectType()->javaClass();
+	res = obj->vt()->type()->asObjectType()->javaClass(1);
 	leaveJVM(); 
 
 	return res;
@@ -146,7 +146,7 @@ jmethodID JNICALL GetMethodID(JNIEnv* en
 	J3ObjectType* cl = J3ObjectType::nativeClass(clazz);
 	cl->initialise();
 	vmkit::Names* n = cl->loader()->vm()->names();
-	res = cl->findMethod(0, n->get(name), cl->loader()->getSignature(cl, n->get(sig)));
+	res = cl->findMethod(0, n->get(name), cl->loader()->getSignature(cl, n->get(sig)), 0);
 	leaveJVM(); 
 
 	return res;
@@ -160,7 +160,7 @@ jmethodID JNICALL GetStaticMethodID(JNIE
 	J3ObjectType* cl = J3ObjectType::nativeClass(clazz);
 	cl->initialise();
 	vmkit::Names* n = cl->loader()->vm()->names();
-	res = cl->findMethod(J3Cst::ACC_STATIC, 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)), 0);
 
 	leaveJVM(); 
 
@@ -347,7 +347,15 @@ void JNICALL CallStaticVoidMethodA(JNIEn
 	leaveJVM(); 
 }
 
-jfieldID JNICALL GetFieldID(JNIEnv* env, jclass clazz, const char* name, const char* sig) { enterJVM(); leaveJVM(); NYI(); }
+jfieldID JNICALL GetFieldID(JNIEnv* env, jclass clazz, const char* name, const char* sig) { 
+	jfieldID res;
+	enterJVM(); 
+	J3* vm = J3Thread::get()->vm();
+	J3Class* cl = J3ObjectType::nativeClass(clazz)->asClass();
+	res = cl->findField(0, vm->names()->get(name), cl->loader()->getType(cl, vm->names()->get(sig)), 0);
+	leaveJVM(); 
+	return res;
+}
 
 jobject JNICALL GetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID) { enterJVM(); leaveJVM(); NYI(); }
 jboolean JNICALL GetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID) { enterJVM(); leaveJVM(); NYI(); }
@@ -369,7 +377,16 @@ void JNICALL SetLongField(JNIEnv* env, j
 void JNICALL SetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID, jfloat val) { enterJVM(); leaveJVM(); NYI(); }
 void JNICALL SetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID, jdouble val) { enterJVM(); leaveJVM(); NYI(); }
 
-jfieldID JNICALL GetStaticFieldID(JNIEnv* env, jclass clazz, const char* name, const char* sig) { enterJVM(); leaveJVM(); NYI(); }
+jfieldID JNICALL GetStaticFieldID(JNIEnv* env, jclass clazz, const char* name, const char* sig) { 
+	jfieldID res;
+	enterJVM(); 
+	J3* vm = J3Thread::get()->vm();
+	J3Class* cl = J3ObjectType::nativeClass(clazz)->asClass();
+	res = cl->findField(J3Cst::ACC_STATIC, vm->names()->get(name), cl->loader()->getType(cl, vm->names()->get(sig)), 0);
+	leaveJVM(); 
+	return res;
+}
+
 jobject JNICALL GetStaticObjectField(JNIEnv* env, jclass clazz, jfieldID fieldID) { enterJVM(); leaveJVM(); NYI(); }
 jboolean JNICALL GetStaticBooleanField(JNIEnv* env, jclass clazz, jfieldID fieldID) { enterJVM(); leaveJVM(); NYI(); }
 jbyte JNICALL GetStaticByteField(JNIEnv* env, jclass clazz, jfieldID fieldID) { enterJVM(); leaveJVM(); NYI(); }
@@ -406,7 +423,7 @@ jstring JNICALL NewStringUTF(JNIEnv* env
 	jstring res;
 
 	enterJVM(); 
-	res = J3Thread::get()->push(J3Thread::get()->vm()->utfToString(utf)); /* harakiri want to kill me */
+	res = J3Thread::get()->vm()->utfToString(utf, 1);
 	leaveJVM(); 
 
 	return res;

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=198511&r1=198510&r2=198511&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Sat Jan  4 15:50:33 2014
@@ -272,7 +272,7 @@ J3ObjectHandle* J3Method::javaMethod() {
 			J3ObjectHandle* parameters = J3ObjectHandle::doNewArray(vm->classClass->getArray(), nbIns);
 
 			for(uint32_t i=0; i<nbIns; i++)
-				parameters->setObjectAt(i, signature()->javaIns(i)->javaClass());
+				parameters->setObjectAt(i, signature()->javaIns(i)->javaClass(0));
 
 			J3Attribute* exceptionAttribute = attributes()->lookup(vm->exceptionsAttribute);
 			J3ObjectHandle* exceptions;
@@ -289,12 +289,12 @@ J3ObjectHandle* J3Method::javaMethod() {
 				_javaMethod = cl()->loader()->globalReferences()->add(J3ObjectHandle::doNewObject(vm->constructorClass));
 
 				vm->constructorClassInit->invokeSpecial(_javaMethod,
-																								cl()->javaClass(),
+																								cl()->javaClass(0),
 																								parameters,
 																								exceptions,
 																								access(),
 																								slot(),
-																								vm->nameToString(signature()->name()),
+																								vm->nameToString(signature()->name(), 0),
 																								annotations,
 																								paramAnnotations);
 			} else 





More information about the vmkit-commits mailing list