]> git.saurik.com Git - cycript.git/commitdiff
Half fixed (at least it doesn't throw an exception anymore) NSDictionaries that have...
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 4 Nov 2009 10:27:15 +0000 (10:27 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Wed, 4 Nov 2009 10:27:15 +0000 (10:27 +0000)
ObjectiveC/Library.mm
todo.txt

index a3c1d66b9b784af87a6995630a59e016a231669c..3cfb90e1a5093792ca9420dde5ae1b8395be8344 100644 (file)
@@ -748,10 +748,10 @@ NSObject *CYCopyNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef valu
 
     bool comma(false);
 #ifdef __APPLE__
-    for (id key in self) {
+    for (NSObject *key in self) {
 #else
     NSEnumerator *keys([self keyEnumerator]);
-    while (id key = [keys nextObject]) {
+    while (NSObject *key = [keys nextObject]) {
 #endif
         if (comma)
             [json appendString:@","];
@@ -779,10 +779,10 @@ NSObject *CYCopyNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef valu
     [super cy$getPropertyNames:names inContext:context];
 
 #ifdef __APPLE__
-    for (NSString *key in self) {
+    for (NSObject *key in self) {
 #else
     NSEnumerator *keys([self keyEnumerator]);
-    while (NSString *key = [keys nextObject]) {
+    while (NSObject *key = [keys nextObject]) {
 #endif
         JSPropertyNameAccumulatorAddName(names, CYJSString(context, key));
     }
@@ -1096,8 +1096,7 @@ JSValueRef CYCastJSValue(JSContextRef context, NSObject *value) { CYPoolTry {
 } CYObjectiveCatch }
 
 - (id) objectForKey:(id)key { CYObjectiveTry {
-    // XXX: are NSDictionary keys always NSString *?
-    JSValueRef value(CYGetProperty(context_, object_, CYJSString(context_, (NSString *) key)));
+    JSValueRef value(CYGetProperty(context_, object_, CYJSString(context_, (NSObject *) key)));
     if (JSValueIsUndefined(context_, value))
         return nil;
     return CYCastNSObject(NULL, context_, value) ?: [NSNull null];
@@ -1111,14 +1110,12 @@ JSValueRef CYCastJSValue(JSContextRef context, NSObject *value) { CYPoolTry {
 } CYObjectiveCatch }
 
 - (void) setObject:(id)object forKey:(id)key { CYObjectiveTry {
-    // XXX: are NSDictionary keys always NSString *?
-    CYSetProperty(context_, object_, CYJSString(context_, (NSString *) key), CYCastJSValue(context_, (NSString *) object));
+    CYSetProperty(context_, object_, CYJSString(context_, (NSObject *) key), CYCastJSValue(context_, (NSString *) object));
 } CYObjectiveCatch }
 
 - (void) removeObjectForKey:(id)key { CYObjectiveTry {
     JSValueRef exception(NULL);
-    // XXX: are NSDictionary keys always NSString *?
-    (void) JSObjectDeleteProperty(context_, object_, CYJSString(context_, (NSString *) key), &exception);
+    (void) JSObjectDeleteProperty(context_, object_, CYJSString(context_, (NSObject *) key), &exception);
     CYThrow(context_, exception);
 } CYObjectiveCatch }
 
index 60e8c151afa566ea2d3b047e538d75fdc76321ea..589584537c3f946a385c71619831c40aae5ccb2e 100644 (file)
--- a/todo.txt
+++ b/todo.txt
@@ -2,6 +2,7 @@ unicode identifier support (native and \u)
 support unions (right now 0-1 fields parsed as struct)
 \\\n escapes in strings aren't handled in the console
 look into what String is, and whether to bridge it
+think about bridging NSNumber with Number prototype
 some JS callbacks don't use exception pointers at all...
 a newline needs to not be allowed after a unary *
 finish implementing default xml namespace statement
@@ -14,10 +15,7 @@ numerification needs to use specific precision values
 consider a mode where unicode string content is saved
   https://bugzilla.mozilla.org/show_bug.cgi?id=274152
 
-cy# SBAwayController.sharedAwayController->_displayValues
-"*** -[NSCFNumber length]: unrecognized selector sent to instance 0x4a4bda0"
-b = []; for (x in a) b.push(x); <- crashes
-
+NSDictionaries that have NSNumber keys don't getProperty
 errors in another process aren't displayed; to fix this, parse errors should get converted to exceptions and thrown
 CYPoolTry/Catch now carefully save the exception after it /no longer needs the exception/... uhh... wtf?
 throw CYJSError should probably be replaced with CYThrow() across the board