- JSObjectRef function(CYCastJSObject(context, value));
- *reinterpret_cast<id *>(data) = CYMakeBlock(context, function, signature);
- } break;
+ modified.elements[0] = signature->elements[0];
+ memcpy(modified.elements + 2, signature->elements + 1, sizeof(sig::Element) * (signature->count - 1));
+
+ modified.elements[1].name = NULL;
+ modified.elements[1].type = new(pool) sig::Type();
+ modified.elements[1].offset = _not(size_t);
+
+ memset(modified.elements[1].type, 0, sizeof(sig::Type));
+ modified.elements[1].type->primitive = sig::object_P;
+
+ return CYMakeBlock(context, object, modified);
+}
+
+static bool CYObjectiveC_PoolFFI(CYPool *pool, JSContextRef context, sig::Type *type, ffi_type *ffi, void *data, JSValueRef value) { CYSadTry {
+ // XXX: assigning to an indirect id * works for return values, but not for properties and fields
+
+ switch (type->primitive) {
+ case sig::block_P:
+ // XXX: this function might not handle the idea of a null pool
+ *reinterpret_cast<id *>(data) = CYCastNSBlock(*pool, context, value, &type->data.signature);
+ break;