blob: ff397d65cda03ffb7815e0ecc780aeddf14e586f [file] [log] [blame] [edit]
#include <stdint.h>
#import <Foundation/Foundation.h>
#import <objc/message.h>
#import "foundation.h"
#import "input_stream_adapter.h"
#import "protocol.h"
#if !__has_feature(objc_arc)
#error "This file must be compiled with ARC enabled"
#endif
typedef struct {
int64_t version;
void* (*newWaiter)(void);
void (*awaitWaiter)(void*);
void* (*currentIsolate)(void);
void (*enterIsolate)(void*);
void (*exitIsolate)(void);
int64_t (*getMainPortId)(void);
bool (*getCurrentThreadOwnsIsolate)(int64_t);
} DOBJC_Context;
id objc_retainBlock(id);
#define BLOCKING_BLOCK_IMPL(ctx, BLOCK_SIG, INVOKE_DIRECT, INVOKE_LISTENER) \
assert(ctx->version >= 1); \
void* targetIsolate = ctx->currentIsolate(); \
int64_t targetPort = ctx->getMainPortId == NULL ? 0 : ctx->getMainPortId(); \
return BLOCK_SIG { \
void* currentIsolate = ctx->currentIsolate(); \
bool mayEnterIsolate = \
currentIsolate == NULL && \
ctx->getCurrentThreadOwnsIsolate != NULL && \
ctx->getCurrentThreadOwnsIsolate(targetPort); \
if (currentIsolate == targetIsolate || mayEnterIsolate) { \
if (mayEnterIsolate) { \
ctx->enterIsolate(targetIsolate); \
} \
INVOKE_DIRECT; \
if (mayEnterIsolate) { \
ctx->exitIsolate(); \
} \
} else { \
void* waiter = ctx->newWaiter(); \
INVOKE_LISTENER; \
ctx->awaitWaiter(waiter); \
} \
};
Protocol* _ObjectiveCBindings_NSCoding(void) { return @protocol(NSCoding); }
Protocol* _ObjectiveCBindings_NSCopying(void) { return @protocol(NSCopying); }
Protocol* _ObjectiveCBindings_NSFastEnumeration(void) { return @protocol(NSFastEnumeration); }
Protocol* _ObjectiveCBindings_NSItemProviderReading(void) { return @protocol(NSItemProviderReading); }
Protocol* _ObjectiveCBindings_NSItemProviderWriting(void) { return @protocol(NSItemProviderWriting); }
Protocol* _ObjectiveCBindings_NSMutableCopying(void) { return @protocol(NSMutableCopying); }
Protocol* _ObjectiveCBindings_NSObject(void) { return @protocol(NSObject); }
Protocol* _ObjectiveCBindings_NSSecureCoding(void) { return @protocol(NSSecureCoding); }
Protocol* _ObjectiveCBindings_NSStreamDelegate(void) { return @protocol(NSStreamDelegate); }
typedef id (^ProtocolTrampoline)(void * sel);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_1mbt9g9(id target, void * sel) {
return ((ProtocolTrampoline)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
}
typedef NSItemProviderRepresentationVisibility (^ProtocolTrampoline_1)(void * sel, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
NSItemProviderRepresentationVisibility _ObjectiveCBindings_protocolTrampoline_1ldqghh(id target, void * sel, id arg1) {
return ((ProtocolTrampoline_1)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
typedef unsigned long (^ProtocolTrampoline_2)(void * sel);
__attribute__((visibility("default"))) __attribute__((used))
unsigned long _ObjectiveCBindings_protocolTrampoline_1ckyi24(id target, void * sel) {
return ((ProtocolTrampoline_2)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
}
typedef unsigned long (^ProtocolTrampoline_3)(void * sel, NSFastEnumerationState * arg1, id * arg2, unsigned long arg3);
__attribute__((visibility("default"))) __attribute__((used))
unsigned long _ObjectiveCBindings_protocolTrampoline_17ap02x(id target, void * sel, NSFastEnumerationState * arg1, id * arg2, unsigned long arg3) {
return ((ProtocolTrampoline_3)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2, arg3);
}
typedef struct _NSZone * (^ProtocolTrampoline_4)(void * sel);
__attribute__((visibility("default"))) __attribute__((used))
struct _NSZone * _ObjectiveCBindings_protocolTrampoline_1a8cl66(id target, void * sel) {
return ((ProtocolTrampoline_4)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
}
typedef BOOL (^ProtocolTrampoline_5)(void * sel);
__attribute__((visibility("default"))) __attribute__((used))
BOOL _ObjectiveCBindings_protocolTrampoline_e3qsqz(id target, void * sel) {
return ((ProtocolTrampoline_5)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
}
typedef BOOL (^ProtocolTrampoline_6)(void * sel, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
BOOL _ObjectiveCBindings_protocolTrampoline_3su7tt(id target, void * sel, id arg1) {
return ((ProtocolTrampoline_6)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
typedef BOOL (^ProtocolTrampoline_7)(void * sel, struct objc_selector * arg1);
__attribute__((visibility("default"))) __attribute__((used))
BOOL _ObjectiveCBindings_protocolTrampoline_w1e3k0(id target, void * sel, struct objc_selector * arg1) {
return ((ProtocolTrampoline_7)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
typedef void (^ListenerTrampoline)(id arg0, id arg1, id arg2);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline _ObjectiveCBindings_wrapListenerBlock_1b3bb6a(ListenerTrampoline block) NS_RETURNS_RETAINED {
return ^void(id arg0, id arg1, id arg2) {
objc_retainBlock(block);
block(objc_retainBlock(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
};
}
typedef void (^BlockingTrampoline)(void * waiter, id arg0, id arg1, id arg2);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline _ObjectiveCBindings_wrapBlockingBlock_1b3bb6a(
BlockingTrampoline block, BlockingTrampoline listenerBlock,
DOBJC_Context* ctx) NS_RETURNS_RETAINED {
BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, id arg1, id arg2), {
objc_retainBlock(block);
block(nil, objc_retainBlock(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
}, {
objc_retainBlock(listenerBlock);
listenerBlock(waiter, objc_retainBlock(arg0), (__bridge id)(__bridge_retained void*)(arg1), (__bridge id)(__bridge_retained void*)(arg2));
});
}
typedef void (^ListenerTrampoline_1)(void * arg0);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline_1 _ObjectiveCBindings_wrapListenerBlock_ovsamd(ListenerTrampoline_1 block) NS_RETURNS_RETAINED {
return ^void(void * arg0) {
objc_retainBlock(block);
block(arg0);
};
}
typedef void (^BlockingTrampoline_1)(void * waiter, void * arg0);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline_1 _ObjectiveCBindings_wrapBlockingBlock_ovsamd(
BlockingTrampoline_1 block, BlockingTrampoline_1 listenerBlock,
DOBJC_Context* ctx) NS_RETURNS_RETAINED {
BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0), {
objc_retainBlock(block);
block(nil, arg0);
}, {
objc_retainBlock(listenerBlock);
listenerBlock(waiter, arg0);
});
}
typedef void (^ProtocolTrampoline_8)(void * sel);
__attribute__((visibility("default"))) __attribute__((used))
void _ObjectiveCBindings_protocolTrampoline_ovsamd(id target, void * sel) {
return ((ProtocolTrampoline_8)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel);
}
typedef void (^ListenerTrampoline_2)(void * arg0, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline_2 _ObjectiveCBindings_wrapListenerBlock_18v1jvf(ListenerTrampoline_2 block) NS_RETURNS_RETAINED {
return ^void(void * arg0, id arg1) {
objc_retainBlock(block);
block(arg0, (__bridge id)(__bridge_retained void*)(arg1));
};
}
typedef void (^BlockingTrampoline_2)(void * waiter, void * arg0, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline_2 _ObjectiveCBindings_wrapBlockingBlock_18v1jvf(
BlockingTrampoline_2 block, BlockingTrampoline_2 listenerBlock,
DOBJC_Context* ctx) NS_RETURNS_RETAINED {
BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0, id arg1), {
objc_retainBlock(block);
block(nil, arg0, (__bridge id)(__bridge_retained void*)(arg1));
}, {
objc_retainBlock(listenerBlock);
listenerBlock(waiter, arg0, (__bridge id)(__bridge_retained void*)(arg1));
});
}
typedef void (^ProtocolTrampoline_9)(void * sel, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
void _ObjectiveCBindings_protocolTrampoline_18v1jvf(id target, void * sel, id arg1) {
return ((ProtocolTrampoline_9)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
typedef void (^ListenerTrampoline_3)(void * arg0, id arg1, NSStreamEvent arg2);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline_3 _ObjectiveCBindings_wrapListenerBlock_hoampi(ListenerTrampoline_3 block) NS_RETURNS_RETAINED {
return ^void(void * arg0, id arg1, NSStreamEvent arg2) {
objc_retainBlock(block);
block(arg0, (__bridge id)(__bridge_retained void*)(arg1), arg2);
};
}
typedef void (^BlockingTrampoline_3)(void * waiter, void * arg0, id arg1, NSStreamEvent arg2);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline_3 _ObjectiveCBindings_wrapBlockingBlock_hoampi(
BlockingTrampoline_3 block, BlockingTrampoline_3 listenerBlock,
DOBJC_Context* ctx) NS_RETURNS_RETAINED {
BLOCKING_BLOCK_IMPL(ctx, ^void(void * arg0, id arg1, NSStreamEvent arg2), {
objc_retainBlock(block);
block(nil, arg0, (__bridge id)(__bridge_retained void*)(arg1), arg2);
}, {
objc_retainBlock(listenerBlock);
listenerBlock(waiter, arg0, (__bridge id)(__bridge_retained void*)(arg1), arg2);
});
}
typedef void (^ProtocolTrampoline_10)(void * sel, id arg1, NSStreamEvent arg2);
__attribute__((visibility("default"))) __attribute__((used))
void _ObjectiveCBindings_protocolTrampoline_hoampi(id target, void * sel, id arg1, NSStreamEvent arg2) {
return ((ProtocolTrampoline_10)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2);
}
typedef void (^ListenerTrampoline_4)(id arg0, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline_4 _ObjectiveCBindings_wrapListenerBlock_pfv6jd(ListenerTrampoline_4 block) NS_RETURNS_RETAINED {
return ^void(id arg0, id arg1) {
objc_retainBlock(block);
block((__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1));
};
}
typedef void (^BlockingTrampoline_4)(void * waiter, id arg0, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
ListenerTrampoline_4 _ObjectiveCBindings_wrapBlockingBlock_pfv6jd(
BlockingTrampoline_4 block, BlockingTrampoline_4 listenerBlock,
DOBJC_Context* ctx) NS_RETURNS_RETAINED {
BLOCKING_BLOCK_IMPL(ctx, ^void(id arg0, id arg1), {
objc_retainBlock(block);
block(nil, (__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1));
}, {
objc_retainBlock(listenerBlock);
listenerBlock(waiter, (__bridge id)(__bridge_retained void*)(arg0), (__bridge id)(__bridge_retained void*)(arg1));
});
}
typedef id (^ProtocolTrampoline_11)(void * sel, id arg1);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_xr62hr(id target, void * sel, id arg1) {
return ((ProtocolTrampoline_11)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
typedef id (^ProtocolTrampoline_12)(void * sel, id arg1, id arg2, id * arg3);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_10z9f5k(id target, void * sel, id arg1, id arg2, id * arg3) {
return ((ProtocolTrampoline_12)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2, arg3);
}
typedef id (^ProtocolTrampoline_13)(void * sel, struct _NSZone * arg1);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_18nsem0(id target, void * sel, struct _NSZone * arg1) {
return ((ProtocolTrampoline_13)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
typedef id (^ProtocolTrampoline_14)(void * sel, struct objc_selector * arg1);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_50as9u(id target, void * sel, struct objc_selector * arg1) {
return ((ProtocolTrampoline_14)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1);
}
typedef id (^ProtocolTrampoline_15)(void * sel, struct objc_selector * arg1, id arg2);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_1mllhpc(id target, void * sel, struct objc_selector * arg1, id arg2) {
return ((ProtocolTrampoline_15)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2);
}
typedef id (^ProtocolTrampoline_16)(void * sel, struct objc_selector * arg1, id arg2, id arg3);
__attribute__((visibility("default"))) __attribute__((used))
id _ObjectiveCBindings_protocolTrampoline_c7gk2u(id target, void * sel, struct objc_selector * arg1, id arg2, id arg3) {
return ((ProtocolTrampoline_16)((id (*)(id, SEL, SEL))objc_msgSend)(target, @selector(getDOBJCDartProtocolMethodForSelector:), sel))(sel, arg1, arg2, arg3);
}
#undef BLOCKING_BLOCK_IMPL