]> git.saurik.com Git - cycript.git/commitdiff
Throw SyntaxError, not Error, for Cycript.compile.
authorJay Freeman (saurik) <saurik@saurik.com>
Tue, 15 Dec 2015 15:23:06 +0000 (07:23 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Tue, 15 Dec 2015 15:23:06 +0000 (07:23 -0800)
Error.hpp
Exception.hpp
Execute.cpp
ObjectiveC/Library.mm

index f63180e50979785dae6978bb274563c327141859..9fc6e855340d760b7212bb8f1bb224c0e2b55d33 100644 (file)
--- a/Error.hpp
+++ b/Error.hpp
@@ -41,7 +41,7 @@ struct CYJSError :
     CYJSError(JSContextRef context, const char *format, ...);
 
     virtual const char *PoolCString(CYPool &pool) const;
-    virtual JSValueRef CastJSValue(JSContextRef context) const;
+    virtual JSValueRef CastJSValue(JSContextRef context, const char *name) const;
 };
 #endif
 
@@ -58,7 +58,7 @@ struct _visible CYPoolError :
 
     virtual const char *PoolCString(CYPool &pool) const;
 #ifdef CY_EXECUTE
-    virtual JSValueRef CastJSValue(JSContextRef context) const;
+    virtual JSValueRef CastJSValue(JSContextRef context, const char *name) const;
 #endif
 };
 
index 994dd7b99bb38543c909a34f9dfb41f87d04a0c5..dcc119b29f5e17aa1d55b8e927f44757a7cbf411 100644 (file)
@@ -41,7 +41,7 @@ struct _visible CYException {
 
     virtual const char *PoolCString(CYPool &pool) const = 0;
 #ifdef CY_EXECUTE
-    virtual JSValueRef CastJSValue(JSContextRef context) const = 0;
+    virtual JSValueRef CastJSValue(JSContextRef context, const char *name) const = 0;
 #endif
 };
 
@@ -53,14 +53,16 @@ void CYThrow(JSContextRef context, JSValueRef value);
 
 #define CYTry \
     try
-#define CYCatch(value) \
+#define CYCatch_(value, name) \
     catch (const CYException &error) { \
-        *exception = error.CastJSValue(context); \
+        *exception = error.CastJSValue(context, name); \
         return value; \
     } catch (...) { \
         *exception = CYCastJSValue(context, "catch(...)"); \
         return value; \
     }
+#define CYCatch(value) \
+    CYCatch_(value, "Error")
 
 #define _assert_(mode, test, code, format, ...) do \
     if (!(test)) \
index 68a0d3908d6e51208eb5c8b1e1b4b72cfcb7236e..2123b3fa96d6abde869377ece9a13421bf23dd89 100644 (file)
@@ -367,7 +367,7 @@ static JSValueRef Cycript_compile_callAsFunction(JSContextRef context, JSObjectR
     std::stringstream value(CYPoolCString(pool, context, arguments[0]));
     CYUTF8String code(CYPoolCode(pool, value));
     return CYCastJSValue(context, CYJSString(code));
-} CYCatch(NULL) }
+} CYCatch_(NULL, "SyntaxError") }
 
 static JSValueRef Cycript_gc_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
     CYGarbageCollect(context);
@@ -1732,19 +1732,19 @@ const char *CYJSError::PoolCString(CYPool &pool) const {
     return CYPoolCCYON(pool, context_, value_, objects);
 }
 
-JSValueRef CYJSError::CastJSValue(JSContextRef context) const {
-    // XXX: what if the context is different?
+JSValueRef CYJSError::CastJSValue(JSContextRef context, const char *name) const {
+    // XXX: what if the context is different? or the name? I dunno. ("epic" :/)
     return value_;
 }
 
-JSValueRef CYCastJSError(JSContextRef context, const char *message) {
-    JSObjectRef Error(CYGetCachedObject(context, CYJSString("Error")));
+JSValueRef CYCastJSError(JSContextRef context, const char *name, const char *message) {
+    JSObjectRef Error(CYGetCachedObject(context, CYJSString(name)));
     JSValueRef arguments[1] = {CYCastJSValue(context, message)};
     return _jsccall(JSObjectCallAsConstructor, context, Error, 1, arguments);
 }
 
-JSValueRef CYPoolError::CastJSValue(JSContextRef context) const {
-    return CYCastJSError(context, message_);
+JSValueRef CYPoolError::CastJSValue(JSContextRef context, const char *name) const {
+    return CYCastJSError(context, name, message_);
 }
 
 CYJSError::CYJSError(JSContextRef context, const char *format, ...) {
@@ -1758,7 +1758,7 @@ CYJSError::CYJSError(JSContextRef context, const char *format, ...) {
     const char *message(pool.vsprintf(64, format, args));
     va_end(args);
 
-    value_ = CYCastJSError(context, message);
+    value_ = CYCastJSError(context, "Error", message);
 }
 
 JSGlobalContextRef CYGetJSContext(JSContextRef context) {
@@ -1896,6 +1896,9 @@ extern "C" void CYSetupContext(JSGlobalContextRef context) {
 
     JSObjectRef String_prototype(CYCastJSObject(context, CYGetProperty(context, String, prototype_s)));
     CYSetProperty(context, cy, CYJSString("String_prototype"), String_prototype);
+
+    JSObjectRef SyntaxError(CYCastJSObject(context, CYGetProperty(context, global, CYJSString("SyntaxError"))));
+    CYSetProperty(context, cy, CYJSString("SyntaxError"), SyntaxError);
 /* }}} */
 
     CYSetProperty(context, Array_prototype, toCYON_s, &Array_callAsFunction_toCYON, kJSPropertyAttributeDontEnum);
index 86c705fb80693d58637b696d3e9dbaab934f63b9..e8c43d24944d2f213124a78f7f73a4c392316dd3 100644 (file)
@@ -58,7 +58,7 @@
     try
 #define CYObjectiveCatch \
     catch (const CYException &error) { \
-        @throw CYCastNSObject(NULL, context, error.CastJSValue(context)); \
+        @throw CYCastNSObject(NULL, context, error.CastJSValue(context, "Error")); \
     } \
 }