[vmkit-commits] [vmkit] r198314 - Rename utf related classes
Gael Thomas
gael.thomas at lip6.fr
Thu Jan 2 08:13:11 PST 2014
Author: gthomas
Date: Thu Jan 2 10:13:10 2014
New Revision: 198314
URL: http://llvm.org/viewvc/llvm-project?rev=198314&view=rev
Log:
Rename utf related classes
Modified:
vmkit/branches/mcjit/include/j3/j3.h
vmkit/branches/mcjit/include/j3/j3class.h
vmkit/branches/mcjit/include/j3/j3method.h
vmkit/branches/mcjit/include/j3/j3signature.h
vmkit/branches/mcjit/include/j3/j3utf16.h
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/j3jni.cc
vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
vmkit/branches/mcjit/lib/j3/vm/j3signature.cc
vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc
Modified: vmkit/branches/mcjit/include/j3/j3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3.h?rev=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3.h (original)
+++ vmkit/branches/mcjit/include/j3/j3.h Thu Jan 2 10:13:10 2014
@@ -89,6 +89,11 @@ namespace j3 {
J3Field* fieldClassAccess;
J3Method* fieldClassInit;
+ J3Class* constructorClass;
+ J3Field* constructorClassClass;
+ J3Field* constructorClassSlot;
+ J3Method* constructorClassInit;
+
llvm::Type* typeJNIEnvPtr;
llvm::Type* typeJ3VirtualTablePtr;
llvm::Type* typeJ3Type;
Modified: vmkit/branches/mcjit/include/j3/j3class.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3class.h?rev=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3class.h (original)
+++ vmkit/branches/mcjit/include/j3/j3class.h Thu Jan 2 10:13:10 2014
@@ -195,6 +195,9 @@ namespace j3 {
uint32_t* ctpValues;
void** ctpResolved;
+ size_t _nbConstructors;
+ size_t _nbPublicConstructors;
+
/* GC Object */
J3ObjectHandle* _staticInstance;
@@ -214,6 +217,9 @@ namespace j3 {
public:
J3Class(J3ClassLoader* loader, const vmkit::Name* name, J3ClassBytes* bytes);
+ size_t nbConstructors() { return _nbConstructors; }
+ size_t nbPublicConstructors() { return _nbPublicConstructors; }
+
J3ObjectHandle* extractAttribute(J3Attribute* attr);
J3StaticLayout* staticLayout() { return &_staticLayout; }
Modified: vmkit/branches/mcjit/include/j3/j3method.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3method.h?rev=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3method.h (original)
+++ vmkit/branches/mcjit/include/j3/j3method.h Thu Jan 2 10:13:10 2014
@@ -63,12 +63,14 @@ namespace j3 {
J3MethodType* _methodType;
J3Attributes* _attributes;
uint32_t _index;
+ uint32_t _slot;
llvm::Function* _llvmFunction;
void* _fnPtr;
char* volatile _llvmAllNames; /* stub + _ + native_name */
void* _nativeFnPtr;
void* volatile _staticTrampoline;
void* volatile _virtualTrampoline;
+ J3ObjectHandle* volatile _javaMethod;
J3Value internalInvoke(bool statically, J3ObjectHandle* handle, va_list va);
J3Value internalInvoke(bool statically, J3ObjectHandle* handle, J3Value* args);
@@ -77,6 +79,10 @@ namespace j3 {
public:
J3Method(uint16_t access, J3Class* cl, const vmkit::Name* name, const vmkit::Name* sign);
+ uint32_t slot() { return _slot; }
+
+ J3ObjectHandle* javaMethod();
+
void* nativeFnPtr() { return _nativeFnPtr; }
void markCompiled(llvm::Function* llvmFunction, void* fnPtr);
Modified: vmkit/branches/mcjit/include/j3/j3signature.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3signature.h?rev=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3signature.h (original)
+++ vmkit/branches/mcjit/include/j3/j3signature.h Thu Jan 2 10:13:10 2014
@@ -17,8 +17,10 @@ namespace j3 {
class J3LLVMSignature : vmkit::PermanentObject {
friend class J3CodeGen;
+ public:
typedef J3Value (*function_t)(void* fn, J3Value* args);
+ private:
llvm::FunctionType* _functionType;
function_t _caller;
Modified: vmkit/branches/mcjit/include/j3/j3utf16.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3utf16.h?rev=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3utf16.h (original)
+++ vmkit/branches/mcjit/include/j3/j3utf16.h Thu Jan 2 10:13:10 2014
@@ -11,20 +11,20 @@ namespace vmkit {
namespace j3 {
class J3ObjectHandle;
- class J3Utf16Converter {
+ class J3Utf16Encoder {
const vmkit::Name* name;
size_t pos;
public:
- J3Utf16Converter(const vmkit::Name* _name);
+ J3Utf16Encoder(const vmkit::Name* _name);
bool isEof();
uint16_t nextUtf16();
};
- class J3CharConverter {
+ class J3Utf16Decoder {
public:
static size_t maxSize(J3ObjectHandle* charArray);
- static size_t convert(J3ObjectHandle* charArray, char* dest);
+ static size_t decode(J3ObjectHandle* charArray, char* dest);
};
}
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=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Thu Jan 2 10:13:10 2014
@@ -468,7 +468,27 @@ jobjectArray JNICALL JVM_GetClassDeclare
return res;
}
-jobjectArray JNICALL JVM_GetClassDeclaredConstructors(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
+jobjectArray JNICALL JVM_GetClassDeclaredConstructors(JNIEnv* env, jclass ofClass, jboolean publicOnly) {
+ jobjectArray res;
+ enterJVM();
+ J3* vm = J3Thread::get()->vm();
+ J3ObjectType* type = J3ObjectType::nativeClass(ofClass);
+ if(type->isClass()) {
+ J3Class* cl = type->asClass();
+ res = J3ObjectHandle::doNewArray(vm->constructorClass->getArray(),
+ publicOnly ? cl->nbPublicConstructors() : cl->nbConstructors());
+
+ for(uint32_t i=0, pos=0; i<cl->nbMethods(); i++) {
+ J3Method* m = cl->methods()[i];
+ if(m->name() == vm->initName && (!publicOnly || J3Cst::isPublic(m->access())))
+ res->setObjectAt(pos++, m->javaMethod());
+ }
+ } else
+ res = J3ObjectHandle::doNewArray(vm->constructorClass->getArray(), 0);
+
+ leaveJVM();
+ return res;
+}
/* Differs from JVM_GetClassModifiers in treatment of inner classes.
This returns the access flags for the class as specified in the
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=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Thu Jan 2 10:13:10 2014
@@ -127,16 +127,17 @@ void J3::run() {
->findVirtualField(names()->get("eetop"), typeLong);
fieldClass = z_class("java/lang/reflect/Field");
- fieldClassInit = z_method(0, fieldClass, initName,
- names()->get("(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)V"));
fieldClassClass = z_field(0, fieldClass, "clazz", classClass);
fieldClassSlot = z_field(0, fieldClass, "slot", typeInteger);
fieldClassAccess = z_field(0, fieldClass, "modifiers", typeInteger);
+ fieldClassInit = z_method(0, fieldClass, initName,
+ names()->get("(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)V"));
-#if 0
- J3Field* fieldClassSlot;
- J3Method* fieldClassInit;
-#endif
+ constructorClass = z_class("java/lang/reflect/Constructor");
+ constructorClassClass = z_field(0, constructorClass, "clazz", classClass);
+ constructorClassSlot = z_field(0, constructorClass, "slot", typeInteger);
+ constructorClassInit = z_method(0, constructorClass, initName,
+ names()->get("(Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B)V"));
J3Lib::bootstrap(this);
}
@@ -168,10 +169,10 @@ J3ObjectHandle* J3::nameToString(const v
J3ObjectHandle* prev = J3Thread::get()->tell();
uint16_t buf[name->length()];
size_t pos = 0;
- J3Utf16Converter converter(name);
+ J3Utf16Encoder encoder(name);
- while(!converter.isEof())
- buf[pos++] = converter.nextUtf16();
+ while(!encoder.isEof())
+ buf[pos++] = encoder.nextUtf16();
res = initialClassLoader->globalReferences()->add(J3ObjectHandle::doNewArray(charArrayClass, pos));
res->setRegionChar(0, buf, 0, pos);
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=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Thu Jan 2 10:13:10 2014
@@ -617,8 +617,9 @@ void J3Class::readClassBytes(J3Field* hi
if(J3Cst::isStatic(access)) {
nbStaticMethods++;
method->setResolved(0);
- } else
+ } else {
nbVirtualMethods++;
+ }
}
staticLayout()->_methods = (J3Method**)loader()->allocator()->allocate(sizeof(J3Method*)*nbStaticMethods);
@@ -628,9 +629,18 @@ void J3Class::readClassBytes(J3Field* hi
J3Layout* layout;
if(J3Cst::isStatic(methodsTmp[i]->access()))
layout = staticLayout();
- else
+ else {
layout = this;
+ if(methodsTmp[i]->name() == loader()->vm()->initName) {
+ _nbConstructors++;
+ if(J3Cst::isPublic(methodsTmp[i]->access()))
+ _nbPublicConstructors++;
+ }
+ }
+
+ methodsTmp[i]->_slot = layout->_nbMethods;
layout->_methods[layout->_nbMethods++] = methodsTmp[i];
+
if(J3Cst::isPublic(methodsTmp[i]->access()))
layout->_nbPublicMethods++;
}
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=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Thu Jan 2 10:13:10 2014
@@ -383,8 +383,8 @@ jsize JNICALL GetStringUTFLength(JNIEnv*
jsize res;
enterJVM();
jobject content = str->getObject(J3Thread::get()->vm()->stringClassValue);
- char buf[J3CharConverter::maxSize(content)];
- res = J3CharConverter::convert(content, buf);
+ char buf[J3Utf16Decoder::maxSize(content)];
+ res = J3Utf16Decoder::decode(content, buf);
leaveJVM();
return res;
}
@@ -395,8 +395,8 @@ const char* JNICALL GetStringUTFChars(JN
enterJVM();
J3* vm = J3Thread::get()->vm();
jobject content = str->getObject(vm->stringClassValue);
- res = new char[J3CharConverter::maxSize(content)];
- J3CharConverter::convert(content, res);
+ res = new char[J3Utf16Decoder::maxSize(content)];
+ J3Utf16Decoder::decode(content, res);
if(isCopy)
*isCopy = 1;
@@ -471,7 +471,7 @@ void JNICALL GetStringUTFRegion(JNIEnv*
enterJVM();
J3* vm = J3Thread::get()->vm();
jobject content = str->getObject(vm->stringClassValue);
- J3CharConverter::convert(content, buf);
+ J3Utf16Decoder::decode(content, buf);
leaveJVM();
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc?rev=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc Thu Jan 2 10:13:10 2014
@@ -65,11 +65,11 @@ J3Mangler* J3Mangler::mangle(const char*
}
J3Mangler* J3Mangler::mangle(const vmkit::Name* name) {
- J3Utf16Converter converter(name);
+ J3Utf16Encoder encoder(name);
next = cur;
- while(!converter.isEof()) {
- uint16_t c = converter.nextUtf16();
+ while(!encoder.isEof()) {
+ uint16_t c = encoder.nextUtf16();
if(c > 256) {
check(6);
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=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Thu Jan 2 10:13:10 2014
@@ -118,11 +118,14 @@ J3Value J3Method::internalInvoke(bool st
void* fn = fnPtr(1);
//fprintf(stderr, "Internal invoke %s::%s%s\n", target->cl()->name()->cStr(), target->name()->cStr(), target->sign()->cStr());
-
- if(!methodType()->llvmSignature()->caller())
+
+ J3LLVMSignature::function_t caller = methodType()->llvmSignature()->caller();
+ if(!caller) {
J3CodeGen::translate(this, 0, 1);
+ caller = methodType()->llvmSignature()->caller();
+ }
- J3Value res = methodType()->llvmSignature()->caller()(fn, inArgs);
+ J3Value res = caller(fn, inArgs);
return res;
}
@@ -280,3 +283,38 @@ void J3Method::registerNative(void* fnPt
J3::noSuchMethodError("unable to dynamically modify a native function", cl(), name(), sign());
_nativeFnPtr = fnPtr;
}
+
+J3ObjectHandle* J3Method::javaMethod() {
+ if(!_javaMethod) {
+ cl()->lock();
+ if(!_javaMethod) {
+ J3ObjectHandle* prev = J3Thread::get()->tell();
+ J3* vm = cl()->loader()->vm();
+
+ if(name() == cl()->loader()->vm()->initName) {
+ fprintf(stderr, " slot: %d\n", slot());
+ _javaMethod = cl()->loader()->globalReferences()->add(J3ObjectHandle::doNewObject(vm->constructorClass));
+
+ vm->constructorClassInit->invokeSpecial(_javaMethod,
+ cl()->javaClass(),
+ 0, // Class<?>[] parameterTypes,
+ 0, // Class<?>[] checkedExceptions,
+ access(),
+ slot(),
+ vm->nameToString(sign()),
+ 0, //byte[] annotations,
+ 0); //byte[] parameterAnnotations)
+
+ J3::internalError("implement me: java constructor");
+ } else
+ J3::internalError("implement me: javaMethod");
+
+ J3Thread::get()->restore(prev);
+ }
+ cl()->unlock();
+ }
+
+ return _javaMethod;
+}
+
+
Modified: vmkit/branches/mcjit/lib/j3/vm/j3signature.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3signature.cc?rev=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3signature.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3signature.cc Thu Jan 2 10:13:10 2014
@@ -85,5 +85,5 @@ void J3LLVMSignature::generateCallerIR(J
builder.CreateRet(res);
- // caller->dump();
+ caller->dump();
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc?rev=198314&r1=198313&r2=198314&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3utf16.cc Thu Jan 2 10:13:10 2014
@@ -5,16 +5,16 @@
using namespace j3;
-J3Utf16Converter::J3Utf16Converter(const vmkit::Name* _name) {
+J3Utf16Encoder::J3Utf16Encoder(const vmkit::Name* _name) {
name = _name;
pos = 0;
}
-bool J3Utf16Converter::isEof() {
+bool J3Utf16Encoder::isEof() {
return pos == name->length();
}
-uint16_t J3Utf16Converter::nextUtf16() {
+uint16_t J3Utf16Encoder::nextUtf16() {
const char* str = name->cStr();
size_t n = 0;
size_t i = 0;
@@ -36,7 +36,7 @@ uint16_t J3Utf16Converter::nextUtf16() {
return x;
}
-size_t J3CharConverter::convert(J3ObjectHandle* charArray, char* dest) {
+size_t J3Utf16Decoder::decode(J3ObjectHandle* charArray, char* dest) {
size_t length = charArray->arrayLength();
size_t pos = 0;
@@ -54,7 +54,7 @@ size_t J3CharConverter::convert(J3Object
return pos;
}
-size_t J3CharConverter::maxSize(J3ObjectHandle* charArray) {
+size_t J3Utf16Decoder::maxSize(J3ObjectHandle* charArray) {
return 1 + charArray->arrayLength() * 3;
}
More information about the vmkit-commits
mailing list