@@ -402,7 +402,8 @@ public class ExportSwift {
402
402
403
403
class ExportedThunkBuilder {
404
404
var body : [ CodeBlockItemSyntax ] = [ ]
405
- var abiParameterForwardings : [ LabeledExprSyntax ] = [ ]
405
+ var liftedParameterExprs : [ ExprSyntax ] = [ ]
406
+ var parameters : [ Parameter ] = [ ]
406
407
var abiParameterSignatures : [ ( name: String , type: WasmCoreType ) ] = [ ]
407
408
var abiReturnType : WasmCoreType ?
408
409
let effects : Effects
@@ -421,38 +422,19 @@ public class ExportSwift {
421
422
}
422
423
423
424
func liftParameter( param: Parameter ) {
425
+ parameters. append ( param)
424
426
switch param. type {
425
427
case . bool:
426
- abiParameterForwardings. append (
427
- LabeledExprSyntax (
428
- label: param. label,
429
- expression: ExprSyntax ( " \( raw: param. name) == 1 " )
430
- )
431
- )
428
+ liftedParameterExprs. append ( ExprSyntax ( " \( raw: param. name) == 1 " ) )
432
429
abiParameterSignatures. append ( ( param. name, . i32) )
433
430
case . int:
434
- abiParameterForwardings. append (
435
- LabeledExprSyntax (
436
- label: param. label,
437
- expression: ExprSyntax ( " \( raw: param. type. swiftType) ( \( raw: param. name) ) " )
438
- )
439
- )
431
+ liftedParameterExprs. append ( ExprSyntax ( " \( raw: param. type. swiftType) ( \( raw: param. name) ) " ) )
440
432
abiParameterSignatures. append ( ( param. name, . i32) )
441
433
case . float:
442
- abiParameterForwardings. append (
443
- LabeledExprSyntax (
444
- label: param. label,
445
- expression: ExprSyntax ( " \( raw: param. name) " )
446
- )
447
- )
434
+ liftedParameterExprs. append ( ExprSyntax ( " \( raw: param. name) " ) )
448
435
abiParameterSignatures. append ( ( param. name, . f32) )
449
436
case . double:
450
- abiParameterForwardings. append (
451
- LabeledExprSyntax (
452
- label: param. label,
453
- expression: ExprSyntax ( " \( raw: param. name) " )
454
- )
455
- )
437
+ liftedParameterExprs. append ( ExprSyntax ( " \( raw: param. name) " ) )
456
438
abiParameterSignatures. append ( ( param. name, . f64) )
457
439
case . string:
458
440
let bytesLabel = " \( param. name) Bytes "
@@ -464,46 +446,40 @@ public class ExportSwift {
464
446
}
465
447
"""
466
448
append ( prepare)
467
- abiParameterForwardings. append (
468
- LabeledExprSyntax (
469
- label: param. label,
470
- expression: ExprSyntax ( " \( raw: param. name) " )
471
- )
472
- )
449
+ liftedParameterExprs. append ( ExprSyntax ( " \( raw: param. name) " ) )
473
450
abiParameterSignatures. append ( ( bytesLabel, . i32) )
474
451
abiParameterSignatures. append ( ( lengthLabel, . i32) )
475
452
case . jsObject( nil ) :
476
- abiParameterForwardings. append (
477
- LabeledExprSyntax (
478
- label: param. label,
479
- expression: ExprSyntax ( " JSObject(id: UInt32(bitPattern: \( raw: param. name) )) " )
480
- )
481
- )
453
+ liftedParameterExprs. append ( ExprSyntax ( " JSObject(id: UInt32(bitPattern: \( raw: param. name) )) " ) )
482
454
abiParameterSignatures. append ( ( param. name, . i32) )
483
455
case . jsObject( let name) :
484
- abiParameterForwardings. append (
485
- LabeledExprSyntax (
486
- label: param. label,
487
- expression: ExprSyntax ( " \( raw: name) (takingThis: UInt32(bitPattern: \( raw: param. name) )) " )
488
- )
456
+ liftedParameterExprs. append (
457
+ ExprSyntax ( " \( raw: name) (takingThis: UInt32(bitPattern: \( raw: param. name) )) " )
489
458
)
490
459
abiParameterSignatures. append ( ( param. name, . i32) )
491
460
case . swiftHeapObject:
492
461
// UnsafeMutableRawPointer is passed as an i32 pointer
493
462
let objectExpr : ExprSyntax =
494
463
" Unmanaged< \( raw: param. type. swiftType) >.fromOpaque( \( raw: param. name) ).takeUnretainedValue() "
495
- abiParameterForwardings. append (
496
- LabeledExprSyntax ( label: param. label, expression: objectExpr)
497
- )
464
+ liftedParameterExprs. append ( objectExpr)
498
465
abiParameterSignatures. append ( ( param. name, . pointer) )
499
466
case . void:
500
467
break
501
468
}
502
469
}
503
470
471
+ private func removeFirstLiftedParameter( ) -> ( parameter: Parameter , expr: ExprSyntax ) {
472
+ let parameter = parameters. removeFirst ( )
473
+ let expr = liftedParameterExprs. removeFirst ( )
474
+ return ( parameter, expr)
475
+ }
476
+
504
477
private func renderCallStatement( callee: ExprSyntax , returnType: BridgeType ) -> CodeBlockItemSyntax {
478
+ let labeledParams = zip ( parameters, liftedParameterExprs) . map { param, expr in
479
+ LabeledExprSyntax ( label: param. label, expression: expr)
480
+ }
505
481
var callExpr : ExprSyntax =
506
- " \( raw: callee) ( \( raw: abiParameterForwardings . map { $0. description } . joined ( separator: " , " ) ) ) "
482
+ " \( raw: callee) ( \( raw: labeledParams . map { $0. description } . joined ( separator: " , " ) ) ) "
507
483
if effects. isAsync {
508
484
callExpr = ExprSyntax (
509
485
AwaitExprSyntax ( awaitKeyword: . keyword( . await ) . with ( \. trailingTrivia, . space) , expression: callExpr)
@@ -536,27 +512,28 @@ public class ExportSwift {
536
512
}
537
513
538
514
func callMethod( klassName: String , methodName: String , returnType: BridgeType ) {
539
- let _selfParam = self . abiParameterForwardings . removeFirst ( )
515
+ let ( _ , selfExpr ) = removeFirstLiftedParameter ( )
540
516
let item = renderCallStatement (
541
- callee: " \( raw: _selfParam ) . \( raw: methodName) " ,
517
+ callee: " \( raw: selfExpr ) . \( raw: methodName) " ,
542
518
returnType: returnType
543
519
)
544
520
append ( item)
545
521
}
546
522
547
523
func callPropertyGetter( klassName: String , propertyName: String , returnType: BridgeType ) {
548
- let _selfParam = self . abiParameterForwardings . removeFirst ( )
524
+ let ( _ , selfExpr ) = removeFirstLiftedParameter ( )
549
525
let retMutability = returnType == . string ? " var " : " let "
550
526
if returnType == . void {
551
- append ( " \( raw: _selfParam ) . \( raw: propertyName) " )
527
+ append ( " \( raw: selfExpr ) . \( raw: propertyName) " )
552
528
} else {
553
- append ( " \( raw: retMutability) ret = \( raw: _selfParam ) . \( raw: propertyName) " )
529
+ append ( " \( raw: retMutability) ret = \( raw: selfExpr ) . \( raw: propertyName) " )
554
530
}
555
531
}
556
532
557
533
func callPropertySetter( klassName: String , propertyName: String ) {
558
- let _selfParam = self . abiParameterForwardings. removeFirst ( )
559
- append ( " \( raw: _selfParam) . \( raw: propertyName) = value " )
534
+ let ( _, selfExpr) = removeFirstLiftedParameter ( )
535
+ let ( _, newValueExpr) = removeFirstLiftedParameter ( )
536
+ append ( " \( raw: selfExpr) . \( raw: propertyName) = \( raw: newValueExpr) " )
560
537
}
561
538
562
539
func lowerReturnValue( returnType: BridgeType ) {
0 commit comments