From 3853f09957ea2fd44bdef8fe5805f7da7529de8a Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Sat, 9 Jan 2016 23:35:09 -0800 Subject: [PATCH] Hold JavaRef throughout CYJavaUTF8String. --- Java/Execute.cpp | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/Java/Execute.cpp b/Java/Execute.cpp index ad0ee93..ee2d2be 100644 --- a/Java/Execute.cpp +++ b/Java/Execute.cpp @@ -243,11 +243,11 @@ class CYJavaUTF8String : public CYUTF8String { private: - const CYJavaRef *value_; + const CYJavaRef &value_; public: CYJavaUTF8String(const CYJavaRef &value) : - value_(&value) + value_(value) { _assert(value); JNIEnv *jni(value.jni()); @@ -255,29 +255,18 @@ class CYJavaUTF8String : data = jni->GetStringUTFChars(value, NULL); } - CYJavaUTF8String(const CYJavaRef &value) : - CYJavaUTF8String(CYCastJavaString(value)) - { - } + CYJavaUTF8String(CYJavaRef &&) = delete; ~CYJavaUTF8String() { - if (value_ != NULL) { - JNIEnv *jni(value_->jni()); - jni->ReleaseStringUTFChars(*value_, data); - } + JNIEnv *jni(value_.jni()); + jni->ReleaseStringUTFChars(value_, data); } CYJavaUTF8String(const CYJavaUTF8String &) = delete; - - CYJavaUTF8String(CYJavaUTF8String &&rhs) : - value_(rhs.value_) - { - rhs.value_ = NULL; - } }; CYJavaUTF8String CYCastUTF8String(const CYJavaRef &value) { - return CYJavaUTF8String(value); + return {value}; } JSStringRef CYCopyJSString(const CYJavaRef &value) { @@ -296,7 +285,8 @@ struct CYJavaError : } virtual const char *PoolCString(CYPool &pool) const { - return CYPoolCString(pool, CYJavaUTF8String(value_.cast())); + auto string(CYCastJavaString(value_.cast())); + return CYPoolCString(pool, CYJavaUTF8String(string)); } virtual JSValueRef CastJSValue(JSContextRef context, const char *name) const; @@ -798,7 +788,8 @@ static JSObjectRef CYGetJavaClass(JSContextRef context, const CYJavaRef auto modifiers(jni.CallIntMethod(field, Field$getModifiers)); auto instance(!jni.CallStaticBooleanMethod(Modifier$, Modifier$isStatic, modifiers)); auto &map(instance ? table->instance_ : table->static_); - CYJavaUTF8String name(jni.CallObjectMethod(field, Field$getName)); + auto string(jni.CallObjectMethod(field, Field$getName)); + CYJavaUTF8String name(string); auto id(jni.FromReflectedField(field)); auto type(jni.CallObjectMethod(field, Field$getType)); map.insert(std::make_pair(std::string(name), CYJavaField{id, CYJavaGetPrimitive(context, type, Class$getName)})); @@ -830,7 +821,8 @@ static JSObjectRef CYGetJavaClass(JSContextRef context, const CYJavaRef auto method(jni.GetObjectArrayElement(methods, i)); auto modifiers(jni.CallIntMethod(method, Method$getModifiers)); auto instance(!jni.CallStaticBooleanMethod(Modifier$, Modifier$isStatic, modifiers)); - CYJavaUTF8String name(jni.CallObjectMethod(method, Method$getName)); + auto string(jni.CallObjectMethod(method, Method$getName)); + CYJavaUTF8String name(string); auto parameters(jni.CallObjectMethod(method, Method$getParameterTypes)); CYJavaShorty shorty(CYJavaGetShorty(context, parameters, Class$getName)); -- 2.47.2