]> git.saurik.com Git - cycript.git/blobdiff - ObjectiveC/Library.mm
Maybe thread local storage is a performance issue.
[cycript.git] / ObjectiveC / Library.mm
index 68cf70d8414bc21470d6df44b2c101ed30d0a64e..8c1528da369542e7ce6ad23a26302ae9855fa1f4 100644 (file)
@@ -644,10 +644,6 @@ static JSValueRef BlockAdapter_(JSContextRef context, size_t count, JSValueRef v
     return CYCallAsFunction(context, function, _this, count - 1, values + 1);
 }
 
-static void BlockClosure_(ffi_cif *cif, void *result, void **arguments, void *arg) {
-    CYExecuteClosure(cif, result, arguments, arg, &BlockAdapter_);
-}
-
 NSBlock *CYMakeBlock(JSContextRef context, JSObjectRef function, sig::Signature &signature) {
     _assert(__NSMallocBlock__ != Nil);
     BlockLiteral *literal(reinterpret_cast<BlockLiteral *>(malloc(sizeof(BlockLiteral))));
@@ -655,7 +651,7 @@ NSBlock *CYMakeBlock(JSContextRef context, JSObjectRef function, sig::Signature
     CYBlockDescriptor *descriptor(new CYBlockDescriptor);
     memset(&descriptor->d_, 0, sizeof(descriptor->d_));
 
-    descriptor->internal_ = CYMakeFunctor_(context, function, signature, &BlockClosure_);
+    descriptor->internal_ = CYMakeFunctor_(context, function, signature, &BlockAdapter_);
     literal->invoke = reinterpret_cast<void (*)(void *, ...)>(descriptor->internal_->GetValue());
 
     literal->isa = __NSMallocBlock__;
@@ -1089,6 +1085,23 @@ NSObject *CYCopyNSObject(CYPool &pool, JSContextRef context, JSValueRef value) {
 
 @end
 /* }}} */
+/* Bridge: NSOrderedSet {{{ */
+#ifdef __APPLE__
+@implementation NSOrderedSet (Cycript)
+
+- (NSString *) cy$toCYON:(bool)objective inSet:(std::set<void *> &)objects {
+    _oassert(objects.insert(self).second);
+
+    NSMutableString *json([[[NSMutableString alloc] init] autorelease]);
+    [json appendString:@"[NSOrderedSet orderedSetWithArray:"];
+    [json appendString:CYCastNSCYON([self array], true, objects)];
+    [json appendString:@"]]"];
+    return json;
+}
+
+@end
+#endif
+/* }}} */
 /* Bridge: NSProxy {{{ */
 @implementation NSProxy (Cycript)
 
@@ -1581,10 +1594,6 @@ static JSValueRef MessageAdapter_(JSContextRef context, size_t count, JSValueRef
     return CYCallAsFunction(context, function, _this, count - 2, values + 2);
 }
 
-static void MessageClosure_(ffi_cif *cif, void *result, void **arguments, void *arg) {
-    CYExecuteClosure(cif, result, arguments, arg, &MessageAdapter_);
-}
-
 static JSObjectRef CYMakeMessage(JSContextRef context, SEL sel, IMP imp, const char *type) {
     Message_privateData *internal(new Message_privateData(sel, type, imp));
     return JSObjectMake(context, Message_, internal);
@@ -1595,7 +1604,7 @@ static IMP CYMakeMessage(JSContextRef context, JSValueRef value, const char *enc
     CYPool pool;
     sig::Signature signature;
     sig::Parse(pool, &signature, encoding, &Structor_);
-    Closure_privateData *internal(CYMakeFunctor_(context, function, signature, &MessageClosure_));
+    Closure_privateData *internal(CYMakeFunctor_(context, function, signature, &MessageAdapter_));
     // XXX: see notes in Library.cpp about needing to leak
     return reinterpret_cast<IMP>(internal->GetValue());
 }
@@ -2986,11 +2995,11 @@ static CYHook CYObjectiveCHook = {
 
 CYRegisterHook CYObjectiveC(&CYObjectiveCHook);
 
-extern "C" void CydgetSetupContext(JSGlobalContextRef context) { CYObjectiveTry_ {
+_extern void CydgetSetupContext(JSGlobalContextRef context) { CYObjectiveTry_ {
     CYSetupContext(context);
 } CYObjectiveCatch }
 
-extern "C" void CydgetMemoryParse(const uint16_t **data, size_t *size) { try {
+_extern void CydgetMemoryParse(const uint16_t **data, size_t *size) { try {
     CYPool pool;
 
     CYUTF8String utf8(CYPoolUTF8String(pool, CYUTF16String(*data, *size)));