[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