@@ -187,8 +187,8 @@ public struct ImportTS {
187187 body. append ( " let ret = \( raw: callExpr) " )
188188 }
189189
190- // Add exception check for ImportTS context
191- if context == . importTS {
190+ // Add exception check for contexts that call INTO JavaScript
191+ if context == . importTS || context == . exportSwiftProtocol {
192192 body. append ( " if let error = _swift_js_take_exception() { throw error } " )
193193 }
194194 }
@@ -887,7 +887,7 @@ extension BridgeType {
887887 Swift classes can only be used in @JS protocols where Swift owns the instance.
888888 """
889889 )
890- case . exportSwift:
890+ case . exportSwift, . exportSwiftProtocol :
891891 return LoweringParameterInfo ( loweredParameters: [ ( " pointer " , . pointer) ] )
892892 }
893893 case . swiftProtocol:
@@ -896,30 +896,30 @@ extension BridgeType {
896896 switch context {
897897 case . importTS:
898898 throw BridgeJSCoreError ( " Enum types are not yet supported in TypeScript imports " )
899- case . exportSwift:
899+ case . exportSwift, . exportSwiftProtocol :
900900 return LoweringParameterInfo ( loweredParameters: [ ( " value " , . i32) ] )
901901 }
902902 case . rawValueEnum( _, let rawType) :
903903 switch context {
904904 case . importTS:
905905 return LoweringParameterInfo ( loweredParameters: [ ( " value " , rawType. wasmCoreType ?? . i32) ] )
906- case . exportSwift:
906+ case . exportSwift, . exportSwiftProtocol :
907907 // For protocol export we return .i32 for String raw value type instead of nil
908908 return LoweringParameterInfo ( loweredParameters: [ ( " value " , rawType. wasmCoreType ?? . i32) ] )
909909 }
910910 case . associatedValueEnum:
911911 switch context {
912912 case . importTS:
913913 throw BridgeJSCoreError ( " Enum types are not yet supported in TypeScript imports " )
914- case . exportSwift:
914+ case . exportSwift, . exportSwiftProtocol :
915915 return LoweringParameterInfo ( loweredParameters: [ ( " caseId " , . i32) ] )
916916 }
917917 case . swiftStruct:
918918 switch context {
919919 case . importTS:
920920 // Swift structs are bridged as JS objects (object IDs) in imported signatures.
921921 return LoweringParameterInfo ( loweredParameters: [ ( " objectId " , . i32) ] )
922- case . exportSwift:
922+ case . exportSwift, . exportSwiftProtocol :
923923 return LoweringParameterInfo ( loweredParameters: [ ] )
924924 }
925925 case . namespaceEnum:
@@ -928,7 +928,7 @@ extension BridgeType {
928928 switch context {
929929 case . importTS:
930930 throw BridgeJSCoreError ( " Optional types are not yet supported in TypeScript imports " )
931- case . exportSwift:
931+ case . exportSwift, . exportSwiftProtocol :
932932 let wrappedInfo = try wrappedType. loweringParameterInfo ( context: context)
933933 var params = [ ( " isSome " , WasmCoreType . i32) ]
934934 params. append ( contentsOf: wrappedInfo. loweredParameters)
@@ -938,7 +938,7 @@ extension BridgeType {
938938 switch context {
939939 case . importTS:
940940 throw BridgeJSCoreError ( " Array types are not yet supported in TypeScript imports " )
941- case . exportSwift:
941+ case . exportSwift, . exportSwiftProtocol :
942942 return LoweringParameterInfo ( loweredParameters: [ ] )
943943 }
944944 }
@@ -981,7 +981,7 @@ extension BridgeType {
981981 JavaScript cannot create Swift heap objects.
982982 """
983983 )
984- case . exportSwift:
984+ case . exportSwift, . exportSwiftProtocol :
985985 return LiftingReturnInfo ( valueToLift: . pointer)
986986 }
987987 case . swiftProtocol:
@@ -990,30 +990,30 @@ extension BridgeType {
990990 switch context {
991991 case . importTS:
992992 throw BridgeJSCoreError ( " Enum types are not yet supported in TypeScript imports " )
993- case . exportSwift:
993+ case . exportSwift, . exportSwiftProtocol :
994994 return LiftingReturnInfo ( valueToLift: . i32)
995995 }
996996 case . rawValueEnum( _, let rawType) :
997997 switch context {
998998 case . importTS:
999999 return LiftingReturnInfo ( valueToLift: rawType. wasmCoreType ?? . i32)
1000- case . exportSwift:
1000+ case . exportSwift, . exportSwiftProtocol :
10011001 // For protocol export we return .i32 for String raw value type instead of nil
10021002 return LiftingReturnInfo ( valueToLift: rawType. wasmCoreType ?? . i32)
10031003 }
10041004 case . associatedValueEnum:
10051005 switch context {
10061006 case . importTS:
10071007 throw BridgeJSCoreError ( " Enum types are not yet supported in TypeScript imports " )
1008- case . exportSwift:
1008+ case . exportSwift, . exportSwiftProtocol :
10091009 return LiftingReturnInfo ( valueToLift: . i32)
10101010 }
10111011 case . swiftStruct:
10121012 switch context {
10131013 case . importTS:
10141014 // Swift structs are bridged as JS objects (object IDs) in imported signatures.
10151015 return LiftingReturnInfo ( valueToLift: . i32)
1016- case . exportSwift:
1016+ case . exportSwift, . exportSwiftProtocol :
10171017 return LiftingReturnInfo ( valueToLift: nil )
10181018 }
10191019 case . namespaceEnum:
@@ -1022,15 +1022,15 @@ extension BridgeType {
10221022 switch context {
10231023 case . importTS:
10241024 throw BridgeJSCoreError ( " Optional types are not yet supported in TypeScript imports " )
1025- case . exportSwift:
1025+ case . exportSwift, . exportSwiftProtocol :
10261026 let wrappedInfo = try wrappedType. liftingReturnInfo ( context: context)
10271027 return LiftingReturnInfo ( valueToLift: wrappedInfo. valueToLift)
10281028 }
10291029 case . array:
10301030 switch context {
10311031 case . importTS:
10321032 throw BridgeJSCoreError ( " Array types are not yet supported in TypeScript imports " )
1033- case . exportSwift:
1033+ case . exportSwift, . exportSwiftProtocol :
10341034 return LiftingReturnInfo ( valueToLift: nil )
10351035 }
10361036 }
0 commit comments