@@ -75,7 +75,11 @@ extension FFMSwift2JavaGenerator {
75
75
76
76
/// Responsible for lowering Swift API to C API.
77
77
struct CdeclLowering {
78
- var swiftStdlibTypes : SwiftStandardLibraryTypes
78
+ var knownTypes : SwiftKnownTypes
79
+
80
+ init ( swiftStdlibTypes: SwiftStandardLibraryTypeDecls ) {
81
+ self . knownTypes = SwiftKnownTypes ( decls: swiftStdlibTypes)
82
+ }
79
83
80
84
/// Lower the given Swift function signature to a Swift @_cdecl function signature,
81
85
/// which is C compatible, and the corresponding Java method signature.
@@ -149,11 +153,7 @@ struct CdeclLowering {
149
153
SwiftParameter (
150
154
convention: . byValue,
151
155
parameterName: parameterName,
152
- type: . nominal(
153
- SwiftNominalType (
154
- nominalTypeDecl: swiftStdlibTypes [ . unsafeRawPointer]
155
- )
156
- )
156
+ type: knownTypes. unsafeRawPointer
157
157
)
158
158
] ,
159
159
conversion: . unsafeCastPointer( . placeholder, swiftType: instanceType)
@@ -173,10 +173,14 @@ struct CdeclLowering {
173
173
// Typed pointers are mapped down to their raw forms in cdecl entry
174
174
// points. These can be passed through directly.
175
175
let isMutable = knownType == . unsafeMutablePointer
176
- let rawPointerNominal = swiftStdlibTypes [ isMutable ? . unsafeMutableRawPointer : . unsafeRawPointer]
177
- let paramType : SwiftType = . nominal( SwiftNominalType ( nominalTypeDecl: rawPointerNominal) )
178
176
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
+ ] ,
180
184
conversion: . typedPointer( . placeholder, swiftType: genericArgs [ 0 ] )
181
185
)
182
186
@@ -186,17 +190,15 @@ struct CdeclLowering {
186
190
}
187
191
// Typed pointers are lowered to (raw-pointer, count) pair.
188
192
let isMutable = knownType == . unsafeMutableBufferPointer
189
- let rawPointerNominal = swiftStdlibTypes [ isMutable ? . unsafeMutableRawPointer : . unsafeRawPointer]
190
-
191
193
return LoweredParameter (
192
194
cdeclParameters: [
193
195
SwiftParameter (
194
196
convention: . byValue, parameterName: " \( parameterName) _pointer " ,
195
- type: . nominal ( SwiftNominalType ( nominalTypeDecl : rawPointerNominal ) )
197
+ type: isMutable ? knownTypes . unsafeMutableRawPointer : knownTypes . unsafeRawPointer
196
198
) ,
197
199
SwiftParameter (
198
200
convention: . byValue, parameterName: " \( parameterName) _count " ,
199
- type: . nominal ( SwiftNominalType ( nominalTypeDecl : swiftStdlibTypes [ . int] ) )
201
+ type: knownTypes . int
200
202
) ,
201
203
] , conversion: . initialize(
202
204
type,
@@ -221,12 +223,7 @@ struct CdeclLowering {
221
223
SwiftParameter (
222
224
convention: . byValue,
223
225
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)
230
227
)
231
228
] ,
232
229
conversion: . initialize( type, arguments: [
@@ -243,15 +240,12 @@ struct CdeclLowering {
243
240
244
241
// Arbitrary nominal types are passed-in as an pointer.
245
242
let isMutable = ( convention == . inout)
246
- let rawPointerNominal = swiftStdlibTypes [ isMutable ? . unsafeMutableRawPointer : . unsafeRawPointer]
247
- let parameterType : SwiftType = . nominal( SwiftNominalType ( nominalTypeDecl: rawPointerNominal) )
248
-
249
243
return LoweredParameter (
250
244
cdeclParameters: [
251
245
SwiftParameter (
252
246
convention: . byValue,
253
247
parameterName: parameterName,
254
- type: parameterType
248
+ type: isMutable ? knownTypes . unsafeMutableRawPointer : knownTypes . unsafeRawPointer
255
249
) ,
256
250
] ,
257
251
conversion: . pointee( . typedPointer( . placeholder, swiftType: type) )
@@ -352,12 +346,10 @@ struct CdeclLowering {
352
346
switch type {
353
347
case . metatype:
354
348
// 'unsafeBitcast(<result>, to: UnsafeRawPointer.self)' as 'UnsafeRawPointer'
355
-
356
- let resultType : SwiftType = . nominal( SwiftNominalType ( nominalTypeDecl: swiftStdlibTypes [ . unsafeRawPointer] ) )
357
349
return LoweredResult (
358
- cdeclResultType: resultType ,
350
+ cdeclResultType: knownTypes . unsafeRawPointer ,
359
351
cdeclOutParameters: [ ] ,
360
- conversion: . unsafeCastPointer( . placeholder, swiftType: resultType )
352
+ conversion: . unsafeCastPointer( . placeholder, swiftType: knownTypes . unsafeRawPointer )
361
353
)
362
354
363
355
case . nominal( let nominal) :
@@ -367,8 +359,7 @@ struct CdeclLowering {
367
359
case . unsafePointer, . unsafeMutablePointer:
368
360
// Typed pointers are lowered to corresponding raw forms.
369
361
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
372
363
return LoweredResult (
373
364
cdeclResultType: resultType,
374
365
cdeclOutParameters: [ ] ,
@@ -378,11 +369,10 @@ struct CdeclLowering {
378
369
case . unsafeBufferPointer, . unsafeMutableBufferPointer:
379
370
// Typed pointers are lowered to (raw-pointer, count) pair.
380
371
let isMutable = knownType == . unsafeMutableBufferPointer
381
- let rawPointerType = swiftStdlibTypes [ isMutable ? . unsafeMutableRawPointer : . unsafeRawPointer]
382
372
return try lowerResult (
383
373
. tuple( [
384
- . nominal ( SwiftNominalType ( nominalTypeDecl : rawPointerType ) ) ,
385
- . nominal ( SwiftNominalType ( nominalTypeDecl : swiftStdlibTypes [ . int] ) )
374
+ isMutable ? knownTypes . unsafeMutableRawPointer : knownTypes . unsafeRawPointer ,
375
+ knownTypes . int
386
376
] ) ,
387
377
outParameterName: outParameterName
388
378
)
@@ -407,7 +397,7 @@ struct CdeclLowering {
407
397
SwiftParameter (
408
398
convention: . byValue,
409
399
parameterName: outParameterName,
410
- type: . nominal ( SwiftNominalType ( nominalTypeDecl : swiftStdlibTypes [ . unsafeMutableRawPointer] ) )
400
+ type: knownTypes . unsafeMutableRawPointer
411
401
)
412
402
] ,
413
403
conversion: . populatePointer( name: outParameterName, assumingType: type, to: . placeholder)
@@ -431,10 +421,7 @@ struct CdeclLowering {
431
421
let parameter = SwiftParameter (
432
422
convention: . byValue,
433
423
parameterName: parameterName,
434
- type: . nominal( SwiftNominalType (
435
- nominalTypeDecl: swiftStdlibTypes. unsafeMutablePointerDecl,
436
- genericArguments: [ lowered. cdeclResultType]
437
- ) )
424
+ type: knownTypes. unsafeMutablePointer ( lowered. cdeclResultType)
438
425
)
439
426
parameters. append ( parameter)
440
427
conversions. append ( . populatePointer(
@@ -551,7 +538,7 @@ extension LoweredFunctionSignature {
551
538
cName: String ,
552
539
swiftAPIName: String ,
553
540
as apiKind: SwiftAPIKind ,
554
- stdlibTypes: SwiftStandardLibraryTypes
541
+ stdlibTypes: SwiftStandardLibraryTypeDecls
555
542
) -> FunctionDeclSyntax {
556
543
557
544
let cdeclParams = allLoweredParameters. map ( \. description) . joined ( separator: " , " )
0 commit comments