]> git.saurik.com Git - cycript.git/commitdiff
Got true JS booleans working in GNUstep.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 1 Nov 2009 05:07:51 +0000 (05:07 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 1 Nov 2009 05:07:51 +0000 (05:07 +0000)
ObjectiveC/Library.mm
cycript.hpp

index 81dfe86def7f9db47cc83df2ada9e6ad80ad0562..5059300e645ca44c266a631d14fdc9c33d195a49 100644 (file)
@@ -231,6 +231,8 @@ static Class NSCFBoolean_;
 static Class NSCFType_;
 static Class NSMessageBuilder_;
 static Class NSZombie_;
 static Class NSCFType_;
 static Class NSMessageBuilder_;
 static Class NSZombie_;
+#else
+static Class NSBoolNumber_;
 #endif
 
 static Class NSArray_;
 #endif
 
 static Class NSArray_;
@@ -574,6 +576,12 @@ NSNumber *CYCopyNSNumber(JSContextRef context, JSValueRef value) {
     return [[NSNumber alloc] initWithDouble:CYCastDouble(context, value)];
 }
 
     return [[NSNumber alloc] initWithDouble:CYCastDouble(context, value)];
 }
 
+#ifndef __APPLE__
+@interface NSBoolNumber : NSNumber {
+}
+@end
+#endif
+
 id CYNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef value, bool cast) {
     id object;
     bool copy;
 id CYNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef value, bool cast) {
     id object;
     bool copy;
@@ -593,7 +601,7 @@ id CYNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef value, bool cas
             object = (id) (CYCastBool(context, value) ? kCFBooleanTrue : kCFBooleanFalse);
             copy = false;
 #else
             object = (id) (CYCastBool(context, value) ? kCFBooleanTrue : kCFBooleanFalse);
             copy = false;
 #else
-            object = [[NSNumber alloc] initWithBool:CYCastBool(context, value)];
+            object = [[NSBoolNumber alloc] initWithBool:CYCastBool(context, value)];
             copy = true;
 #endif
         break;
             copy = true;
 #endif
         break;
@@ -708,6 +716,29 @@ NSObject *CYCopyNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef valu
 
 @end
 /* }}} */
 
 @end
 /* }}} */
+/* Bridge: NSBoolNumber {{{ */
+#ifndef __APPLE__
+@implementation NSBoolNumber (Cycript)
+
+- (JSType) cy$JSType {
+    return kJSTypeBoolean;
+}
+
+- (NSObject *) cy$toJSON:(NSString *)key {
+    return self;
+}
+
+- (NSString *) cy$toCYON {
+    return [self boolValue] ? @"true" : @"false";
+}
+
+- (JSValueRef) cy$JSValueInContext:(JSContextRef)context { CYObjectiveTry_(context) {
+    return CYCastJSValue(context, (bool) [self boolValue]);
+} CYObjectiveCatch }
+
+@end
+#endif
+/* }}} */
 /* Bridge: NSDictionary {{{ */
 @implementation NSDictionary (Cycript)
 
 /* Bridge: NSDictionary {{{ */
 @implementation NSDictionary (Cycript)
 
@@ -2213,6 +2244,8 @@ void CYObjectiveC_SetupContext(JSContextRef context) {
     NSCFType_ = objc_getClass("NSCFType");
     NSMessageBuilder_ = objc_getClass("NSMessageBuilder");
     NSZombie_ = objc_getClass("_NSZombie_");
     NSCFType_ = objc_getClass("NSCFType");
     NSMessageBuilder_ = objc_getClass("NSMessageBuilder");
     NSZombie_ = objc_getClass("_NSZombie_");
+#else
+    NSBoolNumber_ = objc_getClass("NSBoolNumber");
 #endif
 
     NSArray_ = objc_getClass("NSArray");
 #endif
 
     NSArray_ = objc_getClass("NSArray");
index ff163246c21331827fb73024ce27e7e435092a7b..a1e1f022d5cff8abdc7b3170835892e64e088483 100644 (file)
@@ -93,7 +93,7 @@ JSValueRef CYGetProperty(JSContextRef context, JSObjectRef object, JSStringRef n
 void CYSetProperty(JSContextRef context, JSObjectRef object, size_t index, JSValueRef value);
 void CYSetProperty(JSContextRef context, JSObjectRef object, JSStringRef name, JSValueRef value, JSPropertyAttributes attributes = kJSPropertyAttributeNone);
 
 void CYSetProperty(JSContextRef context, JSObjectRef object, size_t index, JSValueRef value);
 void CYSetProperty(JSContextRef context, JSObjectRef object, JSStringRef name, JSValueRef value, JSPropertyAttributes attributes = kJSPropertyAttributeNone);
 
-//JSValueRef CYCastJSValue(JSContextRef context, bool value);
+JSValueRef CYCastJSValue(JSContextRef context, bool value);
 JSValueRef CYCastJSValue(JSContextRef context, double value);
 JSValueRef CYCastJSValue(JSContextRef context, int value);
 JSValueRef CYCastJSValue(JSContextRef context, unsigned int value);
 JSValueRef CYCastJSValue(JSContextRef context, double value);
 JSValueRef CYCastJSValue(JSContextRef context, int value);
 JSValueRef CYCastJSValue(JSContextRef context, unsigned int value);