]> git.saurik.com Git - cycript.git/commitdiff
new operator must return JSObject even for errors.
authorJay Freeman (saurik) <saurik@saurik.com>
Fri, 8 Jan 2016 12:12:36 +0000 (04:12 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Fri, 8 Jan 2016 12:12:36 +0000 (04:12 -0800)
Exception.hpp
Execute.cpp
Java/Execute.cpp
ObjectiveC/Library.mm

index cd4bd08436e9d60326f0aae708e8d83a0d622f33..1efaf3f3762a848bf5b9156a4a9b8a2d0bb786e7 100644 (file)
@@ -56,13 +56,17 @@ void CYThrow(JSContextRef context, JSValueRef value);
 #define CYCatch_(value, name) \
     catch (const CYException &error) { \
         *exception = error.CastJSValue(context, name); \
+        _assert(*exception != NULL); \
         return value; \
     } catch (...) { \
         *exception = CYCastJSValue(context, "catch(...)"); \
+        _assert(*exception != NULL); \
         return value; \
     }
 #define CYCatch(value) \
     CYCatch_(value, "Error")
+#define CYCatchObject() \
+    CYCatch(JSObjectMake(context, NULL, NULL))
 
 #define _assert_(mode, test, code, format, ...) do \
     if (!(test)) \
index ac2fac154e8da87c5f682f7a1c78d8122150a9ed..c068780d24485f3c6b0f45272b7c55c818d9e51f 100644 (file)
@@ -1477,15 +1477,15 @@ static void All_getPropertyNames(JSContextRef context, JSObjectRef object, JSPro
 
 static JSObjectRef CArray_new(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
     _assert(false);
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static JSObjectRef CString_new(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
     _assert(false);
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static JSObjectRef Pointer_new(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
     _assert(false);
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static JSObjectRef Type_new(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
     CYPool pool;
@@ -1539,7 +1539,7 @@ static JSObjectRef Type_new(JSContextRef context, JSObjectRef object, size_t cou
     } else {
         throw CYJSError(context, "incorrect number of arguments to Type constructor");
     }
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static JSValueRef Type_callAsFunction_$With(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], sig::Callable &type, JSValueRef *exception) { CYTry {
     Type_privateData *internal(reinterpret_cast<Type_privateData *>(JSObjectGetPrivate(_this)));
@@ -1703,7 +1703,7 @@ static JSObjectRef Type_callAsConstructor(JSContextRef context, JSObjectRef obje
         type->PoolFFI(value->pool_, context, ffi, value->value_, arguments[0]);
 
     return pointer;
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 // XXX: I don't even think the user should be allowed to do this
 static JSObjectRef Functor_new(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
@@ -1715,7 +1715,7 @@ static JSObjectRef Functor_new(JSContextRef context, JSObjectRef object, size_t
     sig::Parse(pool, &signature, encoding, &Structor_);
     // XXX: this can try to return null, and I guess then it just fails
     return CYCastJSObject(context, CYMakeFunctor(context, arguments[0], false, signature));
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static JSValueRef CArray_callAsFunction_toPointer(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
     CArray *internal(reinterpret_cast<CArray *>(JSObjectGetPrivate(_this)));
index c7ecbb1e7a874170835eb2198a688532099e2619..1a227ab8b149ea886cf028b8cc39e134b8998d93 100644 (file)
@@ -1015,7 +1015,7 @@ static JSObjectRef JavaClass_callAsConstructor(JSContextRef context, JSObjectRef
     }
 
     CYThrow("invalid constructor call");
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static bool JavaStaticInterior_hasProperty(JSContextRef context, JSObjectRef object, JSStringRef property) {
     auto internal(CYPrivate<CYJavaStaticInterior>::Get(context, object));
index 79573a8ea51a69597e41fb491a227b6c977b6234..431da0d47ade95ba2290182c99e04a4a1e117649 100644 (file)
@@ -1973,13 +1973,13 @@ static JSValueRef Instance_complete_callAsFunction(JSContextRef context, JSObjec
             values(CYCastJSValue(context, CYJSString(pool.strcat(name, "()", NULL))));
         }));
     } return array;
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static JSObjectRef Constructor_callAsConstructor(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
     auto internal(CYPrivate<Constructor>::Get(context, object));
     JSObjectRef value(CYMakeInstance(context, [internal->value_ alloc], Instance::Uninitialized));
     return value;
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static const char *CYBlockEncoding(NSBlock *self) {
     BlockLiteral *literal(reinterpret_cast<BlockLiteral *>(self));
@@ -2574,7 +2574,7 @@ static JSObjectRef Super_new(JSContextRef context, JSObjectRef object, size_t co
     id self(CYCastNSObject(&pool, context, arguments[0]));
     Class _class(CYCastClass(pool, context, arguments[1]));
     return CYPrivate<cy::Super>::Make(context, self, _class);
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static JSObjectRef Selector_new(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
     if (count != 1)
@@ -2582,13 +2582,13 @@ static JSObjectRef Selector_new(JSContextRef context, JSObjectRef object, size_t
     CYPool pool;
     const char *name(CYPoolCString(pool, context, arguments[0]));
     return CYPrivate<Selector_privateData>::Make(context, sel_registerName(name));
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static JSObjectRef Instance_new(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
     if (count != 1)
         throw CYJSError(context, "incorrect number of arguments to Instance constructor");
     return CYMakeInstance(context, CYCastPointer<id>(context, arguments[0]));
-} CYCatch(NULL) }
+} CYCatchObject() }
 
 static JSValueRef Selector_getProperty_$cyt(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) { CYTry {
     return CYMakeType(context, sig::Selector());