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