]> git.saurik.com Git - cycript.git/commitdiff
Fix conversion path for Java->JS exception values.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 3 Jan 2016 02:24:16 +0000 (18:24 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 3 Jan 2016 02:24:16 +0000 (18:24 -0800)
Java/Execute.cpp

index 302dd3ea52680962c560cadb8760646b0db579ec..bca2e988f5c812ac6a463ef935a14560ff2020bd 100644 (file)
@@ -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<jobject>()));
     }
 
-    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 <typename Other_>
+    CYJavaEnv(const CYJavaRef<Other_> &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<jobject> &value);
+
+template <typename Other_>
+static _finline JSValueRef CYCastJSValue(JSContextRef context, const CYJavaRef<Other_> &value) {
+    return CYCastJSValue(context, value.template cast<jobject>());
+}
+
 template <typename Type_>
 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<bool>(value));
 }
 
+JSValueRef CYJavaError::CastJSValue(JSContextRef context, const char *name) const {
+    return CYCastJSValue(context, value_);
+}
+
 static std::map<std::string, CYJavaPrimitive> Primitives_;
 
 static CYJavaPrimitive CYJavaGetPrimitive(JSContextRef context, const CYJavaRef<jclass> &type, jmethodID Class$get$$Name) {