]> git.saurik.com Git - cycript.git/commitdiff
Got the makefile to not rebuild the .deb constantly, and decided to attempt property...
authorJay Freeman (saurik) <saurik@saurik.com>
Fri, 16 Oct 2009 16:17:39 +0000 (16:17 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Fri, 16 Oct 2009 16:17:39 +0000 (16:17 +0000)
Library.mm
makefile

index 350c659dca7c9ff8eba2c556cffb9751a82d9b17..7a1872cebaea2cdc7ac2cd62b2767d79f8ee460a 100644 (file)
@@ -1714,13 +1714,19 @@ static JSValueRef Instance_getProperty(JSContextRef context, JSObjectRef object,
         } CYPoolCatch(NULL)
 
         const char *string(CYPoolCString(pool, name));
         } CYPoolCatch(NULL)
 
         const char *string(CYPoolCString(pool, name));
+        Class _class(object_getClass(self));
 
 
-        if (objc_property_t property = class_getProperty(object_getClass(self), string)) {
+        if (objc_property_t property = class_getProperty(_class, string)) {
             PropertyAttributes attributes(property);
             SEL sel(sel_registerName(attributes.Getter()));
             return CYSendMessage(pool, context, self, sel, 0, NULL, false, exception);
         }
 
             PropertyAttributes attributes(property);
             SEL sel(sel_registerName(attributes.Getter()));
             return CYSendMessage(pool, context, self, sel, 0, NULL, false, exception);
         }
 
+        if (SEL sel = sel_getUid(string))
+            // XXX: possibly use a more "awesome" check?
+            if (class_getInstanceMethod(_class, sel) != NULL)
+                return CYSendMessage(pool, context, self, sel, 0, NULL, false, exception);
+
         return NULL;
     } CYCatch
 }
         return NULL;
     } CYCatch
 }
@@ -1744,8 +1750,9 @@ static bool Instance_setProperty(JSContextRef context, JSObjectRef object, JSStr
         } CYPoolCatch(NULL)
 
         const char *string(CYPoolCString(pool, name));
         } CYPoolCatch(NULL)
 
         const char *string(CYPoolCString(pool, name));
+        Class _class(object_getClass(self));
 
 
-        if (objc_property_t property = class_getProperty(object_getClass(self), string)) {
+        if (objc_property_t property = class_getProperty(_class, string)) {
             PropertyAttributes attributes(property);
             if (const char *setter = attributes.Setter()) {
                 SEL sel(sel_registerName(setter));
             PropertyAttributes attributes(property);
             if (const char *setter = attributes.Setter()) {
                 SEL sel(sel_registerName(setter));
@@ -1755,6 +1762,29 @@ static bool Instance_setProperty(JSContextRef context, JSObjectRef object, JSStr
             }
         }
 
             }
         }
 
+        size_t length(strlen(string));
+
+        char set[length + 5];
+
+        set[0] = 's';
+        set[1] = 'e';
+        set[2] = 't';
+
+        if (string[0] != '\0') {
+            set[3] = toupper(string[0]);
+            memcpy(set + 4, string + 1, length - 1);
+        }
+
+        set[length + 3] = ':';
+        set[length + 4] = '\0';
+
+        if (SEL sel = sel_getUid(set))
+            // XXX: possibly use a more "awesome" check?
+            if (class_getInstanceMethod(_class, sel) != NULL) {
+                JSValueRef arguments[1] = {value};
+                CYSendMessage(pool, context, self, sel, 1, arguments, false, exception);
+            }
+
         if (CYInternal *internal = CYInternal::Set(self)) {
             internal->SetProperty(context, property, value);
             return true;
         if (CYInternal *internal = CYInternal::Set(self)) {
             internal->SetProperty(context, property, value);
             return true;
index 4fbd67ddb020a78e0477a8edf912d7b06a382b41..a1739a504194be80a4287e9331d46e556769fe09 100644 (file)
--- a/makefile
+++ b/makefile
@@ -9,12 +9,13 @@ flags += -F${PKG_ROOT}/System/Library/PrivateFrameworks
 
 svn := $(shell svnversion)
 deb := $(shell grep ^Package: control | cut -d ' ' -f 2-)_$(shell grep ^Version: control | cut -d ' ' -f 2 | sed -e 's/\#/$(svn)/')_iphoneos-arm.deb
 
 svn := $(shell svnversion)
 deb := $(shell grep ^Package: control | cut -d ' ' -f 2-)_$(shell grep ^Version: control | cut -d ' ' -f 2 | sed -e 's/\#/$(svn)/')_iphoneos-arm.deb
+all := cycript libcycript.dylib libcycript.plist
 
 header := Cycript.tab.hh Parser.hpp Pooling.hpp Struct.hpp cycript.hpp
 
 $(deb):
 
 
 header := Cycript.tab.hh Parser.hpp Pooling.hpp Struct.hpp cycript.hpp
 
 $(deb):
 
-all: cycript libcycript.dylib libcycript.plist
+all: $(all)
 
 clean:
        rm -f *.o libcycript.dylib cycript libcycript.plist Struct.hpp lex.cy.c Cycript.tab.cc Cycript.tab.hh location.hh position.hh stack.hh
 
 clean:
        rm -f *.o libcycript.dylib cycript libcycript.plist Struct.hpp lex.cy.c Cycript.tab.cc Cycript.tab.hh location.hh position.hh stack.hh
@@ -74,7 +75,7 @@ cycript: Application.o libcycript.dylib
            -framework JavaScriptCore -framework UIKit
        ldid -S cycript
 
            -framework JavaScriptCore -framework UIKit
        ldid -S cycript
 
-$(deb): all
+$(deb): $(all)
        rm -rf package
        mkdir -p package/DEBIAN
        sed -e 's/#/$(svn)/' control >package/DEBIAN/control
        rm -rf package
        mkdir -p package/DEBIAN
        sed -e 's/#/$(svn)/' control >package/DEBIAN/control