]> git.saurik.com Git - cycript.git/commitdiff
Provide useful-ish error messages from eval calls.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 23 Dec 2015 18:41:40 +0000 (10:41 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Wed, 23 Dec 2015 18:41:40 +0000 (10:41 -0800)
Error.cpp
Error.hpp
Execute.cpp
Library.cpp

index 38d49fce583737c671463729c9279db0db4ad775..be2b4a03153c845f85aea2c827de2eeeff2fdc21 100644 (file)
--- a/Error.cpp
+++ b/Error.cpp
@@ -30,6 +30,10 @@ CYPoolError::CYPoolError(const CYPoolError &rhs) :
 {
 }
 
+CYPoolError::CYPoolError(const char *message) {
+    message_ = pool_.strdup(message);
+}
+
 CYPoolError::CYPoolError(const char *format, ...) {
     va_list args;
     va_start(args, format);
index 9fc6e855340d760b7212bb8f1bb224c0e2b55d33..5b948eb2c5ff095102e49ff221087b6634f612e2 100644 (file)
--- a/Error.hpp
+++ b/Error.hpp
@@ -53,6 +53,7 @@ struct _visible CYPoolError :
 
     CYPoolError(const CYPoolError &rhs);
 
+    CYPoolError(const char *message);
     CYPoolError(const char *format, ...);
     CYPoolError(const char *format, va_list args);
 
index d09c31a683cf6d18bed16a1de3b2e31af5734cb4..1c83e26e9252cec2b189c249321e96cf82faca90 100644 (file)
@@ -1206,7 +1206,15 @@ static JSValueRef All_getProperty(JSContextRef context, JSObjectRef object, JSSt
     const char *code;
     unsigned flags;
     if (CYBridgeHash(pool, CYPoolUTF8String(pool, context, property), code, flags)) {
-        JSValueRef result(_jsccall(JSEvaluateScript, context, CYJSString(CYPoolCode(pool, code)), NULL, NULL, 0));
+        CYUTF8String parsed;
+
+        try {
+            parsed = CYPoolCode(pool, code);
+        } catch (const CYException &error) {
+            CYThrow("%s", pool.strcat("error caching ", CYPoolCString(pool, context, property), ": ", error.PoolCString(pool), NULL));
+        }
+
+        JSValueRef result(_jsccall(JSEvaluateScript, context, CYJSString(parsed), NULL, NULL, 0));
 
         if (flags == 0) {
             JSObjectRef cache(CYGetCachedObject(context, CYJSString("cache")));
index 47da272e9b40e5ab88da1b3d3384d96b13e650ed..942ae8e8fc6fb39cc30e55f6358aee7c87ec7e7d 100644 (file)
@@ -128,8 +128,12 @@ _visible bool CYStartsWith(const CYUTF8String &haystack, const CYUTF8String &nee
 CYUTF8String CYPoolCode(CYPool &pool, std::streambuf &stream) {
     CYLocalPool local;
     CYDriver driver(local, stream);
-    _assert(!driver.Parse());
-    _assert(driver.errors_.empty());
+
+    if (driver.Parse()) {
+        if (!driver.errors_.empty())
+            CYThrow("%s", driver.errors_.front().message_.c_str());
+        CYThrow("syntax error");
+    }
 
     CYOptions options;
     CYContext context(options);