[vmkit-commits] [vmkit] r198522 - Implements some jni function and fixes a bug in the j3mangler
Gael Thomas
gael.thomas at lip6.fr
Sat Jan 4 15:42:33 PST 2014
Author: gthomas
Date: Sat Jan 4 17:42:33 2014
New Revision: 198522
URL: http://llvm.org/viewvc/llvm-project?rev=198522&view=rev
Log:
Implements some jni function and fixes a bug in the j3mangler
Modified:
vmkit/branches/mcjit/include/j3/j3mangler.h
vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc
Modified: vmkit/branches/mcjit/include/j3/j3mangler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3mangler.h?rev=198522&r1=198521&r2=198522&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3mangler.h (original)
+++ vmkit/branches/mcjit/include/j3/j3mangler.h Sat Jan 4 17:42:33 2014
@@ -22,7 +22,7 @@ namespace j3 {
char* next;
void check(size_t n);
-
+ char hex(uint32_t n);
public:
static const char* j3Id;
static const char* javaId;
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=198522&r1=198521&r2=198522&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Sat Jan 4 17:42:33 2014
@@ -406,7 +406,18 @@ jlong JNICALL GetStaticLongField(JNIEnv*
jfloat JNICALL GetStaticFloatField(JNIEnv* env, jclass clazz, jfieldID fieldID) { enterJVM(); leaveJVM(); NYI(); }
jdouble JNICALL GetStaticDoubleField(JNIEnv* env, jclass clazz, jfieldID fieldID) { enterJVM(); leaveJVM(); NYI(); }
-jstring JNICALL NewString(JNIEnv* env, const jchar* unicode, jsize len) { enterJVM(); leaveJVM(); NYI(); }
+jstring JNICALL NewString(JNIEnv* env, const jchar* unicode, jsize len) {
+ jstring res;
+ enterJVM();
+ J3* vm = J3Thread::get()->vm();
+ J3ObjectHandle* content = J3ObjectHandle::doNewArray(vm->typeChar->getArray(), len);
+ content->setRegionChar(0, unicode, 0, len);
+ res = J3ObjectHandle::doNewObject(vm->stringClass);
+ vm->stringClassInit->invokeSpecial(res, content, 0);
+ leaveJVM();
+ return res;
+}
+
jsize JNICALL GetStringLength(JNIEnv* env, jstring str) {
jsize res;
enterJVM();
@@ -462,7 +473,13 @@ void JNICALL ReleaseStringUTFChars(JNIEn
}
-jsize JNICALL GetArrayLength(JNIEnv* env, jarray array) { enterJVM(); leaveJVM(); NYI(); }
+jsize JNICALL GetArrayLength(JNIEnv* env, jarray array) {
+ jsize res;
+ enterJVM();
+ res = array->arrayLength();
+ leaveJVM();
+ return res;
+}
jobjectArray JNICALL NewObjectArray(JNIEnv* env, jsize len, jclass clazz, jobject init) { enterJVM(); leaveJVM(); NYI(); }
jobject JNICALL GetObjectArrayElement(JNIEnv* env, jobjectArray array, jsize index) { enterJVM(); leaveJVM(); NYI(); }
@@ -514,7 +531,11 @@ jint JNICALL MonitorExit(JNIEnv* env, jo
jint JNICALL GetJavaVM(JNIEnv* env, JavaVM** vm) { enterJVM(); leaveJVM(); NYI(); }
-void JNICALL GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len, jchar* buf) { enterJVM(); leaveJVM(); NYI(); }
+void JNICALL GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len, jchar* buf) {
+ enterJVM();
+ str->getObject(J3Thread::get()->vm()->stringClassValue)->getRegionChar(start, buf, 0, len);
+ leaveJVM();
+}
void JNICALL GetStringUTFRegion(JNIEnv* env, jstring str, jsize start, jsize len, char* buf) {
enterJVM();
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=198522&r1=198521&r2=198522&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3mangler.cc Sat Jan 4 17:42:33 2014
@@ -77,51 +77,58 @@ J3Mangler* J3Mangler::mangle(const vmkit
}
J3Mangler* J3Mangler::mangle(uint16_t c) {
- if(c > 256) {
- check(6);
- *cur++ = '_';
- *cur++ = '0';
- *cur++ = (c >> 24 & 0xf) + '0';
- *cur++ = (c >> 16 & 0xf) + '0';
- *cur++ = (c >> 8 & 0xf) + '0';
- *cur++ = (c >> 0 & 0xf) + '0';
- } else {
-
- switch(c) {
- case '<':
- case '>':
- break; /* do not encode at all */
- case '(':
- case ')':
- J3Thread::get()->vm()->internalError("should not try to encode a special character such as %c", (char)c);
- case '_':
- check(2);
- *cur++ = '_';
- *cur++ = '1';
- break;
- case ';':
- check(2);
- *cur++ = '_';
- *cur++ = '2';
- break;
- case '[':
- check(2);
- *cur++ = '_';
- *cur++ = '3';
- break;
- case '/':
- c = '_';
- default:
+ switch(c) {
+ case '<':
+ case '>':
+ break; /* do not encode at all */
+ case '(':
+ case ')':
+ J3Thread::get()->vm()->internalError("should not try to encode a special character such as %c", (char)c);
+ case '_':
+ check(2);
+ *cur++ = '_';
+ *cur++ = '1';
+ break;
+ case ';':
+ check(2);
+ *cur++ = '_';
+ *cur++ = '2';
+ break;
+ case '[':
+ check(2);
+ *cur++ = '_';
+ *cur++ = '3';
+ break;
+ case '/':
+ c = '_';
+ default:
+ if((c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= '0' && c <= '9') ||
+ (c == '_')) {
check(1);
*cur++ = c;
- }
-
+ } else {
+ check(6);
+ *cur++ = '_';
+ *cur++ = '0';
+ *cur++ = hex(c >> 12);
+ *cur++ = hex(c >> 8);
+ *cur++ = hex(c >> 4);
+ *cur++ = hex(c >> 0);
+ }
}
+
cur = next;
return this;
}
+char J3Mangler::hex(uint32_t n) {
+ n = n & 0xf;
+ return n < 10 ? (n + '0') : (n + 'a' - 10);
+}
+
void J3Mangler::check(size_t n) {
next = cur + n;
if((next+1) >= (buf + max))
More information about the vmkit-commits
mailing list