void CYExecuteClosure(ffi_cif *cif, void *result, void **arguments, void *arg) {
Closure_privateData *internal(reinterpret_cast<Closure_privateData *>(arg));
- JSContextRef context(internal->context_);
+ JSContextRef context(internal->function_);
size_t count(internal->cif_.nargs);
JSValueRef values[count];
return CYCastJSValue(context, reinterpret_cast<uintptr_t>(internal->value_));
} CYCatch(NULL) }
-static JSValueRef CYValue_callAsFunction_toJSON(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) {
- return CYValue_callAsFunction_valueOf(context, object, _this, count, arguments, exception);
-}
-
static JSValueRef CYValue_callAsFunction_toCYON(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
CYValue *internal(reinterpret_cast<CYValue *>(JSObjectGetPrivate(_this)));
std::ostringstream str;
return CYCastJSValue(context, CYJSString(out.str().c_str()));
} CYCatch(NULL) }
-static JSValueRef Type_callAsFunction_toJSON(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) {
- return Type_callAsFunction_toString(context, object, _this, count, arguments, exception);
-}
-
static JSStaticFunction All_staticFunctions[2] = {
{"cy$complete", &All_complete_callAsFunction, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{NULL, NULL, 0}
};
-static JSStaticFunction CArray_staticFunctions[4] = {
- {"toJSON", &CYValue_callAsFunction_toJSON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
+static JSStaticFunction CArray_staticFunctions[3] = {
{"toPointer", &CArray_callAsFunction_toPointer, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"valueOf", &CYValue_callAsFunction_valueOf, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{NULL, NULL, 0}
{NULL, NULL, NULL, 0}
};
-static JSStaticFunction CString_staticFunctions[6] = {
+static JSStaticFunction CString_staticFunctions[5] = {
{"toCYON", &CString_callAsFunction_toCYON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
- {"toJSON", &CYValue_callAsFunction_toJSON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toPointer", &CString_callAsFunction_toPointer, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toString", &CString_callAsFunction_toString, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"valueOf", &CString_callAsFunction_toString, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{NULL, NULL, NULL, 0}
};
-static JSStaticFunction Pointer_staticFunctions[5] = {
+static JSStaticFunction Pointer_staticFunctions[4] = {
{"toCYON", &Pointer_callAsFunction_toCYON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
- {"toJSON", &CYValue_callAsFunction_toJSON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toPointer", &Pointer_callAsFunction_toPointer, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"valueOf", &CYValue_callAsFunction_valueOf, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{NULL, NULL, 0}
{NULL, NULL, NULL, 0}
};
-static JSStaticFunction Functor_staticFunctions[5] = {
+static JSStaticFunction Functor_staticFunctions[4] = {
{"$cya", &Functor_callAsFunction_$cya, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toCYON", &CYValue_callAsFunction_toCYON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
- {"toJSON", &CYValue_callAsFunction_toJSON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"valueOf", &CYValue_callAsFunction_valueOf, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{NULL, NULL, 0}
};
{NULL, NULL, NULL, 0}
};
-static JSStaticFunction Type_staticFunctions[10] = {
+static JSStaticFunction Type_staticFunctions[9] = {
{"arrayOf", &Type_callAsFunction_arrayOf, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"blockWith", &Type_callAsFunction_blockWith, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"constant", &Type_callAsFunction_constant, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"pointerTo", &Type_callAsFunction_pointerTo, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"withName", &Type_callAsFunction_withName, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toCYON", &Type_callAsFunction_toCYON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
- {"toJSON", &Type_callAsFunction_toJSON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toString", &Type_callAsFunction_toString, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{NULL, NULL, 0}
};
value_(rhs.value_)
{
}
-
- virtual Type_privateData *GetType() const {
- return NULL;
- }
};
template <typename Internal_, typename Value_>
CYValue
{
static JSClassRef Class_;
- static Type_privateData *Type_;
using CYValue::CYValue;
return reinterpret_cast<Value_>(value_);
}
- virtual Type_privateData *GetType() const {
- return Type_;
- }
-
_finline JSValueRef GetPrototype(JSContextRef context) const {
return NULL;
}
template <typename Internal_, typename Value_>
JSClassRef CYValue_<Internal_, Value_>::Class_;
-template <typename Internal_, typename Value_>
-Type_privateData *CYValue_<Internal_, Value_>::Type_;
-
struct CYProtect {
private:
JSGlobalContextRef context_;
//XXX:JSGlobalContextRelease(context_);
}
+ operator bool() const {
+ return object_ != NULL;
+ }
+
+ operator JSContextRef() const {
+ return context_;
+ }
+
operator JSObjectRef() const {
return object_;
}
struct Closure_privateData :
cy::Functor
{
- JSGlobalContextRef context_;
- JSObjectRef function_;
+ CYProtect function_;
JSValueRef (*adapter_)(JSContextRef, size_t, JSValueRef[], JSObjectRef);
Closure_privateData(JSContextRef context, JSObjectRef function, JSValueRef (*adapter)(JSContextRef, size_t, JSValueRef[], JSObjectRef), const sig::Signature &signature) :
cy::Functor(NULL, false, signature),
- context_(CYGetJSContext(context)),
- function_(function),
+ function_(context, function),
adapter_(adapter)
{
- //XXX:JSGlobalContextRetain(context_);
- JSValueProtect(context_, function_);
- }
-
- virtual ~Closure_privateData() {
- JSValueUnprotect(context_, function_);
- //XXX:JSGlobalContextRelease(context_);
}
};
return CYCastJSValue(context, reinterpret_cast<uintptr_t>(internal->value_));
} CYCatch(NULL) }
-static JSValueRef CYValue_callAsFunction_$cya(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
- CYValue *internal(reinterpret_cast<CYValue *>(JSObjectGetPrivate(_this)));
- Type_privateData *typical(internal->GetType());
-
- sig::Void XXX;
-
- sig::Type *type;
- ffi_type *ffi;
-
- if (typical == NULL) {
- type = &XXX;
- ffi = NULL;
- } else {
- type = typical->type_;
- ffi = typical->ffi_;
- }
-
- return CYMakePointer(context, &internal->value_, *type, ffi, object);
-} CYCatch(NULL) }
-
static JSValueRef Selector_getProperty_$cyt(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) { CYTry {
return CYMakeType(context, sig::Selector());
} CYCatch(NULL) }
{NULL, NULL, NULL, 0}
};
-static JSStaticFunction Instance_staticFunctions[7] = {
- {"$cya", &CYValue_callAsFunction_$cya, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
+static JSStaticFunction Instance_staticFunctions[6] = {
{"toCYON", &Instance_callAsFunction_toCYON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toJSON", &Instance_callAsFunction_toJSON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"valueOf", &Instance_callAsFunction_valueOf, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
#endif
void CYObjectiveC_Initialize() { /*XXX*/ JSContextRef context(NULL); CYPoolTry {
- CYPool &pool(CYGetGlobalPool());
-
- Instance::Type_ = new(pool) Type_privateData(sig::Object());
- Selector_privateData::Type_ = new(pool) Type_privateData(sig::Selector());
-
NSArray_ = objc_getClass("NSArray");
NSBlock_ = objc_getClass("NSBlock");
NSDictionary_ = objc_getClass("NSDictionary");