}
- (bool) cy$hasProperty:(NSString *)name {
- if ([name isEqualToString:@"length"])
- return true;
-
size_t index(CYGetIndex(name));
if (index == _not(size_t) || index >= [self length])
return [super cy$hasProperty:name];
}
- (NSObject *) cy$getProperty:(NSString *)name {
- if ([name isEqualToString:@"length"]) {
- NSUInteger count([self length]);
-#ifdef __APPLE__
- return [NSNumber numberWithUnsignedInteger:count];
-#else
- return [NSNumber numberWithUnsignedInt:count];
-#endif
- }
-
size_t index(CYGetIndex(name));
if (index == _not(size_t) || index >= [self length])
return [super cy$getProperty:name];
}
}
-// XXX: this might be overly restrictive for NSString; I think I need a half-way between /injecting/ implicit properties and /accepting/ implicit properties
-+ (bool) cy$hasImplicitProperties {
- return false;
-}
-
- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_(context) {
return CYCastJSValue(context, CYJSString(context, self));
} CYObjectiveCatch }
return kJSTypeUndefined;
}
-- (NSString *) cy$toCYON {
+- (NSString *) cy$toCYON:(bool)objective {
NSString *value(@"undefined");
return value; // XXX: maybe use the below code, adding @undefined?
//return objective ? value : [NSString stringWithFormat:@"@%@", value];
static bool CYIsClass(id self) {
#ifdef __APPLE__
- // XXX: this is a lame object_isClass
- return class_getInstanceMethod(object_getClass(self), @selector(alloc)) != NULL;
+ return class_isMetaClass(object_getClass(self));
#else
return GSObjCIsClass(self);
#endif