| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| #import <Foundation/NSObject.h> | |
| #import <Foundation/NSString.h> | |
| #import <Foundation/NSThread.h> | |
| void objc_autoreleasePoolPop(void *pool); | |
| void *objc_autoreleasePoolPush(); | |
| struct Vec2 { | |
| double x; | |
| double y; | |
| }; | |
| typedef struct { | |
| double x; | |
| double y; | |
| double z; | |
| double w; | |
| } Vec4; | |
| @interface DummyObject : NSObject { | |
| int32_t* counter; | |
| } | |
| + (instancetype)newWithCounter:(int32_t*)_counter; | |
| - (instancetype)initWithCounter:(int32_t*)_counter; | |
| - (void)setCounter:(int32_t*)_counter; | |
| - (void)dealloc; | |
| @end | |
| typedef int32_t (^IntBlock)(int32_t); | |
| typedef float (^FloatBlock)(float); | |
| typedef double (^DoubleBlock)(double); | |
| typedef Vec4 (^Vec4Block)(Vec4); | |
| typedef void (^VoidBlock)(); | |
| typedef void (^SelectorBlock)(SEL); | |
| typedef DummyObject* (^ObjectBlock)(DummyObject*); | |
| typedef DummyObject* _Nullable (^NullableObjectBlock)(DummyObject* _Nullable); | |
| typedef NSString* _Nullable (^NullableStringBlock)(NSString* _Nullable); | |
| typedef IntBlock (^BlockBlock)(IntBlock); | |
| typedef void (^ListenerBlock)(IntBlock); | |
| typedef void (^ObjectListenerBlock)(DummyObject*); | |
| typedef void (^NullableListenerBlock)(DummyObject* _Nullable); | |
| typedef void (^StructListenerBlock)(struct Vec2, Vec4, NSObject*); | |
| typedef void (^NSStringListenerBlock)(NSString*); | |
| typedef void (^NoTrampolineListenerBlock)(int32_t, Vec4, const char*); | |
| typedef void (^IntPtrBlock)(int32_t*); | |
| typedef void (^ResultBlock)(int32_t); | |
| // Wrapper around a block, so that our Dart code can test creating and invoking | |
| // blocks in Objective C code. | |
| @interface BlockTester : NSObject { | |
| __strong IntBlock myBlock; | |
| __strong ObjectListenerBlock myListener; | |
| } | |
| + (void)setup:(void*)apiData; | |
| + (BlockTester*)newFromBlock:(IntBlock)block; | |
| + (BlockTester*)newFromMultiplier:(int32_t)mult; | |
| + (BlockTester*)newFromListener:(ObjectListenerBlock)block; | |
| - (int32_t)call:(int32_t)x; | |
| - (IntBlock)getBlock NS_RETURNS_RETAINED; | |
| - (void)pokeBlock; | |
| + (void)callOnSameThread:(VoidBlock)block; | |
| + (void)callOnSameThreadOutsideIsolate:(VoidBlock)block; | |
| + (NSThread*)callOnNewThread:(VoidBlock)block NS_RETURNS_RETAINED; | |
| + (NSThread*)callWithBlockOnNewThread:(ListenerBlock)block NS_RETURNS_RETAINED; | |
| + (float)callFloatBlock:(FloatBlock)block; | |
| + (double)callDoubleBlock:(DoubleBlock)block; | |
| + (Vec4)callVec4Block:(Vec4Block)block; | |
| + (void)callSelectorBlock:(SelectorBlock)block; | |
| + (DummyObject*)callObjectBlock:(ObjectBlock)block NS_RETURNS_RETAINED; | |
| + (nullable DummyObject*)callNullableObjectBlock:(NullableObjectBlock)block | |
| NS_RETURNS_RETAINED; | |
| + (nullable NSString*)callNullableStringBlock:(NullableStringBlock)block | |
| NS_RETURNS_RETAINED; | |
| + (void)callListener:(ListenerBlock)block; | |
| + (void)callObjectListener:(ObjectListenerBlock)block; | |
| + (void)callNullableListener:(NullableListenerBlock)block; | |
| + (void)callStructListener:(StructListenerBlock)block; | |
| + (void)callNSStringListener:(NSStringListenerBlock)block x:(int32_t)x; | |
| + (void)callNoTrampolineListener:(NoTrampolineListenerBlock)block; | |
| + (IntBlock)newBlock:(BlockBlock)block withMult:(int)mult NS_RETURNS_RETAINED; | |
| + (BlockBlock)newBlockBlock:(int)mult NS_RETURNS_RETAINED; | |
| - (void)invokeAndReleaseListenerOnNewThread; | |
| - (void)invokeAndReleaseListener:(_Nullable id)_; | |
| + (void)blockingBlockTest:(IntPtrBlock)blockingBlock | |
| resultBlock:(ResultBlock)resultBlock; | |
| @end |