From 477549f502f5350425ab6547564852bcfd6940ae Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Sat, 2 Jan 2016 18:24:16 -0800 Subject: [PATCH] Fix conversion path for Java->JS exception values. --- Java/Execute.cpp | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/Java/Execute.cpp b/Java/Execute.cpp index 302dd3e..bca2e98 100644 --- a/Java/Execute.cpp +++ b/Java/Execute.cpp @@ -109,18 +109,14 @@ struct CYJavaRef { { } - _finline operator bool() const { - return value_ != NULL; + _finline operator Value_() const { + return value_; } - _finline operator JNIEnv *() const { + _finline JNIEnv *jni() const { return jni_; } - _finline operator Value_() const { - return value_; - } - _finline Value_ get() const { return value_; } @@ -230,7 +226,7 @@ class CYJavaUTF8String : value_(&value) { _assert(value); - JNIEnv *jni(value); + JNIEnv *jni(value.jni()); size = jni->GetStringUTFLength(value); data = jni->GetStringUTFChars(value, NULL); } @@ -242,7 +238,7 @@ class CYJavaUTF8String : ~CYJavaUTF8String() { if (value_ != NULL) { - JNIEnv *jni(*value_); + JNIEnv *jni(value_->jni()); jni->ReleaseStringUTFChars(*value_, data); } } @@ -279,9 +275,7 @@ struct CYJavaError : return CYPoolCString(pool, CYJavaUTF8String(value_.cast())); } - virtual JSValueRef CastJSValue(JSContextRef context, const char *name) const { - return CYCastJSValue(context, value_); - } + virtual JSValueRef CastJSValue(JSContextRef context, const char *name) const; }; // }}} @@ -315,6 +309,12 @@ struct CYJavaEnv { { } + template + CYJavaEnv(const CYJavaRef &value) : + jni(value.jni()) + { + } + operator JNIEnv *() const { return jni; } @@ -434,6 +434,13 @@ struct CYJavaValue : CYJavaValue(const CYJavaValue &) = delete; }; +static JSValueRef CYCastJSValue(JSContextRef context, const CYJavaRef &value); + +template +static _finline JSValueRef CYCastJSValue(JSContextRef context, const CYJavaRef &value) { + return CYCastJSValue(context, value.template cast()); +} + template static _finline JSValueRef CYJavaCastJSValue(JSContextRef context, Type_ value) { return CYCastJSValue(context, value); @@ -443,6 +450,10 @@ static _finline JSValueRef CYJavaCastJSValue(JSContextRef context, jboolean valu return CYCastJSValue(context, static_cast(value)); } +JSValueRef CYJavaError::CastJSValue(JSContextRef context, const char *name) const { + return CYCastJSValue(context, value_); +} + static std::map Primitives_; static CYJavaPrimitive CYJavaGetPrimitive(JSContextRef context, const CYJavaRef &type, jmethodID Class$get$$Name) { -- 2.47.2