@@ -27,6 +27,8 @@ extension BridgedNullable {
2727
2828extension BridgedSourceLoc : /*@retroactive*/ swiftASTGen . BridgedNullable { }
2929extension BridgedIdentifier : /*@retroactive*/ swiftASTGen . BridgedNullable { }
30+ extension BridgedNullableDeclAttribute : /*@retroactive*/ swiftASTGen . BridgedNullable { }
31+ extension BridgedNullableDecl : /*@retroactive*/ swiftASTGen . BridgedNullable { }
3032extension BridgedNullableExpr : /*@retroactive*/ swiftASTGen . BridgedNullable { }
3133extension BridgedNullableStmt : /*@retroactive*/ swiftASTGen . BridgedNullable { }
3234extension BridgedNullableTypeRepr : /*@retroactive*/ swiftASTGen . BridgedNullable { }
@@ -38,6 +40,7 @@ extension BridgedNullablePatternBindingInitializer: /*@retroactive*/ swiftASTGen
3840extension BridgedNullableArgumentList : /*@retroactive*/ swiftASTGen . BridgedNullable { }
3941extension BridgedNullablePatternBindingDecl : /*@retroactive*/ swiftASTGen . BridgedNullable { }
4042extension BridgedNullableVarDecl : /*@retroactive*/ swiftASTGen . BridgedNullable { }
43+ extension BridgedNullableABIAttr : /*@retroactive*/ swiftASTGen . BridgedNullable { }
4144
4245extension BridgedIdentifier : /*@retroactive*/ Swift . Equatable {
4346 public static func == ( lhs: Self , rhs: Self ) -> Bool {
@@ -71,6 +74,12 @@ extension BridgedHasNullable {
7174extension BridgedStmt : BridgedHasNullable {
7275 typealias Nullable = BridgedNullableStmt
7376}
77+ extension BridgedDeclAttribute : BridgedHasNullable {
78+ typealias Nullable = BridgedNullableDeclAttribute
79+ }
80+ extension BridgedDecl : BridgedHasNullable {
81+ typealias Nullable = BridgedNullableDecl
82+ }
7483extension BridgedExpr : BridgedHasNullable {
7584 typealias Nullable = BridgedNullableExpr
7685}
@@ -101,6 +110,9 @@ extension BridgedPatternBindingDecl: BridgedHasNullable {
101110extension BridgedVarDecl : BridgedHasNullable {
102111 typealias Nullable = BridgedNullableVarDecl
103112}
113+ extension BridgedABIAttr : BridgedHasNullable {
114+ typealias Nullable = BridgedNullableABIAttr
115+ }
104116
105117public extension BridgedSourceLoc {
106118 /// Form a source location at the given absolute position in `buffer`.
@@ -253,6 +265,56 @@ extension BridgedSourceRange {
253265 }
254266}
255267
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+
256318/// Helper collection type that lazily concatenates two collections.
257319struct ConcatCollection < C1: Collection , C2: Collection > where C1. Element == C2 . Element {
258320 let c1 : C1
@@ -294,3 +356,53 @@ extension ConcatCollection: LazyCollectionProtocol {
294356 }
295357 }
296358}
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