@@ -76,22 +76,34 @@ public enum BridgeContext: Sendable {
7676public struct ClosureSignature : Codable , Equatable , Hashable , Sendable {
7777 public let parameters : [ BridgeType ]
7878 public let returnType : BridgeType
79+ /// Simplified Swift ABI-style mangling with module prefix
80+ // <moduleLength><module> + params + _ + return
81+ // Examples:
82+ // - 4MainSS_Si (Main module, String->Int)
83+ // - 6MyAppSiSi_y (MyApp module, Int,Int->Void)
84+ public let mangleName : String
7985 public let isAsync : Bool
8086 public let isThrows : Bool
81- public let mangleName : String
87+ public let moduleName : String
8288
83- public init ( parameters: [ BridgeType ] , returnType: BridgeType , isAsync: Bool = false , isThrows: Bool = false ) {
89+ public init (
90+ parameters: [ BridgeType ] ,
91+ returnType: BridgeType ,
92+ moduleName: String ,
93+ isAsync: Bool = false ,
94+ isThrows: Bool = false
95+ ) {
8496 self . parameters = parameters
8597 self . returnType = returnType
98+ self . moduleName = moduleName
8699 self . isAsync = isAsync
87100 self . isThrows = isThrows
88-
89101 let paramPart =
90102 parameters. isEmpty
91- ? " Void "
92- : parameters. map { $0. mangleTypeName } . joined ( separator : " _ " )
93- let returnPart = returnType. mangleTypeName
94- self . mangleName = " \( paramPart ) _To_ \( returnPart ) "
103+ ? " y "
104+ : parameters. map { $0. mangleTypeName } . joined ( )
105+ let signaturePart = " \( paramPart ) _ \( returnType. mangleTypeName) "
106+ self . mangleName = " \( moduleName . count ) \( moduleName ) \( signaturePart ) "
95107 }
96108}
97109
@@ -602,31 +614,36 @@ extension BridgeType {
602614 return false
603615 }
604616
605- /// Generates a mangled name for use in closure type names
606- /// Examples: "String", "Int", "MyClass", "Bool"
617+ /// Simplified Swift ABI-style mangled name
618+ /// https://github.com/swiftlang/swift/blob/main/docs/ABI/Mangling.rst#types
607619 public var mangleTypeName : String {
608620 switch self {
609- case . int: return " Int "
610- case . float: return " Float "
611- case . double: return " Double "
612- case . string: return " String "
613- case . bool: return " Bool "
614- case . void: return " Void "
621+ case . int: return " Si "
622+ case . float: return " Sf "
623+ case . double: return " Sd "
624+ case . string: return " SS "
625+ case . bool: return " Sb "
626+ case . void: return " y "
615627 case . jsObject( let name) :
616- return name ?? " JSObject "
628+ let typeName = name ?? " JSObject "
629+ return " \( typeName. count) \( typeName) C "
617630 case . swiftHeapObject( let name) :
618- return name
631+ return " \( name. count ) \( name ) C "
619632 case . optional( let wrapped) :
620- return " Optional \( wrapped. mangleTypeName) "
633+ return " Sq \( wrapped. mangleTypeName) "
621634 case . caseEnum( let name) ,
622635 . rawValueEnum( let name, _) ,
623636 . associatedValueEnum( let name) ,
624637 . namespaceEnum( let name) :
625- return name
638+ return " \( name. count ) \( name ) O "
626639 case . swiftProtocol( let name) :
627- return name
640+ return " \( name. count ) \( name ) P "
628641 case . closure( let signature) :
629- return " Closure_ \( signature. mangleName) "
642+ let params =
643+ signature. parameters. isEmpty
644+ ? " y "
645+ : signature. parameters. map { $0. mangleTypeName } . joined ( )
646+ return " K \( params) _ \( signature. returnType. mangleTypeName) "
630647 }
631648 }
632649
0 commit comments