summaryrefslogtreecommitdiff
path: root/src/runtime/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/java')
-rw-r--r--src/runtime/java/jpgf.c40
1 files changed, 9 insertions, 31 deletions
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c
index 7a8792a71..b31f52fd5 100644
--- a/src/runtime/java/jpgf.c
+++ b/src/runtime/java/jpgf.c
@@ -11,32 +11,13 @@
static jstring
gu2j_string(JNIEnv *env, GuString s) {
- GuWord w = s.w_;
- uint8_t buf[sizeof(GuWord)];
-
- uint8_t* utf8;
- size_t len;
- if (w & 1) {
- len = (w & 0xff) >> 1;
- gu_assert(len <= sizeof(GuWord));
- size_t i = len;
- while (i > 0) {
- w >>= 8;
- buf[--i] = w & 0xff;
- }
- utf8 = buf;
- } else {
- uint8_t* p = (void*) w;
- len = (p[0] == 0) ? ((size_t*) p)[-1] : p[0];
- utf8 = &p[1];
- }
-
- const uint8_t* src = utf8;
+ const char* utf8 = s;
+ size_t len = strlen(s);
jchar* utf16 = alloca(len*sizeof(jchar));
jchar* dst = utf16;
- while (src-utf8 < len) {
- GuUCS ucs = gu_utf8_decode(&src);
+ while (s-utf8 < len) {
+ GuUCS ucs = gu_utf8_decode((const uint8_t**) &s);
if (ucs <= 0xFFFF) {
*dst++ = ucs;
@@ -52,10 +33,10 @@ gu2j_string(JNIEnv *env, GuString s) {
static GuString
j2gu_string(JNIEnv *env, jstring s, GuPool* pool) {
- const char *str = (*env)->GetStringUTFChars(env, s, 0);
- GuString s = gu_str_string(str, pool);
+ GuString str = (*env)->GetStringUTFChars(env, s, 0);
+ str = gu_string_copy(str, pool);
(*env)->ReleaseStringUTFChars(env, s, str);
- return s;
+ return str;
}
static void*
@@ -223,10 +204,7 @@ Java_org_grammaticalframework_pgf_PGF_getAbstractName(JNIEnv* env, jobject self)
JNIEXPORT jstring JNICALL
Java_org_grammaticalframework_pgf_PGF_getStartCat(JNIEnv* env, jobject self)
{
- GuPool* tmp_pool = gu_local_pool();
- jstring jname = gu2j_string(env, pgf_start_cat(get_ref(env, self), tmp_pool));
- gu_pool_free(tmp_pool);
- return jname;
+ return gu2j_string(env, pgf_start_cat(get_ref(env, self)));
}
typedef struct {
@@ -313,7 +291,7 @@ Java_org_grammaticalframework_pgf_Parser_parse
PgfToken tok =
pgf_lexer_current_token(lexer);
- if (gu_string_eq(tok, gu_empty_string))
+ if (*tok == 0)
throw_string_exception(env, "org/grammaticalframework/pgf/PGFError", "The sentence cannot be parsed");
else
throw_jstring_exception(env, "org/grammaticalframework/pgf/ParseError", gu2j_string(env, tok));