@@ -1425,7 +1425,7 @@ struct ProtocolCodegen {
14251425 for method in proto . methods {
14261426 let builder = try ImportTS . CallJSEmission (
14271427 moduleName : moduleName ,
1428- abiName : " _extern_ \( method . name ) " ,
1428+ abiName : method . abiName ,
14291429 effects : method . effects ,
14301430 returnType : method . returnType ,
14311431 context : . exportSwift
@@ -1450,7 +1450,7 @@ struct ProtocolCodegen {
14501450 printer : externDeclPrinter ,
14511451 moduleName : moduleName ,
14521452 abiName : method . abiName ,
1453- functionName : " _extern_ \( method . name ) " ,
1453+ functionName : method . abiName ,
14541454 abiParameters : builder . abiParameterSignatures ,
14551455 returnType : builder . abiReturnType
14561456 )
@@ -1478,32 +1478,34 @@ struct ProtocolCodegen {
14781478 externDecls . append ( contentsOf : propertyExternDecls )
14791479 }
14801480
1481- let structDeclPrinter = CodeFragmentPrinter ( )
1482- structDeclPrinter . write ( " struct \( wrapperName ) : \( protocolName ) , _BridgedSwiftProtocolWrapper { " )
1483- structDeclPrinter . indent {
1484- structDeclPrinter . write ( " let jsObject: JSObject " )
1485- structDeclPrinter . nextLine ( )
1486-
1487- for methodDecl in methodDecls {
1488- structDeclPrinter . write ( lines : methodDecl . lines )
1489- structDeclPrinter . nextLine ( )
1490- }
1491-
1492- for decl in propertyDecls {
1493- structDeclPrinter . write ( lines : decl . lines )
1494- structDeclPrinter . nextLine ( )
1481+ var decls : [ DeclSyntax ] = [ ]
1482+ if ! methodDecls . isEmpty || ! propertyDecls . isEmpty {
1483+ let extensionPrinter = CodeFragmentPrinter ( )
1484+ extensionPrinter . write ( " extension \( protocolName ) where Self: _BridgedSwiftProtocolWrapper { " )
1485+ extensionPrinter . indent {
1486+ var first = true
1487+ for decl in methodDecls + propertyDecls {
1488+ if ! first { extensionPrinter . nextLine ( ) }
1489+ first = false
1490+ extensionPrinter . write ( lines : decl . lines )
1491+ }
14951492 }
1496- structDeclPrinter . write (
1497- multilineString : """
1498- static func bridgeJSLiftParameter(_ value: Int32) -> Self {
1499- return \( wrapperName ) (jsObject: JSObject(id: UInt32(bitPattern: value)))
1500- }
1501- """
1502- )
1493+ extensionPrinter . write ( " } " )
1494+ decls . append ( " \( raw : extensionPrinter . lines . joined ( separator : " \n " ) ) " )
15031495 }
1504- structDeclPrinter . write ( " } " )
15051496
1506- return [ " \( raw : structDeclPrinter . lines . joined ( separator : " \n " ) ) " ] + externDecls
1497+ decls . append (
1498+ """
1499+ struct \( raw : wrapperName ) : \( raw : protocolName ) , _BridgedSwiftProtocolWrapper {
1500+ let jsObject: JSObject
1501+
1502+ static func bridgeJSLiftParameter(_ value: Int32) -> Self {
1503+ return \( raw : wrapperName ) (jsObject: JSObject(id: UInt32(bitPattern: value)))
1504+ }
1505+ }
1506+ """
1507+ )
1508+ return decls + externDecls
15071509 }
15081510
15091511 private func renderProtocolProperty (
0 commit comments