@@ -45,11 +45,19 @@ protocol ParamInfo: CustomStringConvertible {
4545 ) -> BoundsCheckedThunkBuilder
4646}
4747
48+ func getParamName( _ param: FunctionParameterSyntax , _ paramIndex: Int ) -> TokenSyntax {
49+ let name = param. secondName ?? param. firstName
50+ if name. trimmed. text == " _ " {
51+ return " _param \( raw: paramIndex) "
52+ }
53+ return name
54+ }
55+
4856func tryGetParamName( _ funcDecl: FunctionDeclSyntax , _ expr: SwiftifyExpr ) -> TokenSyntax ? {
4957 switch expr {
5058 case . param( let i) :
5159 let funcParam = getParam ( funcDecl, i - 1 )
52- return funcParam. secondName ?? funcParam . firstName
60+ return getParamName ( funcParam, i - 1 )
5361 case . `self`:
5462 return . keyword( . self )
5563 default : return nil
@@ -419,7 +427,12 @@ struct FunctionCallBuilder: BoundsCheckedThunkBuilder {
419427 // filter out deleted parameters, i.e. ones where argTypes[i] _contains_ nil
420428 return type == nil || type! != nil
421429 } . map { ( i: Int , e: FunctionParameterSyntax ) in
422- e. with ( \. type, ( argTypes [ i] ?? e. type) !)
430+ let param = e. with ( \. type, ( argTypes [ i] ?? e. type) !)
431+ let name = param. secondName ?? param. firstName
432+ if name. trimmed. text == " _ " {
433+ return param. with ( \. secondName, getParamName ( param, i) )
434+ }
435+ return param
423436 }
424437 if let last = newParams. popLast ( ) {
425438 newParams. append ( last. with ( \. trailingComma, nil ) )
@@ -437,7 +450,7 @@ struct FunctionCallBuilder: BoundsCheckedThunkBuilder {
437450 let functionRef = DeclReferenceExprSyntax ( baseName: base. name)
438451 let args : [ ExprSyntax ] = base. signature. parameterClause. parameters. enumerated ( )
439452 . map { ( i: Int , param: FunctionParameterSyntax ) in
440- let name = param. secondName ?? param . firstName
453+ let name = getParamName ( param, i )
441454 let declref = DeclReferenceExprSyntax ( baseName: name)
442455 return pointerArgs [ i] ?? ExprSyntax ( declref)
443456 }
@@ -647,7 +660,7 @@ extension ParamBoundsThunkBuilder {
647660 }
648661
649662 var name : TokenSyntax {
650- return param. secondName ?? param . firstName
663+ getParamName ( param, index )
651664 }
652665}
653666
@@ -828,8 +841,7 @@ struct CountedOrSizedPointerThunkBuilder: ParamBoundsThunkBuilder, PointerBounds
828841 }
829842
830843 func castPointerToOpaquePointer( _ baseAddress: ExprSyntax ) throws -> ExprSyntax {
831- let i = try getParameterIndexForParamName ( signature. parameterClause. parameters, name)
832- let type = peelOptionalType ( getParam ( signature, i) . type)
844+ let type = peelOptionalType ( getParam ( signature, index) . type)
833845 if type. canRepresentBasicType ( type: OpaquePointer . self) {
834846 return ExprSyntax ( " OpaquePointer( \( baseAddress) ) " )
835847 }
0 commit comments