@@ -138,7 +138,7 @@ extension Swift2JavaTranslator {
138
138
case . metatype( let instanceType) :
139
139
return LoweredParameters (
140
140
cdeclToOriginal: . unsafeCastPointer(
141
- . value ,
141
+ . placeholder ,
142
142
swiftType: instanceType
143
143
) ,
144
144
cdeclParameters: [
@@ -170,14 +170,14 @@ extension Swift2JavaTranslator {
170
170
}
171
171
172
172
let mutable = ( convention == . inout)
173
- let loweringStep : LoweringStep
173
+ let loweringStep : ConversionStep
174
174
switch nominal. nominalTypeDecl. kind {
175
175
case . actor , . class:
176
176
loweringStep =
177
- . unsafeCastPointer( . value , swiftType: type)
177
+ . unsafeCastPointer( . placeholder , swiftType: type)
178
178
case . enum, . struct, . protocol:
179
179
loweringStep =
180
- . passIndirectly( . pointee( . typedPointer( . value , swiftType: type) ) )
180
+ . passIndirectly( . pointee( . typedPointer( . placeholder , swiftType: type) ) )
181
181
}
182
182
183
183
return LoweredParameters (
@@ -228,7 +228,7 @@ extension Swift2JavaTranslator {
228
228
}
229
229
230
230
return LoweredParameters (
231
- cdeclToOriginal: . value ,
231
+ cdeclToOriginal: . placeholder ,
232
232
cdeclParameters: [
233
233
SwiftParameter (
234
234
convention: convention,
@@ -249,7 +249,7 @@ extension Swift2JavaTranslator {
249
249
}
250
250
251
251
return LoweredParameters (
252
- cdeclToOriginal: . value ,
252
+ cdeclToOriginal: . placeholder ,
253
253
cdeclParameters: [
254
254
SwiftParameter (
255
255
convention: convention,
@@ -280,21 +280,21 @@ extension Swift2JavaTranslator {
280
280
let cdeclPointerType = mutable
281
281
? swiftStdlibTypes [ . unsafeMutableRawPointer]
282
282
: swiftStdlibTypes [ . unsafeRawPointer]
283
- var cdeclToOriginal : LoweringStep
283
+ var cdeclToOriginal : ConversionStep
284
284
switch ( requiresArgument, hasCount) {
285
285
case ( false , false ) :
286
- cdeclToOriginal = . value
286
+ cdeclToOriginal = . placeholder
287
287
288
288
case ( true , false ) :
289
289
cdeclToOriginal = . typedPointer(
290
- . explodedComponent( . value , component: " pointer " ) ,
290
+ . explodedComponent( . placeholder , component: " pointer " ) ,
291
291
swiftType: nominal. genericArguments![ 0 ]
292
292
)
293
293
294
294
case ( false , true ) :
295
295
cdeclToOriginal = . initialize( type, arguments: [
296
- LabeledArgument ( label: " start " , argument: . explodedComponent( . value , component: " pointer " ) ) ,
297
- LabeledArgument ( label: " count " , argument: . explodedComponent( . value , component: " count " ) )
296
+ LabeledArgument ( label: " start " , argument: . explodedComponent( . placeholder , component: " pointer " ) ) ,
297
+ LabeledArgument ( label: " count " , argument: . explodedComponent( . placeholder , component: " count " ) )
298
298
] )
299
299
300
300
case ( true , true ) :
@@ -304,12 +304,12 @@ extension Swift2JavaTranslator {
304
304
LabeledArgument (
305
305
label: " start " ,
306
306
argument: . typedPointer(
307
- . explodedComponent( . value , component: " pointer " ) ,
307
+ . explodedComponent( . placeholder , component: " pointer " ) ,
308
308
swiftType: nominal. genericArguments![ 0 ] )
309
309
) ,
310
310
LabeledArgument (
311
311
label: " count " ,
312
- argument: . explodedComponent( . value , component: " count " )
312
+ argument: . explodedComponent( . placeholder , component: " count " )
313
313
)
314
314
]
315
315
)
@@ -395,48 +395,11 @@ struct LabeledArgument<Element> {
395
395
396
396
extension LabeledArgument : Equatable where Element: Equatable { }
397
397
398
- /// Describes the transformation needed to take the parameters of a thunk
399
- /// and map them to the corresponding parameter (or result value) of the
400
- /// original function.
401
- enum LoweringStep : Equatable {
402
- /// The value being lowered.
403
- case value
404
-
405
- /// A reference to a component in a value that has been exploded, such as
406
- /// a tuple element or part of a buffer pointer.
407
- indirect case explodedComponent( LoweringStep , component: String )
408
-
409
- /// Cast the pointer described by the lowering step to the given
410
- /// Swift type using `unsafeBitCast(_:to:)`.
411
- indirect case unsafeCastPointer( LoweringStep , swiftType: SwiftType )
412
-
413
- /// Assume at the untyped pointer described by the lowering step to the
414
- /// given type, using `assumingMemoryBound(to:).`
415
- indirect case typedPointer( LoweringStep , swiftType: SwiftType )
416
-
417
- /// The thing to which the pointer typed, which is the `pointee` property
418
- /// of the `Unsafe(Mutable)Pointer` types in Swift.
419
- indirect case pointee( LoweringStep )
420
-
421
- /// Pass this value indirectly, via & for explicit `inout` parameters.
422
- indirect case passIndirectly( LoweringStep )
423
-
424
- /// Initialize a value of the given Swift type with the set of labeled
425
- /// arguments.
426
- case initialize( SwiftType , arguments: [ LabeledArgument < LoweringStep > ] )
427
-
428
- /// Produce a tuple with the given elements.
429
- ///
430
- /// This is used for exploding Swift tuple arguments into multiple
431
- /// elements, recursively. Note that this always produces unlabeled
432
- /// tuples, which Swift will convert to the labeled tuple form.
433
- case tuplify( [ LoweringStep ] )
434
- }
435
398
436
399
struct LoweredParameters : Equatable {
437
400
/// The steps needed to get from the @_cdecl parameters to the original function
438
401
/// parameter.
439
- var cdeclToOriginal : LoweringStep
402
+ var cdeclToOriginal : ConversionStep
440
403
441
404
/// The lowering of the parameters at the C level in Swift.
442
405
var cdeclParameters : [ SwiftParameter ]
@@ -446,60 +409,7 @@ extension LoweredParameters {
446
409
/// Produce an expression that computes the argument for this parameter
447
410
/// when calling the original function from the cdecl entrypoint.
448
411
func cdeclToOriginalArgumentExpr( isSelf: Bool , value: String ) -> ExprSyntax {
449
- cdeclToOriginal. asExprSyntax ( isSelf: isSelf, value: value)
450
- }
451
- }
452
-
453
- extension LoweringStep {
454
- func asExprSyntax( isSelf: Bool , value: String ) -> ExprSyntax {
455
- switch self {
456
- case . value:
457
- return " \( raw: value) "
458
-
459
- case . explodedComponent( let step, component: let component) :
460
- return step. asExprSyntax ( isSelf: false , value: " \( value) _ \( component) " )
461
-
462
- case . unsafeCastPointer( let step, swiftType: let swiftType) :
463
- let untypedExpr = step. asExprSyntax ( isSelf: false , value: value)
464
- return " unsafeBitCast( \( untypedExpr) , to: \( swiftType. metatypeReferenceExprSyntax) ) "
465
-
466
- case . typedPointer( let step, swiftType: let type) :
467
- let untypedExpr = step. asExprSyntax ( isSelf: isSelf, value: value)
468
- return " \( untypedExpr) .assumingMemoryBound(to: \( type. metatypeReferenceExprSyntax) ) "
469
-
470
- case . pointee( let step) :
471
- let untypedExpr = step. asExprSyntax ( isSelf: isSelf, value: value)
472
- return " \( untypedExpr) .pointee "
473
-
474
- case . passIndirectly( let step) :
475
- let innerExpr = step. asExprSyntax ( isSelf: false , value: value)
476
- return isSelf ? innerExpr : " & \( innerExpr) "
477
-
478
- case . initialize( let type, arguments: let arguments) :
479
- let renderedArguments : [ String ] = arguments. map { labeledArgument in
480
- let renderedArg = labeledArgument. argument. asExprSyntax ( isSelf: false , value: value)
481
- if let argmentLabel = labeledArgument. label {
482
- return " \( argmentLabel) : \( renderedArg. description) "
483
- } else {
484
- return renderedArg. description
485
- }
486
- }
487
-
488
- // FIXME: Should be able to use structured initializers here instead
489
- // of splatting out text.
490
- let renderedArgumentList = renderedArguments. joined ( separator: " , " )
491
- return " \( raw: type. description) ( \( raw: renderedArgumentList) ) "
492
-
493
- case . tuplify( let elements) :
494
- let renderedElements : [ String ] = elements. enumerated ( ) . map { ( index, element) in
495
- element. asExprSyntax ( isSelf: false , value: " \( value) _ \( index) " ) . description
496
- }
497
-
498
- // FIXME: Should be able to use structured initializers here instead
499
- // of splatting out text.
500
- let renderedElementList = renderedElements. joined ( separator: " , " )
501
- return " ( \( raw: renderedElementList) ) "
502
- }
412
+ cdeclToOriginal. asExprSyntax ( isSelf: isSelf, placeholder: value)
503
413
}
504
414
}
505
415
0 commit comments