File: EffectfulProperties.h

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (78 lines) | stat: -rw-r--r-- 2,984 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
@import Foundation;

#define MAIN_ACTOR __attribute__((__swift_attr__("@MainActor")))
#define ASYNC_NAME(X) __attribute__((swift_async_name(X)));

#pragma clang assume_nonnull begin

@interface EffProps : NSObject

/////
// decls imported as an effectful property

-(void)getDogWithCompletion:(void (^)(NSObject*))completionHandler
  ASYNC_NAME("getter:doggo()");

-(void)obtainCat:(void (^)(NSObject* _Nullable_result, NSError* _Nullable))completionHandler
  ASYNC_NAME("getter:catto()");

-(void)checkAvailabilityWithCompletionHandler:(void (^)(BOOL isAvailable))completionHandler
  ASYNC_NAME("getter:available()");

// FIXME: this does not raise an error, and generates two identical properties!
// -(void)anotherExampleWithCompletionBlock:(void (^)(NSString *))block
//   ASYNC_NAME("getter:manifestedString()");
// -(void)finalExampleWithReplyTo:(void (^)(NSString *))block
//   ASYNC_NAME("getter:manifestedString()");

-(void)returnNothingWithCompletion:(void (^)(void))completionHandler
  ASYNC_NAME("getter:touch()");

-(void)nullableHandler:(void (^ _Nullable)(NSString *))completion
ASYNC_NAME("getter:fromNullableHandler()");

-(void)getMainDog:(MAIN_ACTOR void (^)(NSString *))completion
ASYNC_NAME("getter:mainDogProp()");
-(void)regularMainDog:(MAIN_ACTOR void (^)(NSString *))completion;

@end

@interface NotEffProps : NSObject

/////
// decls that are _not_ imported as an effectful property

// FIXME: even prior to objc imported effectful properties, this triggers an assert.
// -(NSObject*)getGreenDog __attribute__((swift_name("getter:greenDoggie()")));

-(void)doSomethingSlow:(NSString *)operation completionHandler:(void (^)(NSInteger))handler
  ASYNC_NAME("getter:slow(self:)");

-(void)doSomethingDangerous:(NSString *)operation completionHandler:(void (^ _Nullable)(NSString *_Nullable, NSError * _Nullable))handler 
  ASYNC_NAME("getter:slowAndDanger(self:)");

// This means it can throw in two ways: produce an error synchronously, returning
// false and put error in out parameter. Or return true and error/success goes to completion handler.
// NOTE: no need to support this, but make sure we have a test case.
-(BOOL)getChicken:(void (^)(NSObject* _Nullable_result, NSError* _Nullable))completionHandler
       error: (NSError**)error
  ASYNC_NAME("getter:chicken()");


// plain throws, with `swift_name`. should be ignored and imported like before.
-(NSObject* _Nullable)getCow1:(NSError**)error
  __attribute__((swift_name("getter:noCow1()")));

// plain throws, with `swift_async_name`. Sensible to support in the future, but should be ignored.
-(NSObject* _Nullable)getCow2:(NSError**)error ASYNC_NAME("getter:noCow2()");

@end

// make sure import-as-member does not also get turned into an effectful prop

struct __attribute__((swift_name("Struct1"))) IAMStruct1 {};

extern double EffPropGetDogWithCompletion(const struct Struct1 *s, void (^myBlock)(NSObject*))
    ASYNC_NAME("getter:Struct1.dog(self:)");

#pragma clang assume_nonnull end