X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/afdeb40444392e6b538d1bb46454e017724e6775..a1f3555e04644c0445200cff08b0470f614de48b:/ObjectiveC/Library.mm
diff --git a/ObjectiveC/Library.mm b/ObjectiveC/Library.mm
index f4a72d7..f495f33 100644
--- a/ObjectiveC/Library.mm
+++ b/ObjectiveC/Library.mm
@@ -1,28 +1,24 @@
/* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2012 Jay Freeman (saurik)
+ * Copyright (C) 2009-2013 Jay Freeman (saurik)
*/
-/* GNU Lesser General Public License, Version 3 {{{ */
+/* GNU General Public License, Version 3 {{{ */
/*
- * Cycript is free software: you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or (at your
- * option) any later version.
+ * Cycript is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
*
- * Cycript is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- * License for more details.
+ * Cycript is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with Cycript. If not, see .
**/
/* }}} */
-#ifdef __APPLE__
-#include "Struct.hpp"
-#endif
-
#include
#include "ObjectiveC/Internal.hpp"
@@ -36,7 +32,6 @@
#ifdef __APPLE__
#include
#include
-#include
#include
#endif
@@ -163,42 +158,37 @@ enum {
BLOCK_HAS_SIGNATURE = 1 << 30,
};
-JSValueRef CYSendMessage(apr_pool_t *pool, JSContextRef context, id self, Class super, SEL _cmd, size_t count, const JSValueRef arguments[], bool initialize, JSValueRef *exception);
+JSValueRef CYSendMessage(CYPool &pool, JSContextRef context, id self, Class super, SEL _cmd, size_t count, const JSValueRef arguments[], bool initialize, JSValueRef *exception);
/* Objective-C Pool Release {{{ */
-apr_status_t CYPoolRelease_(void *data) {
+void CYPoolRelease_(void *data) {
id object(reinterpret_cast(data));
[object release];
- return APR_SUCCESS;
}
-id CYPoolRelease_(apr_pool_t *pool, id object) {
+id CYPoolRelease_(CYPool *pool, id object) {
if (object == nil)
return nil;
else if (pool == NULL)
return [object autorelease];
else {
- apr_pool_cleanup_register(pool, object, &CYPoolRelease_, &apr_pool_cleanup_null);
+ pool->atexit(CYPoolRelease_);
return object;
}
}
template
-Type_ CYPoolRelease(apr_pool_t *pool, Type_ object) {
+Type_ CYPoolRelease(CYPool *pool, Type_ object) {
return (Type_) CYPoolRelease_(pool, (id) object);
}
/* }}} */
/* Objective-C Strings {{{ */
-const char *CYPoolCString(apr_pool_t *pool, JSContextRef context, NSString *value) {
- if (pool == NULL)
- return [value UTF8String];
- else {
- size_t size([value maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1);
- char *string(new(pool) char[size]);
- if (![value getCString:string maxLength:size encoding:NSUTF8StringEncoding])
- throw CYJSError(context, "[NSString getCString:maxLength:encoding:] == NO");
- return string;
- }
+const char *CYPoolCString(CYPool &pool, JSContextRef context, NSString *value) {
+ size_t size([value maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1);
+ char *string(new(pool) char[size]);
+ if (![value getCString:string maxLength:size encoding:NSUTF8StringEncoding])
+ throw CYJSError(context, "[NSString getCString:maxLength:encoding:] == NO");
+ return string;
}
JSStringRef CYCopyJSString(JSContextRef context, NSString *value) {
@@ -239,16 +229,16 @@ NSString *CYCopyNSString(JSContextRef context, JSValueRef value) {
return CYCopyNSString(context, CYJSString(context, value));
}
-NSString *CYCastNSString(apr_pool_t *pool, const CYUTF8String &value) {
+NSString *CYCastNSString(CYPool *pool, const CYUTF8String &value) {
return CYPoolRelease(pool, CYCopyNSString(value));
}
-NSString *CYCastNSString(apr_pool_t *pool, SEL sel) {
+NSString *CYCastNSString(CYPool *pool, SEL sel) {
const char *name(sel_getName(sel));
return CYPoolRelease(pool, CYCopyNSString(CYUTF8String(name, strlen(name))));
}
-NSString *CYCastNSString(apr_pool_t *pool, JSContextRef context, JSStringRef value) {
+NSString *CYCastNSString(CYPool *pool, JSContextRef context, JSStringRef value) {
return CYPoolRelease(pool, CYCopyNSString(context, value));
}
@@ -270,7 +260,7 @@ size_t CYGetIndex(NSString *value) {
return CYGetIndex(CYCastUTF8String(value));
}
-bool CYGetOffset(apr_pool_t *pool, JSContextRef context, NSString *value, ssize_t &index) {
+bool CYGetOffset(CYPool &pool, JSContextRef context, NSString *value, ssize_t &index) {
return CYGetOffset(CYPoolCString(pool, context, value), index);
}
@@ -523,7 +513,9 @@ struct PropertyAttributes {
name = property_getName(property);
const char *attributes(property_getAttributes(property));
- for (char *state, *token(apr_strtok(apr_pstrdup(pool_, attributes), ",", &state)); token != NULL; token = apr_strtok(NULL, ",", &state)) {
+ for (char *token(pool_.strdup(attributes)), *next; token != NULL; token = next) {
+ if ((next = strchr(token, ',')) != NULL)
+ *next++ = '\0';
switch (*token) {
case 'R': readonly = true; break;
case 'C': copy = true; break;
@@ -548,7 +540,7 @@ struct PropertyAttributes {
const char *Getter() {
if (getter_ == NULL)
- getter_ = apr_pstrdup(pool_, name);
+ getter_ = pool_.strdup(name);
return getter_;
}
@@ -577,7 +569,6 @@ struct PropertyAttributes {
};
#endif
-#ifndef __APPLE__
@interface CYWebUndefined : NSObject {
}
@@ -595,7 +586,6 @@ struct PropertyAttributes {
@end
#define WebUndefined CYWebUndefined
-#endif
/* Bridge: CYJSObject {{{ */
@interface CYJSObject : NSMutableDictionary {
@@ -673,7 +663,7 @@ NSObject *CYMakeBlock(void (*invoke)(), sig::Signature &signature) {
return reinterpret_cast(literal);
}
-NSObject *CYCastNSObject(apr_pool_t *pool, JSContextRef context, JSObjectRef object) {
+NSObject *CYCastNSObject(CYPool *pool, JSContextRef context, JSObjectRef object) {
if (CYJSValueIsNSObject(context, object)) {
Instance *internal(reinterpret_cast(JSObjectGetPrivate(object)));
return internal->GetValue();
@@ -699,7 +689,7 @@ NSNumber *CYCopyNSNumber(JSContextRef context, JSValueRef value) {
@end
#endif
-id CYNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef value, bool cast) {
+id CYNSObject(CYPool *pool, JSContextRef context, JSValueRef value, bool cast) {
id object;
bool copy;
@@ -752,12 +742,12 @@ id CYNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef value, bool cas
return [object retain];
}
-NSObject *CYCastNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef value) {
+NSObject *CYCastNSObject(CYPool *pool, JSContextRef context, JSValueRef value) {
return CYNSObject(pool, context, value, true);
}
-NSObject *CYCopyNSObject(apr_pool_t *pool, JSContextRef context, JSValueRef value) {
- return CYNSObject(pool, context, value, false);
+NSObject *CYCopyNSObject(CYPool &pool, JSContextRef context, JSValueRef value) {
+ return CYNSObject(&pool, context, value, false);
}
/* Bridge: NSArray {{{ */
@@ -1186,8 +1176,8 @@ static bool CYIsClass(id self) {
#endif
}
-Class CYCastClass(apr_pool_t *pool, JSContextRef context, JSValueRef value) {
- id self(CYCastNSObject(pool, context, value));
+Class CYCastClass(CYPool &pool, JSContextRef context, JSValueRef value) {
+ id self(CYCastNSObject(&pool, context, value));
if (CYIsClass(self))
return (Class) self;
throw CYJSError(context, "got something that is not a Class");
@@ -1199,7 +1189,7 @@ NSArray *CYCastNSArray(JSContextRef context, JSPropertyNameArrayRef names) {
size_t size(JSPropertyNameArrayGetCount(names));
NSMutableArray *array([NSMutableArray arrayWithCapacity:size]);
for (size_t index(0); index != size; ++index)
- [array addObject:CYCastNSString(pool, context, JSPropertyNameArrayGetNameAtIndex(names, index))];
+ [array addObject:CYCastNSString(&pool, context, JSPropertyNameArrayGetNameAtIndex(names, index))];
return array;
}
@@ -1229,9 +1219,7 @@ JSValueRef CYCastJSValue(JSContextRef context, NSObject *value) { CYPoolTry {
- (NSString *) cy$toCYON:(bool)objective { CYObjectiveTry {
CYPool pool;
- JSValueRef exception(NULL);
const char *cyon(CYPoolCCYON(pool, context_, object_));
- CYThrow(context_, exception);
if (cyon == NULL)
return [super cy$toCYON:objective];
else
@@ -1470,12 +1458,13 @@ static void CYObjectiveC_CallFunction(JSContextRef context, ffi_cif *cif, void (
ffi_call(cif, function, value, values);
} CYSadCatch() }
-static bool CYObjectiveC_PoolFFI(apr_pool_t *pool, JSContextRef context, sig::Type *type, ffi_type *ffi, void *data, JSValueRef value) { CYSadTry {
+static bool CYObjectiveC_PoolFFI(CYPool *pool, JSContextRef context, sig::Type *type, ffi_type *ffi, void *data, JSValueRef value) { CYSadTry {
switch (type->primitive) {
// XXX: do something epic about blocks
case sig::block_P:
case sig::object_P:
case sig::typename_P:
+ // XXX: this works for return values, but not for properties and fields
*reinterpret_cast(data) = CYCastNSObject(pool, context, value);
break;
@@ -1535,7 +1524,7 @@ static bool CYImplements(id object, Class _class, SEL selector, bool devoid = fa
return false;
}
-static const char *CYPoolTypeEncoding(apr_pool_t *pool, JSContextRef context, SEL sel, objc_method *method) {
+static const char *CYPoolTypeEncoding(CYPool &pool, JSContextRef context, SEL sel, objc_method *method) {
if (method != NULL)
return method_getTypeEncoding(method);
@@ -1588,7 +1577,7 @@ static bool Messages_hasProperty(JSContextRef context, JSObjectRef object, JSStr
return false;
}
-static JSValueRef Messages_getProperty(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) {
+static JSValueRef Messages_getProperty(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) { CYTry {
Messages *internal(reinterpret_cast(JSObjectGetPrivate(object)));
Class _class(internal->GetValue());
@@ -1600,9 +1589,9 @@ static JSValueRef Messages_getProperty(JSContextRef context, JSObjectRef object,
return CYMakeMessage(context, sel, method_getImplementation(method), method_getTypeEncoding(method));
return NULL;
-}
+} CYCatch(NULL) }
-static bool Messages_setProperty(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef value, JSValueRef *exception) {
+static bool Messages_setProperty(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef value, JSValueRef *exception) { CYTry {
Messages *internal(reinterpret_cast(JSObjectGetPrivate(object)));
Class _class(internal->GetValue());
@@ -1639,10 +1628,10 @@ static bool Messages_setProperty(JSContextRef context, JSObjectRef object, JSStr
}
return true;
-}
+} CYCatch(false) }
#if 0 && OBJC_API_VERSION < 2
-static bool Messages_deleteProperty(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) {
+static bool Messages_deleteProperty(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) { CYTry {
Messages *internal(reinterpret_cast(JSObjectGetPrivate(object)));
Class _class(internal->GetValue());
@@ -1657,7 +1646,7 @@ static bool Messages_deleteProperty(JSContextRef context, JSObjectRef object, JS
}
return false;
-}
+} CYCatch(false) }
#endif
static void Messages_getPropertyNames(JSContextRef context, JSObjectRef object, JSPropertyNameAccumulatorRef names) {
@@ -1692,7 +1681,7 @@ static bool Instance_hasProperty(JSContextRef context, JSObjectRef object, JSStr
return true;
CYPool pool;
- NSString *name(CYCastNSString(pool, context, property));
+ NSString *name(CYCastNSString(&pool, context, property));
if (CYInternal *internal = [CYInternal get:self])
if ([internal hasProperty:property inContext:context])
@@ -1730,7 +1719,7 @@ static JSValueRef Instance_getProperty(JSContextRef context, JSObjectRef object,
return Internal::Make(context, self, object);
CYPool pool;
- NSString *name(CYCastNSString(pool, context, property));
+ NSString *name(CYCastNSString(&pool, context, property));
if (CYInternal *internal = [CYInternal get:self])
if (JSValueRef value = [internal getProperty:property inContext:context])
@@ -1766,8 +1755,8 @@ static bool Instance_setProperty(JSContextRef context, JSObjectRef object, JSStr
CYPool pool;
- NSString *name(CYCastNSString(pool, context, property));
- NSObject *data(CYCastNSObject(pool, context, value));
+ NSString *name(CYCastNSString(&pool, context, property));
+ NSObject *data(CYCastNSObject(&pool, context, value));
CYPoolTry {
if ([self cy$setProperty:name to:data])
@@ -1954,7 +1943,7 @@ static JSValueRef Instance_box_callAsFunction(JSContextRef context, JSObjectRef
if (count == 0)
throw CYJSError(context, "incorrect number of arguments to Instance");
CYPool pool;
- id value(CYCastNSObject(pool, context, arguments[0]));
+ id value(CYCastNSObject(&pool, context, arguments[0]));
if (value == nil)
value = [NSNull null];
return CYCastJSValue(context, [value cy$box]);
@@ -1998,7 +1987,7 @@ static bool Internal_setProperty(JSContextRef context, JSObjectRef object, JSStr
if (objc_ivar *ivar = object_getInstanceVariable(self, name, NULL)) {
Type_privateData type(pool, ivar_getTypeEncoding(ivar));
- CYPoolFFI(pool, context, type.type_, type.GetFFI(), reinterpret_cast(self) + ivar_getOffset(ivar), value);
+ CYPoolFFI(&pool, context, type.type_, type.GetFFI(), reinterpret_cast(self) + ivar_getOffset(ivar), value);
return true;
}
@@ -2032,14 +2021,14 @@ static void Internal_getPropertyNames(JSContextRef context, JSObjectRef object,
Internal_getPropertyNames_(_class, names);
}
-static JSValueRef Internal_callAsFunction_$cya(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) {
+static JSValueRef Internal_callAsFunction_$cya(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
Internal *internal(reinterpret_cast(JSObjectGetPrivate(object)));
return internal->GetOwner();
-}
+} CYCatch(NULL) }
static JSValueRef ObjectiveC_Classes_getProperty(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) { CYTry {
CYPool pool;
- NSString *name(CYCastNSString(pool, context, property));
+ NSString *name(CYCastNSString(&pool, context, property));
if (Class _class = NSClassFromString(name))
return CYMakeInstance(context, _class, true);
return NULL;
@@ -2166,6 +2155,21 @@ static void ObjectiveC_Constants_getPropertyNames(JSContextRef context, JSObject
}
#ifdef __APPLE__
+#if defined(__i386__) || defined(__x86_64__)
+#define OBJC_MAX_STRUCT_BY_VALUE 8
+static int struct_forward_array[] = {
+ 0, 0, 0, 1, 0, 1, 1, 1, 0 };
+#elif defined(__arm__)
+#define OBJC_MAX_STRUCT_BY_VALUE 1
+static int struct_forward_array[] = {
+ 0, 0 };
+#elif defined(__arm64__)
+#define CY_NO_STRET
+#else
+#error missing objc-runtime-info
+#endif
+
+#ifndef CY_NO_STRET
static bool stret(ffi_type *ffi_type) {
return ffi_type->type == FFI_TYPE_STRUCT && (
ffi_type->size > OBJC_MAX_STRUCT_BY_VALUE ||
@@ -2173,8 +2177,9 @@ static bool stret(ffi_type *ffi_type) {
);
}
#endif
+#endif
-JSValueRef CYSendMessage(apr_pool_t *pool, JSContextRef context, id self, Class _class, SEL _cmd, size_t count, const JSValueRef arguments[], bool initialize, JSValueRef *exception) { CYTry {
+JSValueRef CYSendMessage(CYPool &pool, JSContextRef context, id self, Class _class, SEL _cmd, size_t count, const JSValueRef arguments[], bool initialize, JSValueRef *exception) { CYTry {
const char *type;
if (_class == NULL)
@@ -2228,9 +2233,11 @@ JSValueRef CYSendMessage(apr_pool_t *pool, JSContextRef context, id self, Class
if (imp == NULL) {
#ifdef __APPLE__
+#ifndef CY_NO_STRET
if (stret(cif.rtype))
imp = class_getMethodImplementation_stret(_class, _cmd);
else
+#endif
imp = class_getMethodImplementation(_class, _cmd);
#else
objc_super super = {self, _class};
@@ -2267,7 +2274,7 @@ static JSValueRef $objc_msgSend(JSContextRef context, JSObjectRef object, JSObje
if (uninitialized)
internal->value_ = nil;
} else {
- self = CYCastNSObject(pool, context, arguments[0]);
+ self = CYCastNSObject(&pool, context, arguments[0]);
_class = nil;
uninitialized = false;
}
@@ -2280,33 +2287,33 @@ static JSValueRef $objc_msgSend(JSContextRef context, JSObjectRef object, JSObje
return CYSendMessage(pool, context, self, _class, _cmd, count - 2, arguments + 2, uninitialized, exception);
} CYCatch(NULL) }
-static JSValueRef Selector_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) {
+static JSValueRef Selector_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
JSValueRef setup[count + 2];
setup[0] = _this;
setup[1] = object;
memcpy(setup + 2, arguments, sizeof(JSValueRef) * count);
return $objc_msgSend(context, NULL, NULL, count + 2, setup, exception);
-}
+} CYCatch(NULL) }
-static JSValueRef Message_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) {
+static JSValueRef Message_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
CYPool pool;
Message_privateData *internal(reinterpret_cast(JSObjectGetPrivate(object)));
// XXX: handle Instance::Uninitialized?
- id self(CYCastNSObject(pool, context, _this));
+ id self(CYCastNSObject(&pool, context, _this));
void *setup[2];
setup[0] = &self;
setup[1] = &internal->sel_;
return CYCallFunction(pool, context, 2, setup, count, arguments, false, exception, &internal->signature_, &internal->cif_, internal->GetValue());
-}
+} CYCatch(NULL) }
static JSObjectRef Super_new(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
if (count != 2)
throw CYJSError(context, "incorrect number of arguments to Super constructor");
CYPool pool;
- id self(CYCastNSObject(pool, context, arguments[0]));
+ id self(CYCastNSObject(&pool, context, arguments[0]));
Class _class(CYCastClass(pool, context, arguments[1]));
return cy::Super::Make(context, self, _class);
} CYCatch(NULL) }
@@ -2326,12 +2333,12 @@ static JSObjectRef Instance_new(JSContextRef context, JSObjectRef object, size_t
return CYMakeInstance(context, self, false);
} CYCatch(NULL) }
-static JSValueRef CYValue_getProperty_value(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) {
+static JSValueRef CYValue_getProperty_value(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) { CYTry {
CYValue *internal(reinterpret_cast(JSObjectGetPrivate(object)));
return CYCastJSValue(context, reinterpret_cast(internal->value_));
-}
+} CYCatch(NULL) }
-static JSValueRef CYValue_callAsFunction_$cya(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) {
+static JSValueRef CYValue_callAsFunction_$cya(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
CYValue *internal(reinterpret_cast(JSObjectGetPrivate(_this)));
Type_privateData *typical(internal->GetType());
@@ -2347,12 +2354,12 @@ static JSValueRef CYValue_callAsFunction_$cya(JSContextRef context, JSObjectRef
}
return CYMakePointer(context, &internal->value_, _not(size_t), type, ffi, object);
-}
+} CYCatch(NULL) }
-static JSValueRef Instance_getProperty_constructor(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) {
+static JSValueRef Instance_getProperty_constructor(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) { CYTry {
Instance *internal(reinterpret_cast(JSObjectGetPrivate(object)));
return Instance::Make(context, (id) object_getClass(internal->GetValue()));
-}
+} CYCatch(NULL) }
static JSValueRef Instance_getProperty_prototype(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) { CYTry {
Instance *internal(reinterpret_cast(JSObjectGetPrivate(object)));
@@ -2362,13 +2369,13 @@ static JSValueRef Instance_getProperty_prototype(JSContextRef context, JSObjectR
return CYGetClassPrototype(context, self);
} CYCatch(NULL) }
-static JSValueRef Instance_getProperty_messages(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) {
+static JSValueRef Instance_getProperty_messages(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) { CYTry {
Instance *internal(reinterpret_cast(JSObjectGetPrivate(object)));
id self(internal->GetValue());
if (!CYIsClass(self))
return CYJSUndefined(context);
return Messages::Make(context, (Class) self);
-}
+} CYCatch(NULL) }
static JSValueRef Instance_callAsFunction_toCYON(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
if (!CYJSValueIsNSObject(context, _this))
@@ -2466,9 +2473,9 @@ static JSValueRef Selector_callAsFunction_toString(JSContextRef context, JSObjec
return CYCastJSValue(context, sel_getName(internal->GetValue()));
} CYCatch(NULL) }
-static JSValueRef Selector_callAsFunction_toJSON(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) {
+static JSValueRef Selector_callAsFunction_toJSON(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
return Selector_callAsFunction_toString(context, object, _this, count, arguments, exception);
-}
+} CYCatch(NULL) }
static JSValueRef Selector_callAsFunction_toCYON(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
Selector_privateData *internal(reinterpret_cast(JSObjectGetPrivate(_this)));
@@ -2552,7 +2559,7 @@ void CYObjectiveC_Initialize() { /*XXX*/ JSContextRef context(NULL); CYPoolTry {
$objc_getAssociatedObject = reinterpret_cast(dlsym(RTLD_DEFAULT, "objc_getAssociatedObject"));
$objc_removeAssociatedObjects = reinterpret_cast(dlsym(RTLD_DEFAULT, "objc_removeAssociatedObjects"));
- apr_pool_t *pool(CYGetGlobalPool());
+ CYPool &pool(CYGetGlobalPool());
Object_type = new(pool) Type_privateData("@");
Selector_type = new(pool) Type_privateData(":");