@@ -27,6 +27,8 @@ extension BridgedNullable {
27
27
28
28
extension BridgedSourceLoc : /*@retroactive*/ swiftASTGen . BridgedNullable { }
29
29
extension BridgedIdentifier : /*@retroactive*/ swiftASTGen . BridgedNullable { }
30
+ extension BridgedNullableDeclAttribute : /*@retroactive*/ swiftASTGen . BridgedNullable { }
31
+ extension BridgedNullableDecl : /*@retroactive*/ swiftASTGen . BridgedNullable { }
30
32
extension BridgedNullableExpr : /*@retroactive*/ swiftASTGen . BridgedNullable { }
31
33
extension BridgedNullableStmt : /*@retroactive*/ swiftASTGen . BridgedNullable { }
32
34
extension BridgedNullableTypeRepr : /*@retroactive*/ swiftASTGen . BridgedNullable { }
@@ -37,6 +39,7 @@ extension BridgedNullableParameterList: /*@retroactive*/ swiftASTGen.BridgedNull
37
39
extension BridgedNullablePatternBindingInitializer : /*@retroactive*/ swiftASTGen . BridgedNullable { }
38
40
extension BridgedNullablePatternBindingDecl : /*@retroactive*/ swiftASTGen . BridgedNullable { }
39
41
extension BridgedNullableVarDecl : /*@retroactive*/ swiftASTGen . BridgedNullable { }
42
+ extension BridgedNullableABIAttr : /*@retroactive*/ swiftASTGen . BridgedNullable { }
40
43
41
44
extension BridgedIdentifier : /*@retroactive*/ Swift . Equatable {
42
45
public static func == ( lhs: Self , rhs: Self ) -> Bool {
@@ -70,6 +73,12 @@ extension BridgedHasNullable {
70
73
extension BridgedStmt : BridgedHasNullable {
71
74
typealias Nullable = BridgedNullableStmt
72
75
}
76
+ extension BridgedDeclAttribute : BridgedHasNullable {
77
+ typealias Nullable = BridgedNullableDeclAttribute
78
+ }
79
+ extension BridgedDecl : BridgedHasNullable {
80
+ typealias Nullable = BridgedNullableDecl
81
+ }
73
82
extension BridgedExpr : BridgedHasNullable {
74
83
typealias Nullable = BridgedNullableExpr
75
84
}
@@ -97,6 +106,9 @@ extension BridgedPatternBindingDecl: BridgedHasNullable {
97
106
extension BridgedVarDecl : BridgedHasNullable {
98
107
typealias Nullable = BridgedNullableVarDecl
99
108
}
109
+ extension BridgedABIAttr : BridgedHasNullable {
110
+ typealias Nullable = BridgedNullableABIAttr
111
+ }
100
112
101
113
public extension BridgedSourceLoc {
102
114
/// Form a source location at the given absolute position in `buffer`.
@@ -249,6 +261,56 @@ extension BridgedSourceRange {
249
261
}
250
262
}
251
263
264
+ extension BridgedPatternBindingDecl {
265
+ var patterns : [ BridgedPattern ] {
266
+ return ( 0 ..< patternCount) . map ( pattern ( at: ) )
267
+ }
268
+ }
269
+
270
+ extension BridgedPattern {
271
+ private enum FetchVarDeclsError : Error {
272
+ case insufficientCapacity( Int )
273
+ }
274
+
275
+ private func fetchVarDecls( capacity: Int ) throws -> [ BridgedVarDecl ] {
276
+ return try Array ( unsafeUninitializedCapacity: capacity) { buffer, initializedCount in
277
+ let fullCount = self . unsafeFetchVarDecls (
278
+ into: buffer. baseAddress,
279
+ capacity: buffer. count
280
+ )
281
+
282
+ guard fullCount <= buffer. count else {
283
+ throw FetchVarDeclsError . insufficientCapacity ( fullCount)
284
+ }
285
+
286
+ // `unsafeFetchVarDecls` writes nothing if `fullCount` > `capacity`, so
287
+ // it's correct to put this after the `throw`.
288
+ initializedCount = fullCount
289
+ }
290
+ }
291
+
292
+ var varDecls : [ BridgedVarDecl ] {
293
+ do {
294
+ return try fetchVarDecls ( capacity: 8 ) // "probably big enough" guess
295
+ }
296
+ catch FetchVarDeclsError . insufficientCapacity( let neededCapacity) {
297
+ return try ! fetchVarDecls ( capacity: neededCapacity)
298
+ }
299
+ catch {
300
+ fatalError ( " Unknown error \( error) " )
301
+ }
302
+ }
303
+ }
304
+
305
+ extension BridgedDeclAttributes {
306
+ var attrs : UnfoldSequence < BridgedDeclAttribute , BridgedNullableDeclAttribute > {
307
+ return sequence ( state: nil ) { prior in
308
+ prior = self . attr ( after: prior)
309
+ return BridgedDeclAttribute ( prior)
310
+ }
311
+ }
312
+ }
313
+
252
314
/// Helper collection type that lazily concatenates two collections.
253
315
struct ConcatCollection < C1: Collection , C2: Collection > where C1. Element == C2 . Element {
254
316
let c1 : C1
@@ -290,3 +352,53 @@ extension ConcatCollection: LazyCollectionProtocol {
290
352
}
291
353
}
292
354
}
355
+
356
+ enum BridgedNominalTypeOrExtensionDecl {
357
+ case nominalType( BridgedNominalTypeDecl )
358
+ case `extension`( BridgedExtensionDecl )
359
+
360
+ var asDeclContext : BridgedDeclContext {
361
+ switch self {
362
+ case . nominalType( let decl) :
363
+ return decl. asDeclContext
364
+ case . extension( let decl) :
365
+ return decl. asDeclContext
366
+ }
367
+ }
368
+
369
+ func setParsedMembers( _ members: BridgedArrayRef ) {
370
+ switch self {
371
+ case . nominalType( let decl) :
372
+ decl. setParsedMembers ( members)
373
+ case . extension( let decl) :
374
+ decl. setParsedMembers ( members)
375
+ }
376
+ }
377
+
378
+ var asDecl : BridgedDecl {
379
+ switch self {
380
+ case . nominalType( let decl) :
381
+ decl. asDecl
382
+ case . extension( let decl) :
383
+ decl. asDecl
384
+ }
385
+ }
386
+
387
+ var asNominalTypeDecl : BridgedNominalTypeDecl ? {
388
+ switch self {
389
+ case . nominalType( let decl) :
390
+ decl
391
+ case . extension:
392
+ nil
393
+ }
394
+ }
395
+
396
+ var asExtensionDecl : BridgedExtensionDecl ? {
397
+ switch self {
398
+ case . nominalType:
399
+ nil
400
+ case . extension( let decl) :
401
+ decl
402
+ }
403
+ }
404
+ }
0 commit comments