File tree Expand file tree Collapse file tree 2 files changed +61
-0
lines changed Expand file tree Collapse file tree 2 files changed +61
-0
lines changed Original file line number Diff line number Diff line change @@ -2284,3 +2284,35 @@ public struct WrapperMacro: PeerMacro {
2284
2284
[ ]
2285
2285
}
2286
2286
}
2287
+
2288
+ public struct AddDeinit : MemberMacro {
2289
+ public static func expansion(
2290
+ of node: AttributeSyntax ,
2291
+ providingMembersOf decl: some DeclGroupSyntax ,
2292
+ in context: some MacroExpansionContext
2293
+ ) throws -> [ DeclSyntax ] {
2294
+ return [
2295
+ """
2296
+ deinit {
2297
+ print( " deinit was called " )
2298
+ }
2299
+ """
2300
+ ]
2301
+ }
2302
+ }
2303
+
2304
+ public struct AddSubscript : MemberMacro {
2305
+ public static func expansion(
2306
+ of node: AttributeSyntax ,
2307
+ providingMembersOf decl: some DeclGroupSyntax ,
2308
+ in context: some MacroExpansionContext
2309
+ ) throws -> [ DeclSyntax ] {
2310
+ return [
2311
+ """
2312
+ subscript(unchecked index: Int) -> String {
2313
+ return " \\ (index) "
2314
+ }
2315
+ """
2316
+ ]
2317
+ }
2318
+ }
Original file line number Diff line number Diff line change @@ -112,3 +112,32 @@ struct S2 {
112
112
}
113
113
}
114
114
#endif
115
+
116
+ @attached (
117
+ member,
118
+ names: named ( deinit)
119
+ )
120
+ macro addDeinit( ) = #externalMacro( module: " MacroDefinition " , type: " AddDeinit " )
121
+
122
+ @attached (
123
+ member,
124
+ names: named ( subscript ( unchecked: ) )
125
+ )
126
+ macro addSubscript( ) = #externalMacro( module: " MacroDefinition " , type: " AddSubscript " )
127
+
128
+ @addDeinit
129
+ @addSubscript
130
+ class C2 {
131
+ init ( ) {
132
+ print ( " Created a C2 " )
133
+ }
134
+ }
135
+
136
+ func testC2( ) {
137
+ // CHECK: Created a C2
138
+ let c2 = C2 ( )
139
+ // CHECK: 17
140
+ print ( c2 [ unchecked: 17 ] )
141
+ // CHECK: deinit was called
142
+ }
143
+ testC2 ( )
You can’t perform that action at this time.
0 commit comments