diff options
author | Jeff Hao <jeffhao@google.com> | 2014-01-15 13:49:50 -0800 |
---|---|---|
committer | Jeff Hao <jeffhao@google.com> | 2015-04-27 18:54:52 -0700 |
commit | 848f70a3d73833fc1bf3032a9ff6812e429661d9 (patch) | |
tree | b0349b3a40aab5a915af491b100659a5ca9fbbf6 /test/004-JniTest | |
parent | d14438f0c5071962be7fab572b54687d32d9d087 (diff) | |
download | art-848f70a3d73833fc1bf3032a9ff6812e429661d9.tar.gz art-848f70a3d73833fc1bf3032a9ff6812e429661d9.tar.bz2 art-848f70a3d73833fc1bf3032a9ff6812e429661d9.zip |
Replace String CharArray with internal uint16_t array.
Summary of high level changes:
- Adds compiler inliner support to identify string init methods
- Adds compiler support (quick & optimizing) with new invoke code path
that calls method off the thread pointer
- Adds thread entrypoints for all string init methods
- Adds map to verifier to log when receiver of string init has been
copied to other registers. used by compiler and interpreter
Change-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01
Diffstat (limited to 'test/004-JniTest')
-rw-r--r-- | test/004-JniTest/jni_test.cc | 20 | ||||
-rw-r--r-- | test/004-JniTest/src/Main.java | 3 |
2 files changed, 23 insertions, 0 deletions
diff --git a/test/004-JniTest/jni_test.cc b/test/004-JniTest/jni_test.cc index b23b97b7c3..cdc546155d 100644 --- a/test/004-JniTest/jni_test.cc +++ b/test/004-JniTest/jni_test.cc @@ -548,3 +548,23 @@ class JniCallNonvirtualVoidMethodTest { extern "C" void JNICALL Java_Main_testCallNonvirtual(JNIEnv* env, jclass) { JniCallNonvirtualVoidMethodTest(env).Test(); } + +extern "C" JNIEXPORT void JNICALL Java_Main_testNewStringObject(JNIEnv* env, jclass) { + const char* string = "Test"; + int length = strlen(string); + jclass c = env->FindClass("java/lang/String"); + assert(c != NULL); + jmethodID method = env->GetMethodID(c, "<init>", "([B)V"); + assert(method != NULL); + assert(!env->ExceptionCheck()); + jbyteArray array = env->NewByteArray(length); + env->SetByteArrayRegion(array, 0, length, reinterpret_cast<const jbyte*>(string)); + jobject o = env->NewObject(c, method, array); + assert(o != NULL); + jstring s = reinterpret_cast<jstring>(o); + assert(env->GetStringLength(s) == length); + assert(env->GetStringUTFLength(s) == length); + const char* chars = env->GetStringUTFChars(s, nullptr); + assert(strcmp(string, chars) == 0); + env->ReleaseStringUTFChars(s, chars); +} diff --git a/test/004-JniTest/src/Main.java b/test/004-JniTest/src/Main.java index 8e9201056e..584fae3a57 100644 --- a/test/004-JniTest/src/Main.java +++ b/test/004-JniTest/src/Main.java @@ -33,6 +33,7 @@ public class Main { testShallowGetCallingClassLoader(); testShallowGetStackClass2(); testCallNonvirtual(); + testNewStringObject(); } private static native void testFindClassOnAttachedNativeThread(); @@ -184,6 +185,8 @@ public class Main { private static native void nativeTestShallowGetStackClass2(); private static native void testCallNonvirtual(); + + private static native void testNewStringObject(); } class JniCallNonvirtualTest { |