@@ -75,7 +75,11 @@ extension FFMSwift2JavaGenerator {
7575
7676/// Responsible for lowering Swift API to C API.
7777struct CdeclLowering {
78- var swiftStdlibTypes : SwiftStandardLibraryTypes
78+ var knownTypes : SwiftKnownTypes
79+
80+ init ( swiftStdlibTypes: SwiftStandardLibraryTypeDecls ) {
81+ self . knownTypes = SwiftKnownTypes ( decls: swiftStdlibTypes)
82+ }
7983
8084 /// Lower the given Swift function signature to a Swift @_cdecl function signature,
8185 /// which is C compatible, and the corresponding Java method signature.
@@ -149,11 +153,7 @@ struct CdeclLowering {
149153 SwiftParameter (
150154 convention: . byValue,
151155 parameterName: parameterName,
152- type: . nominal(
153- SwiftNominalType (
154- nominalTypeDecl: swiftStdlibTypes [ . unsafeRawPointer]
155- )
156- )
156+ type: knownTypes. unsafeRawPointer
157157 )
158158 ] ,
159159 conversion: . unsafeCastPointer( . placeholder, swiftType: instanceType)
@@ -173,10 +173,14 @@ struct CdeclLowering {
173173 // Typed pointers are mapped down to their raw forms in cdecl entry
174174 // points. These can be passed through directly.
175175 let isMutable = knownType == . unsafeMutablePointer
176- let rawPointerNominal = swiftStdlibTypes [ isMutable ? . unsafeMutableRawPointer : . unsafeRawPointer]
177- let paramType : SwiftType = . nominal( SwiftNominalType ( nominalTypeDecl: rawPointerNominal) )
178176 return LoweredParameter (
179- cdeclParameters: [ SwiftParameter ( convention: . byValue, parameterName: parameterName, type: paramType) ] ,
177+ cdeclParameters: [
178+ SwiftParameter (
179+ convention: . byValue,
180+ parameterName: parameterName,
181+ type: isMutable ? knownTypes. unsafeMutableRawPointer : knownTypes. unsafeRawPointer
182+ )
183+ ] ,
180184 conversion: . typedPointer( . placeholder, swiftType: genericArgs [ 0 ] )
181185 )
182186
@@ -186,17 +190,15 @@ struct CdeclLowering {
186190 }
187191 // Typed pointers are lowered to (raw-pointer, count) pair.
188192 let isMutable = knownType == . unsafeMutableBufferPointer
189- let rawPointerNominal = swiftStdlibTypes [ isMutable ? . unsafeMutableRawPointer : . unsafeRawPointer]
190-
191193 return LoweredParameter (
192194 cdeclParameters: [
193195 SwiftParameter (
194196 convention: . byValue, parameterName: " \( parameterName) _pointer " ,
195- type: . nominal ( SwiftNominalType ( nominalTypeDecl : rawPointerNominal ) )
197+ type: isMutable ? knownTypes . unsafeMutableRawPointer : knownTypes . unsafeRawPointer
196198 ) ,
197199 SwiftParameter (
198200 convention: . byValue, parameterName: " \( parameterName) _count " ,
199- type: . nominal ( SwiftNominalType ( nominalTypeDecl : swiftStdlibTypes [ . int] ) )
201+ type: knownTypes . int
200202 ) ,
201203 ] , conversion: . initialize(
202204 type,
@@ -221,12 +223,7 @@ struct CdeclLowering {
221223 SwiftParameter (
222224 convention: . byValue,
223225 parameterName: parameterName,
224- type: . nominal( SwiftNominalType (
225- nominalTypeDecl: swiftStdlibTypes. unsafePointerDecl,
226- genericArguments: [
227- . nominal( SwiftNominalType ( nominalTypeDecl: swiftStdlibTypes [ . int8] ) )
228- ]
229- ) )
226+ type: knownTypes. unsafePointer ( knownTypes. int8)
230227 )
231228 ] ,
232229 conversion: . initialize( type, arguments: [
@@ -243,15 +240,12 @@ struct CdeclLowering {
243240
244241 // Arbitrary nominal types are passed-in as an pointer.
245242 let isMutable = ( convention == . inout)
246- let rawPointerNominal = swiftStdlibTypes [ isMutable ? . unsafeMutableRawPointer : . unsafeRawPointer]
247- let parameterType : SwiftType = . nominal( SwiftNominalType ( nominalTypeDecl: rawPointerNominal) )
248-
249243 return LoweredParameter (
250244 cdeclParameters: [
251245 SwiftParameter (
252246 convention: . byValue,
253247 parameterName: parameterName,
254- type: parameterType
248+ type: isMutable ? knownTypes . unsafeMutableRawPointer : knownTypes . unsafeRawPointer
255249 ) ,
256250 ] ,
257251 conversion: . pointee( . typedPointer( . placeholder, swiftType: type) )
@@ -352,12 +346,10 @@ struct CdeclLowering {
352346 switch type {
353347 case . metatype:
354348 // 'unsafeBitcast(<result>, to: UnsafeRawPointer.self)' as 'UnsafeRawPointer'
355-
356- let resultType : SwiftType = . nominal( SwiftNominalType ( nominalTypeDecl: swiftStdlibTypes [ . unsafeRawPointer] ) )
357349 return LoweredResult (
358- cdeclResultType: resultType ,
350+ cdeclResultType: knownTypes . unsafeRawPointer ,
359351 cdeclOutParameters: [ ] ,
360- conversion: . unsafeCastPointer( . placeholder, swiftType: resultType )
352+ conversion: . unsafeCastPointer( . placeholder, swiftType: knownTypes . unsafeRawPointer )
361353 )
362354
363355 case . nominal( let nominal) :
@@ -367,8 +359,7 @@ struct CdeclLowering {
367359 case . unsafePointer, . unsafeMutablePointer:
368360 // Typed pointers are lowered to corresponding raw forms.
369361 let isMutable = knownType == . unsafeMutablePointer
370- let rawPointerNominal = swiftStdlibTypes [ isMutable ? . unsafeMutableRawPointer : . unsafeRawPointer]
371- let resultType : SwiftType = . nominal( SwiftNominalType ( nominalTypeDecl: rawPointerNominal) )
362+ let resultType : SwiftType = isMutable ? knownTypes. unsafeMutableRawPointer : knownTypes. unsafeRawPointer
372363 return LoweredResult (
373364 cdeclResultType: resultType,
374365 cdeclOutParameters: [ ] ,
@@ -378,11 +369,10 @@ struct CdeclLowering {
378369 case . unsafeBufferPointer, . unsafeMutableBufferPointer:
379370 // Typed pointers are lowered to (raw-pointer, count) pair.
380371 let isMutable = knownType == . unsafeMutableBufferPointer
381- let rawPointerType = swiftStdlibTypes [ isMutable ? . unsafeMutableRawPointer : . unsafeRawPointer]
382372 return try lowerResult (
383373 . tuple( [
384- . nominal ( SwiftNominalType ( nominalTypeDecl : rawPointerType ) ) ,
385- . nominal ( SwiftNominalType ( nominalTypeDecl : swiftStdlibTypes [ . int] ) )
374+ isMutable ? knownTypes . unsafeMutableRawPointer : knownTypes . unsafeRawPointer ,
375+ knownTypes . int
386376 ] ) ,
387377 outParameterName: outParameterName
388378 )
@@ -407,7 +397,7 @@ struct CdeclLowering {
407397 SwiftParameter (
408398 convention: . byValue,
409399 parameterName: outParameterName,
410- type: . nominal ( SwiftNominalType ( nominalTypeDecl : swiftStdlibTypes [ . unsafeMutableRawPointer] ) )
400+ type: knownTypes . unsafeMutableRawPointer
411401 )
412402 ] ,
413403 conversion: . populatePointer( name: outParameterName, assumingType: type, to: . placeholder)
@@ -431,10 +421,7 @@ struct CdeclLowering {
431421 let parameter = SwiftParameter (
432422 convention: . byValue,
433423 parameterName: parameterName,
434- type: . nominal( SwiftNominalType (
435- nominalTypeDecl: swiftStdlibTypes. unsafeMutablePointerDecl,
436- genericArguments: [ lowered. cdeclResultType]
437- ) )
424+ type: knownTypes. unsafeMutablePointer ( lowered. cdeclResultType)
438425 )
439426 parameters. append ( parameter)
440427 conversions. append ( . populatePointer(
@@ -551,7 +538,7 @@ extension LoweredFunctionSignature {
551538 cName: String ,
552539 swiftAPIName: String ,
553540 as apiKind: SwiftAPIKind ,
554- stdlibTypes: SwiftStandardLibraryTypes
541+ stdlibTypes: SwiftStandardLibraryTypeDecls
555542 ) -> FunctionDeclSyntax {
556543
557544 let cdeclParams = allLoweredParameters. map ( \. description) . joined ( separator: " , " )
0 commit comments