+void Structor_(apr_pool_t *pool, const char *name, const char *types, sig::Type *type) {
+ CYPoolTry {
+ if (NSMutableArray *entry = [[Bridge_ objectAtIndex:2] objectForKey:[NSString stringWithUTF8String:name]]) {
+ switch ([[entry objectAtIndex:0] intValue]) {
+ case 0:
+ static CYPool Pool_;
+ sig::Parse(Pool_, &type->data.signature, [[entry objectAtIndex:1] UTF8String], &Structor_);
+ break;
+ }
+ }
+ } CYPoolCatch()
+}
+
+struct Functor_privateData :
+ Pointer_privateData
+{
+ sig::Signature signature_;
+ ffi_cif cif_;
+
+ Functor_privateData(const char *type, void (*value)()) :
+ Pointer_privateData(reinterpret_cast<void *>(value))
+ {
+ sig::Parse(pool_, &signature_, type, &Structor_);
+ sig::sig_ffi_cif(pool_, &sig::ObjectiveC, &signature_, &cif_);
+ }
+};
+
+struct ffoData :
+ Functor_privateData
+{
+ JSContextRef context_;
+ JSObjectRef function_;
+
+ ffoData(const char *type) :
+ Functor_privateData(type, NULL)
+ {
+ }
+};
+