@@ -695,143 +695,51 @@ enum SwiftCodePattern {
695695extension BridgeType {
696696 struct LoweringParameterInfo {
697697 let loweredParameters : [ ( name: String , type: WasmCoreType ) ]
698-
699- static let bool = LoweringParameterInfo ( loweredParameters: [ ( " value " , . i32) ] )
700- static let int = LoweringParameterInfo ( loweredParameters: [ ( " value " , . i32) ] )
701- static let float = LoweringParameterInfo ( loweredParameters: [ ( " value " , . f32) ] )
702- static let double = LoweringParameterInfo ( loweredParameters: [ ( " value " , . f64) ] )
703- static let string = LoweringParameterInfo ( loweredParameters: [ ( " value " , . i32) ] )
704- static let jsObject = LoweringParameterInfo ( loweredParameters: [ ( " value " , . i32) ] )
705- static let jsValue = LoweringParameterInfo ( loweredParameters: [
706- ( " kind " , . i32) ,
707- ( " payload1 " , . i32) ,
708- ( " payload2 " , . f64) ,
709- ] )
710- static let void = LoweringParameterInfo ( loweredParameters: [ ] )
711698 }
712699
713700 func loweringParameterInfo( context: BridgeContext = . importTS) throws -> LoweringParameterInfo {
714701 switch self {
715- case . bool: return . bool
716- case . int, . uint: return . int
717- case . float: return . float
718- case . double: return . double
719- case . string: return . string
720- case . jsObject: return . jsObject
721- case . jsValue: return . jsValue
722- case . void: return . void
723- case . closure:
724- // Swift closure is passed to JS as a JS function reference.
725- return LoweringParameterInfo ( loweredParameters: [ ( " funcRef " , . i32) ] )
726- case . unsafePointer:
727- return LoweringParameterInfo ( loweredParameters: [ ( " pointer " , . pointer) ] )
728- case . swiftHeapObject:
729- return LoweringParameterInfo ( loweredParameters: [ ( " pointer " , . pointer) ] )
730- case . swiftProtocol:
731- throw BridgeJSCoreError ( " swiftProtocol is not supported in imported signatures " )
732- case . caseEnum:
733- switch context {
734- case . importTS:
735- throw BridgeJSCoreError ( " Enum types are not yet supported in TypeScript imports " )
736- case . exportSwift:
737- return LoweringParameterInfo ( loweredParameters: [ ( " value " , . i32) ] )
738- }
739- case . rawValueEnum( _, let rawType) :
740- let wasmType = rawType. wasmCoreType ?? . i32
741- return LoweringParameterInfo ( loweredParameters: [ ( " value " , wasmType) ] )
742- case . associatedValueEnum:
743- switch context {
744- case . importTS:
745- throw BridgeJSCoreError ( " Enum types are not yet supported in TypeScript imports " )
746- case . exportSwift:
747- return LoweringParameterInfo ( loweredParameters: [ ( " caseId " , . i32) ] )
748- }
749- case . swiftStruct:
750- switch context {
751- case . importTS:
752- // Swift structs are bridged as JS objects (object IDs) in imported signatures.
753- return LoweringParameterInfo ( loweredParameters: [ ( " objectId " , . i32) ] )
754- case . exportSwift:
755- return LoweringParameterInfo ( loweredParameters: [ ] )
756- }
757- case . namespaceEnum:
758- throw BridgeJSCoreError ( " Namespace enums cannot be used as parameters " )
759702 case . nullable( let wrappedType, _) :
760703 let wrappedInfo = try wrappedType. loweringParameterInfo ( context: context)
761704 var params = [ ( " isSome " , WasmCoreType . i32) ]
762705 params. append ( contentsOf: wrappedInfo. loweredParameters)
763706 return LoweringParameterInfo ( loweredParameters: params)
764- case . array, . dictionary:
765- return LoweringParameterInfo ( loweredParameters: [ ] )
707+ case . namespaceEnum:
708+ throw BridgeJSCoreError ( " Namespace enums cannot be used as parameters " )
709+ case . swiftProtocol:
710+ throw BridgeJSCoreError ( " swiftProtocol is not supported in imported signatures " )
711+ case . caseEnum, . associatedValueEnum:
712+ if context == . importTS {
713+ throw BridgeJSCoreError ( " Enum types are not yet supported in TypeScript imports " )
714+ }
715+ fallthrough
716+ default :
717+ return LoweringParameterInfo ( loweredParameters: descriptor. importParams)
766718 }
767719 }
768720
769721 struct LiftingReturnInfo {
770722 let valueToLift : WasmCoreType ?
771-
772- static let bool = LiftingReturnInfo ( valueToLift: . i32)
773- static let int = LiftingReturnInfo ( valueToLift: . i32)
774- static let float = LiftingReturnInfo ( valueToLift: . f32)
775- static let double = LiftingReturnInfo ( valueToLift: . f64)
776- static let string = LiftingReturnInfo ( valueToLift: . i32)
777- static let jsObject = LiftingReturnInfo ( valueToLift: . i32)
778- static let jsValue = LiftingReturnInfo ( valueToLift: nil )
779- static let void = LiftingReturnInfo ( valueToLift: nil )
780723 }
781724
782725 func liftingReturnInfo(
783726 context: BridgeContext = . importTS
784727 ) throws -> LiftingReturnInfo {
785728 switch self {
786- case . bool: return . bool
787- case . int, . uint: return . int
788- case . float: return . float
789- case . double: return . double
790- case . string: return . string
791- case . jsObject: return . jsObject
792- case . jsValue: return . jsValue
793- case . void: return . void
794- case . closure:
795- // JS returns a callback ID for closures, which Swift lifts to a typed closure.
796- return LiftingReturnInfo ( valueToLift: . i32)
797- case . unsafePointer:
798- return LiftingReturnInfo ( valueToLift: . pointer)
799- case . swiftHeapObject:
800- return LiftingReturnInfo ( valueToLift: . pointer)
729+ case . nullable( let wrappedType, _) :
730+ let wrappedInfo = try wrappedType. liftingReturnInfo ( context: context)
731+ return LiftingReturnInfo ( valueToLift: wrappedInfo. valueToLift)
732+ case . namespaceEnum:
733+ throw BridgeJSCoreError ( " Namespace enums cannot be used as return values " )
801734 case . swiftProtocol:
802735 throw BridgeJSCoreError ( " swiftProtocol is not supported in imported signatures " )
803- case . caseEnum:
804- switch context {
805- case . importTS:
806- throw BridgeJSCoreError ( " Enum types are not yet supported in TypeScript imports " )
807- case . exportSwift:
808- return LiftingReturnInfo ( valueToLift: . i32)
809- }
810- case . rawValueEnum( _, let rawType) :
811- let wasmType = rawType. wasmCoreType ?? . i32
812- return LiftingReturnInfo ( valueToLift: wasmType)
813- case . associatedValueEnum:
814- switch context {
815- case . importTS:
736+ case . caseEnum, . associatedValueEnum:
737+ if context == . importTS {
816738 throw BridgeJSCoreError ( " Enum types are not yet supported in TypeScript imports " )
817- case . exportSwift:
818- return LiftingReturnInfo ( valueToLift: . i32)
819- }
820- case . swiftStruct:
821- switch context {
822- case . importTS:
823- // Swift structs are bridged as JS objects (object IDs) in imported signatures.
824- return LiftingReturnInfo ( valueToLift: . i32)
825- case . exportSwift:
826- return LiftingReturnInfo ( valueToLift: nil )
827739 }
828- case . namespaceEnum:
829- throw BridgeJSCoreError ( " Namespace enums cannot be used as return values " )
830- case . nullable( let wrappedType, _) :
831- let wrappedInfo = try wrappedType. liftingReturnInfo ( context: context)
832- return LiftingReturnInfo ( valueToLift: wrappedInfo. valueToLift)
833- case . array, . dictionary:
834- return LiftingReturnInfo ( valueToLift: nil )
740+ fallthrough
741+ default :
742+ return LiftingReturnInfo ( valueToLift: descriptor. importReturnType)
835743 }
836744 }
837745}
0 commit comments