+ case sig::block_P: {
+ _assert(type->data.signature.count != 0);
+ sig::Signature signature;
+ sig::Copy(*pool, signature, type->data.signature);
+
+ sig::Element *elements(new(*pool) sig::Element[++signature.count]);
+ elements[0] = signature.elements[0];
+ memcpy(elements + 2, signature.elements + 1, sizeof(sig::Element) * (signature.count - 2));
+ signature.elements = elements;
+
+ elements[1].name = NULL;
+ elements[1].type = new(*pool) sig::Type();
+ elements[1].offset = _not(size_t);
+
+ memset(elements[1].type, 0, sizeof(sig::Type));
+ elements[1].type->primitive = sig::object_P;
+
+ JSObjectRef function(CYCastJSObject(context, value));
+ *reinterpret_cast<id *>(data) = CYMakeBlock(context, function, signature);
+ } break;
+