]> git.saurik.com Git - cycript.git/commitdiff
When CYONifying fields, @error encode exceptions.
authorJay Freeman (saurik) <saurik@saurik.com>
Thu, 2 Jan 2014 12:52:42 +0000 (04:52 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 2 Jan 2014 12:52:42 +0000 (04:52 -0800)
Cycript.l.in
Cycript.yy.in
Execute.cpp
Highlight.cpp
Highlight.hpp

index 87a46af5e5cfbdecb10f729d9154e6af7585d1c7..cb422ccfca62add4cbcc7fa19f9221c74393da40 100644 (file)
@@ -251,6 +251,8 @@ XMLName {XMLNameStart}{XMLNamePart}*
 "["    L C F(tk::OpenBracket, hi::Structure);
 "]"    L C F(tk::CloseBracket, hi::Structure);
 
+"@error"          L C F(tk::AtError, hi::Error);
+
 @begin Java
 "@class"          L C F(tk::AtClass, hi::Meta);
 @end
index 14f6aadcc5e61c1a3399077c533c2821cf8e57b3..53673a2a0e3f0bfd1251ba0ef1d65d4cf4addeaf 100644 (file)
@@ -224,6 +224,8 @@ int cylex(YYSTYPE *, cy::location *, void *);
 %token OpenBracket "["
 %token CloseBracket "]"
 
+%token AtError "@error"
+
 @begin Java
 %token AtClass "@class"
 @end
index 5df5f60f51ab94633b43bb7d540e7b4b204e09e9..ca678aed42ae8ad30095ffa5d398b1fe36d7cbaf 100644 (file)
@@ -443,27 +443,33 @@ const char *CYPoolCCYON(CYPool &pool, JSContextRef context, JSObjectRef object)
     bool comma(false);
 
     for (size_t index(0), count(JSPropertyNameArrayGetCount(names)); index != count; ++index) {
-        JSStringRef name(JSPropertyNameArrayGetNameAtIndex(names, index));
-        JSValueRef value(CYGetProperty(context, object, name));
-
         if (comma)
             str << ',';
         else
             comma = true;
 
+        JSStringRef name(JSPropertyNameArrayGetNameAtIndex(names, index));
         CYUTF8String string(CYPoolUTF8String(pool, context, name));
+
         if (CYIsKey(string))
             str << string.data;
         else
             CYStringify(str, string.data, string.size);
 
-        str << ':' << CYPoolCCYON(pool, context, value);
-    }
+        str << ':';
 
-    str << '}';
+        try {
+            JSValueRef value(CYGetProperty(context, object, name));
+            str << CYPoolCCYON(pool, context, value);
+        } catch (const CYException &error) {
+            str << "@error";
+        }
+    }
 
     JSPropertyNameArrayRelease(names);
 
+    str << '}';
+
     std::string string(str.str());
     return pool.strmemdup(string.c_str(), string.size());
 }
index 4b7d669393d64d49edd44ea4369a9eb77117e128..0a077a8a7b58f0bb6bc43184f944508f627c85b1 100644 (file)
@@ -74,7 +74,7 @@ void CYLexerHighlight(const char *data, size_t size, std::ostream &output, bool
             case hi::Comment: color = CYColor(true, 30); break;
             case hi::Constant: color = CYColor(false, 31); break;
             case hi::Control: color = CYColor(false, 33); break;
-            case hi::Escape: color = CYColor(true, 31); break;
+            case hi::Error: color = CYColor(true, 31); break;
             case hi::Identifier: color = CYColor(false, 0); break;
             case hi::Meta: color = CYColor(false, 32); break;
             case hi::Nothing: color = CYColor(false, 0); break;
index 1feca0c1319a74171666d9ae222e79850c67351b..278ff07b9883a28c294b57b8b71d8c2184f2f3fa 100644 (file)
@@ -28,7 +28,7 @@ namespace hi { enum Value {
     Comment,
     Constant,
     Control,
-    Escape,
+    Error,
     Identifier,
     Meta,
     Nothing,