+ if (_class == NSZombie_)
+ return [NSString stringWithFormat:@"<_NSZombie_: %p>", value];
+
+ SEL sel(@selector(cy$toCYON:inSet:));
+
+ if (objc_method *toCYON = class_getInstanceMethod(_class, sel))
+ return reinterpret_cast<NSString *(*)(id, SEL, bool, std::set<void *> &)>(method_getImplementation(toCYON))(value, sel, objective, objects);
+ else if (objc_method *methodSignatureForSelector = class_getInstanceMethod(_class, @selector(methodSignatureForSelector:)))
+ if (reinterpret_cast<NSMethodSignature *(*)(id, SEL, SEL)>(method_getImplementation(methodSignatureForSelector))(value, @selector(methodSignatureForSelector:), sel) != nil)
+ return [value cy$toCYON:objective inSet:objects];
+
+ return [NSString stringWithFormat:@"%@", value];
+}
+
+NSString *CYCastNSCYON(id value, bool objective, std::set<void *> *objects) {
+ if (objects != NULL)
+ return CYCastNSCYON(value, objective, *objects);
+ else {
+ std::set<void *> objects;
+ return CYCastNSCYON(value, objective, objects);
+ }