/* JavaScript Properties {{{ */
JSValueRef CYGetProperty(JSContextRef context, JSObjectRef object, size_t index) {
- JSValueRef exception(NULL);
- JSValueRef value(JSObjectGetPropertyAtIndex(context, object, index, &exception));
- CYThrow(context, exception);
- return value;
+ return _jsccall(JSObjectGetPropertyAtIndex, context, object, index);
}
JSValueRef CYGetProperty(JSContextRef context, JSObjectRef object, JSStringRef name) {
- JSValueRef exception(NULL);
- JSValueRef value(JSObjectGetProperty(context, object, name, &exception));
- CYThrow(context, exception);
- return value;
+ return _jsccall(JSObjectGetProperty, context, object, name);
}
void CYSetProperty(JSContextRef context, JSObjectRef object, size_t index, JSValueRef value) {
- JSValueRef exception(NULL);
- JSObjectSetPropertyAtIndex(context, object, index, value, &exception);
- CYThrow(context, exception);
+ _jsccall(JSObjectSetPropertyAtIndex, context, object, index, value);
}
void CYSetProperty(JSContextRef context, JSObjectRef object, JSStringRef name, JSValueRef value, JSPropertyAttributes attributes) {
- JSValueRef exception(NULL);
- JSObjectSetProperty(context, object, name, value, attributes, &exception);
- CYThrow(context, exception);
+ _jsccall(JSObjectSetProperty, context, object, name, value, attributes);
}
void CYSetProperty(JSContextRef context, JSObjectRef object, JSStringRef name, JSValueRef (*callback)(JSContextRef, JSObjectRef, JSObjectRef, size_t, const JSValueRef[], JSValueRef *), JSPropertyAttributes attributes) {
JSStringRef CYCopyJSString(JSContextRef context, JSValueRef value) {
if (JSValueIsNull(context, value))
return NULL;
- JSValueRef exception(NULL);
- JSStringRef string(JSValueToStringCopy(context, value, &exception));
- CYThrow(context, exception);
- return string;
+ return _jsccall(JSValueToStringCopy, context, value);
}
static CYUTF16String CYCastUTF16String(JSStringRef value) {
}
double CYCastDouble(JSContextRef context, JSValueRef value) {
- JSValueRef exception(NULL);
- double number(JSValueToNumber(context, value, &exception));
- CYThrow(context, exception);
- return number;
+ return _jsccall(JSValueToNumber, context, value);
}
bool CYCastBool(JSContextRef context, JSValueRef value) {
}
JSObjectRef CYCastJSObject(JSContextRef context, JSValueRef value) {
- JSValueRef exception(NULL);
- JSObjectRef object(JSValueToObject(context, value, &exception));
- CYThrow(context, exception);
- return object;
+ return _jsccall(JSValueToObject, context, value);
}
JSValueRef CYCallAsFunction(JSContextRef context, JSObjectRef function, JSObjectRef _this, size_t count, const JSValueRef arguments[]) {
- JSValueRef exception(NULL);
- JSValueRef value(JSObjectCallAsFunction(context, function, _this, count, arguments, &exception));
- CYThrow(context, exception);
- return value;
+ return _jsccall(JSObjectCallAsFunction, context, function, _this, count, arguments);
}
bool CYIsCallable(JSContextRef context, JSValueRef value) {
}
JSValueRef CYArrayGet(JSContextRef context, JSObjectRef array, size_t index) {
- JSValueRef exception(NULL);
- JSValueRef value(JSObjectGetPropertyAtIndex(context, array, index, &exception));
- CYThrow(context, exception);
- return value;
+ return _jsccall(JSObjectGetPropertyAtIndex, context, array, index);
}
void CYArrayPush(JSContextRef context, JSObjectRef array, JSValueRef value) {
- JSValueRef exception(NULL);
JSValueRef arguments[1];
arguments[0] = value;
JSObjectRef Array(CYGetCachedObject(context, CYJSString("Array_prototype")));
- JSObjectCallAsFunction(context, CYCastJSObject(context, CYGetProperty(context, Array, push_s)), array, 1, arguments, &exception);
- CYThrow(context, exception);
+ _jsccall(JSObjectCallAsFunction, context, CYCastJSObject(context, CYGetProperty(context, Array, push_s)), array, 1, arguments);
}
static JSValueRef System_print(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
} CYCatch(NULL) }
const char *CYPoolCCYON(CYPool &pool, JSContextRef context, JSValueRef value) {
- JSValueRef exception(NULL);
- const char *cyon(CYPoolCCYON(pool, context, value, &exception));
- CYThrow(context, exception);
- return cyon;
+ return _jsccall(CYPoolCCYON, pool, context, value);
}
const char *CYPoolCCYON(CYPool &pool, JSContextRef context, JSObjectRef object) {
JSValueRef toJSON(CYGetProperty(context, object, toJSON_s));
if (CYIsCallable(context, toJSON)) {
JSValueRef arguments[1] = {CYCastJSValue(context, CYJSString(""))};
- JSValueRef exception(NULL);
- const char *cyon(CYPoolCCYON(pool, context, CYCallAsFunction(context, (JSObjectRef) toJSON, object, 1, arguments), &exception));
- CYThrow(context, exception);
- return cyon;
+ return _jsccall(CYPoolCCYON, pool, context, CYCallAsFunction(context, (JSObjectRef) toJSON, object, 1, arguments));
}
if (JSObjectIsFunction(context, object)) {
static JSObjectRef CYMakeFunctor(JSContextRef context, JSValueRef value, const char *type) {
JSObjectRef Function(CYGetCachedObject(context, CYJSString("Function")));
- JSValueRef exception(NULL);
- bool function(JSValueIsInstanceOfConstructor(context, value, Function, &exception));
- CYThrow(context, exception);
-
+ bool function(_jsccall(JSValueIsInstanceOfConstructor, context, value, Function));
if (function) {
JSObjectRef function(CYCastJSObject(context, value));
return CYMakeFunctor(context, function, type);
args[i] = CYCastJSValue(context, argv[i]);
JSObjectRef array;
- if (JSObjectMakeArray$ != NULL) {
- JSValueRef exception(NULL);
- array = (*JSObjectMakeArray$)(context, argc, args, &exception);
- CYThrow(context, exception);
- } else {
+ if (JSObjectMakeArray$ != NULL)
+ array = _jsccall(*JSObjectMakeArray$, context, argc, args);
+ else {
JSObjectRef Array(CYGetCachedObject(context, CYJSString("Array")));
JSValueRef value(CYCallAsFunction(context, Array, NULL, argc, args));
array = CYCastJSObject(context, value);
JSValueRef CYCastJSError(JSContextRef context, const char *message) {
JSObjectRef Error(CYGetCachedObject(context, CYJSString("Error")));
-
JSValueRef arguments[1] = {CYCastJSValue(context, message)};
-
- JSValueRef exception(NULL);
- JSValueRef value(JSObjectCallAsConstructor(context, Error, 1, arguments, &exception));
- CYThrow(context, exception);
-
- return value;
+ return _jsccall(JSObjectCallAsConstructor, context, Error, 1, arguments);
}
JSValueRef CYPoolError::CastJSValue(JSContextRef context) const {
}
extern "C" void CYSetupContext(JSGlobalContextRef context) {
- JSValueRef exception(NULL);
-
CYInitializeDynamic();
JSObjectRef global(CYGetGlobalObject(context));
JSObjectRef all(JSObjectMake(context, All_, NULL));
CYSetProperty(context, cycript, CYJSString("all"), all);
- JSObjectRef alls(JSObjectCallAsConstructor(context, Array, 0, NULL, &exception));
- CYThrow(context, exception);
+ JSObjectRef alls(_jsccall(JSObjectCallAsConstructor, context, Array, 0, NULL));
CYSetProperty(context, cycript, CYJSString("alls"), alls);
if (true) {
#include <dlfcn.h>
-#define CYObjectiveTry_(context) { \
- JSContextRef context_(context); \
+#define CYObjectiveTry_ { \
try
#define CYObjectiveTry { \
+ JSContextRef context(context_); \
try
#define CYObjectiveCatch \
catch (const CYException &error) { \
- @throw CYCastNSObject(NULL, context_, error.CastJSValue(context_)); \
+ @throw CYCastNSObject(NULL, context, error.CastJSValue(context)); \
} \
}
}
_finline bool CYJSValueIsInstanceOfCachedConstructor(JSContextRef context, JSValueRef value, JSStringRef cache) {
- JSValueRef exception(NULL);
- JSObjectRef constructor(CYGetCachedObject(context, cache));
- bool is(JSValueIsInstanceOfConstructor(context, value, constructor, &exception));
- CYThrow(context, exception);
- return is;
+ return _jsccall(JSValueIsInstanceOfConstructor, context, value, CYGetCachedObject(context, cache));
}
NSObject *CYMakeBlock(void (*invoke)(), sig::Signature &signature) {
}
- (JSValueRef) cy$getProperty:(NSString *)name inContext:(JSContextRef)context {
- CYObjectiveTry_(context) {
+ CYObjectiveTry_ {
if ([name isEqualToString:@"length"])
return CYCastJSValue(context, [self count]);
} CYObjectiveCatch
return objective ? value : [NSString stringWithFormat:@"@%@", value];
}
-- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_(context) {
+- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_ {
return CYCastJSValue(context, (bool) [self boolValue]);
} CYObjectiveCatch }
return objective ? value : [NSString stringWithFormat:@"@%@", value];
}
-- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_(context) {
+- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_ {
return [self cy$JSType] != kJSTypeBoolean ? CYCastJSValue(context, [self doubleValue]) : CYCastJSValue(context, static_cast<bool>([self boolValue]));
} CYObjectiveCatch }
return objective ? value : [NSString stringWithFormat:@"@%@", value];
}
-- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_(context) {
+- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_ {
return CYJSNull(context);
} CYObjectiveCatch }
return [self cy$valueOfInContext:context];
}
-- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_(context) {
+- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_ {
return NULL;
} CYObjectiveCatch }
return nil;
}
-- (JSValueRef) cy$getProperty:(NSString *)name inContext:(JSContextRef)context { CYObjectiveTry_(context) {
+- (JSValueRef) cy$getProperty:(NSString *)name inContext:(JSContextRef)context { CYObjectiveTry_ {
if (NSObject *value = [self cy$getProperty:name])
return CYCastJSValue(context, value);
return NULL;
}
}
-- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_(context) {
+- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_ {
return CYCastJSValue(context, CYJSString(context, self));
} CYObjectiveCatch }
//return objective ? value : [NSString stringWithFormat:@"@%@", value];
}
-- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_(context) {
+- (JSValueRef) cy$valueOfInContext:(JSContextRef)context { CYObjectiveTry_ {
return CYJSUndefined(context);
} CYObjectiveCatch }
@implementation CYJSObject
-- (id) initWithJSObject:(JSObjectRef)object inContext:(JSContextRef)context { CYObjectiveTry {
+- (id) initWithJSObject:(JSObjectRef)object inContext:(JSContextRef)context { CYObjectiveTry_ {
if ((self = [super init]) != nil) {
object_ = object;
context_ = CYGetJSContext(context);
- (NSString *) cy$toCYON:(bool)objective { CYObjectiveTry {
CYPool pool;
- const char *cyon(CYPoolCCYON(pool, context_, object_));
+ const char *cyon(CYPoolCCYON(pool, context, object_));
if (cyon == NULL)
return [super cy$toCYON:objective];
else
} CYObjectiveCatch }
- (NSUInteger) count { CYObjectiveTry {
- JSPropertyNameArrayRef names(JSObjectCopyPropertyNames(context_, object_));
+ JSPropertyNameArrayRef names(JSObjectCopyPropertyNames(context, object_));
size_t size(JSPropertyNameArrayGetCount(names));
JSPropertyNameArrayRelease(names);
return size;
} CYObjectiveCatch }
- (id) objectForKey:(id)key { CYObjectiveTry {
- JSValueRef value(CYGetProperty(context_, object_, CYJSString(context_, (NSObject *) key)));
- if (JSValueIsUndefined(context_, value))
+ JSValueRef value(CYGetProperty(context, object_, CYJSString(context, (NSObject *) key)));
+ if (JSValueIsUndefined(context, value))
return nil;
- return CYCastNSObject(NULL, context_, value) ?: [NSNull null];
+ return CYCastNSObject(NULL, context, value) ?: [NSNull null];
} CYObjectiveCatch }
- (NSEnumerator *) keyEnumerator { CYObjectiveTry {
- JSPropertyNameArrayRef names(JSObjectCopyPropertyNames(context_, object_));
- NSEnumerator *enumerator([CYCastNSArray(context_, names) objectEnumerator]);
+ JSPropertyNameArrayRef names(JSObjectCopyPropertyNames(context, object_));
+ NSEnumerator *enumerator([CYCastNSArray(context, names) objectEnumerator]);
JSPropertyNameArrayRelease(names);
return enumerator;
} CYObjectiveCatch }
- (void) setObject:(id)object forKey:(id)key { CYObjectiveTry {
- CYSetProperty(context_, object_, CYJSString(context_, (NSObject *) 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);
- (void) JSObjectDeleteProperty(context_, object_, CYJSString(context_, (NSObject *) key), &exception);
- CYThrow(context_, exception);
+ (void) _jsccall(JSObjectDeleteProperty, context, object_, CYJSString(context, (NSObject *) key));
} CYObjectiveCatch }
@end
@implementation CYJSArray
-- (NSString *) cy$toCYON:(bool)objective {
+- (NSString *) cy$toCYON:(bool)objective { CYObjectiveTry {
CYPool pool;
- return [NSString stringWithUTF8String:CYPoolCCYON(pool, context_, object_)];
-}
+ return [NSString stringWithUTF8String:CYPoolCCYON(pool, context, object_)];
+} CYObjectiveCatch }
-- (id) initWithJSObject:(JSObjectRef)object inContext:(JSContextRef)context { CYObjectiveTry {
+- (id) initWithJSObject:(JSObjectRef)object inContext:(JSContextRef)context { CYObjectiveTry_ {
if ((self = [super init]) != nil) {
object_ = object;
context_ = CYGetJSContext(context);
} CYObjectiveCatch }
- (NSUInteger) count { CYObjectiveTry {
- return CYArrayLength(context_, object_);
+ return CYArrayLength(context, object_);
} CYObjectiveCatch }
- (id) objectAtIndex:(NSUInteger)index { CYObjectiveTry {
size_t bounds([self count]);
if (index >= bounds)
@throw [NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"*** -[CYJSArray objectAtIndex:]: index (%zu) beyond bounds (%zu)", static_cast<size_t>(index), bounds] userInfo:nil];
- JSValueRef exception(NULL);
- JSValueRef value(JSObjectGetPropertyAtIndex(context_, object_, index, &exception));
- CYThrow(context_, exception);
- return CYCastNSObject(NULL, context_, value) ?: [NSNull null];
+ JSValueRef value(_jsccall(JSObjectGetPropertyAtIndex, context, object_, index));
+ return CYCastNSObject(NULL, context, value) ?: [NSNull null];
} CYObjectiveCatch }
- (void) addObject:(id)object { CYObjectiveTry {
- CYArrayPush(context_, object_, CYCastJSValue(context_, (NSObject *) object));
+ CYArrayPush(context, object_, CYCastJSValue(context, (NSObject *) object));
} CYObjectiveCatch }
- (void) insertObject:(id)object atIndex:(NSUInteger)index { CYObjectiveTry {
size_t bounds([self count] + 1);
if (index >= bounds)
@throw [NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"*** -[CYJSArray insertObject:atIndex:]: index (%zu) beyond bounds (%zu)", static_cast<size_t>(index), bounds] userInfo:nil];
- JSValueRef exception(NULL);
JSValueRef arguments[3];
- arguments[0] = CYCastJSValue(context_, index);
- arguments[1] = CYCastJSValue(context_, 0);
- arguments[2] = CYCastJSValue(context_, (NSObject *) object);
- JSObjectRef Array(CYGetCachedObject(context_, CYJSString("Array_prototype")));
- JSObjectCallAsFunction(context_, CYCastJSObject(context_, CYGetProperty(context_, Array, splice_s)), object_, 3, arguments, &exception);
- CYThrow(context_, exception);
+ arguments[0] = CYCastJSValue(context, index);
+ arguments[1] = CYCastJSValue(context, 0);
+ arguments[2] = CYCastJSValue(context, (NSObject *) object);
+ JSObjectRef Array(CYGetCachedObject(context, CYJSString("Array_prototype")));
+ _jsccall(JSObjectCallAsFunction, context, CYCastJSObject(context, CYGetProperty(context, Array, splice_s)), object_, 3, arguments);
} CYObjectiveCatch }
- (void) removeLastObject { CYObjectiveTry {
- JSValueRef exception(NULL);
- JSObjectRef Array(CYGetCachedObject(context_, CYJSString("Array_prototype")));
- JSObjectCallAsFunction(context_, CYCastJSObject(context_, CYGetProperty(context_, Array, pop_s)), object_, 0, NULL, &exception);
- CYThrow(context_, exception);
+ JSObjectRef Array(CYGetCachedObject(context, CYJSString("Array_prototype")));
+ _jsccall(JSObjectCallAsFunction, context, CYCastJSObject(context, CYGetProperty(context, Array, pop_s)), object_, 0, NULL);
} CYObjectiveCatch }
- (void) removeObjectAtIndex:(NSUInteger)index { CYObjectiveTry {
size_t bounds([self count]);
if (index >= bounds)
@throw [NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"*** -[CYJSArray removeObjectAtIndex:]: index (%zu) beyond bounds (%zu)", static_cast<size_t>(index), bounds] userInfo:nil];
- JSValueRef exception(NULL);
JSValueRef arguments[2];
- arguments[0] = CYCastJSValue(context_, index);
- arguments[1] = CYCastJSValue(context_, 1);
- JSObjectRef Array(CYGetCachedObject(context_, CYJSString("Array_prototype")));
- JSObjectCallAsFunction(context_, CYCastJSObject(context_, CYGetProperty(context_, Array, splice_s)), object_, 2, arguments, &exception);
- CYThrow(context_, exception);
+ arguments[0] = CYCastJSValue(context, index);
+ arguments[1] = CYCastJSValue(context, 1);
+ JSObjectRef Array(CYGetCachedObject(context, CYJSString("Array_prototype")));
+ _jsccall(JSObjectCallAsFunction, context, CYCastJSObject(context, CYGetProperty(context, Array, splice_s)), object_, 2, arguments);
} CYObjectiveCatch }
- (void) replaceObjectAtIndex:(NSUInteger)index withObject:(id)object { CYObjectiveTry {
size_t bounds([self count]);
if (index >= bounds)
@throw [NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"*** -[CYJSArray replaceObjectAtIndex:withObject:]: index (%zu) beyond bounds (%zu)", static_cast<size_t>(index), bounds] userInfo:nil];
- CYSetProperty(context_, object_, index, CYCastJSValue(context_, (NSObject *) object));
+ CYSetProperty(context, object_, index, CYCastJSValue(context, (NSObject *) object));
} CYObjectiveCatch }
@end
@implementation CYInternal
-- (void) dealloc {
+- (void) dealloc { CYObjectiveTry {
JSValueUnprotect(context_, object_);
JSGlobalContextRelease(context_);
[super dealloc];
-}
+} CYObjectiveCatch }
-- (id) initInContext:(JSContextRef)context {
+- (id) initInContext:(JSContextRef)context { CYObjectiveTry_ {
if ((self = [super init]) != nil) {
context_ = CYGetJSContext(context);
JSGlobalContextRetain(context_);
} return self;
-}
+} CYObjectiveCatch }
- (bool) hasProperty:(JSStringRef)name inContext:(JSContextRef)context {
if (object_ == NULL)
};
#ifdef __APPLE__
-JSValueRef NSCFType$cy$toJSON$inContext$(id self, SEL sel, JSValueRef key, JSContextRef context) { CYObjectiveTry_(context) {
+JSValueRef NSCFType$cy$toJSON$inContext$(id self, SEL sel, JSValueRef key, JSContextRef context) { CYObjectiveTry_ {
return CYCastJSValue(context, [(NSString *) CFCopyDescription((CFTypeRef) self) autorelease]);
} CYObjectiveCatch }
#endif