@@ -1042,17 +1042,10 @@ public class ExportSwift {
1042
1042
let typeName = enumDef. swiftCallName
1043
1043
return """
1044
1044
private extension \( raw: typeName) {
1045
- static func bridgeJSLiftParameter(_ caseId: Int32, _ paramsId: Int32, _ paramsLen: Int32) -> \( raw: typeName) {
1046
- let params: [UInt8] = .init(unsafeUninitializedCapacity: Int(paramsLen)) { buf, initializedCount in
1047
- _swift_js_init_memory(paramsId, buf.baseAddress.unsafelyUnwrapped)
1048
- initializedCount = Int(paramsLen)
1049
- }
1050
- return params.withUnsafeBytes { raw in
1051
- var reader = _BJSBinaryReader(raw: raw)
1052
- switch caseId {
1053
- \( raw: generateBinaryLiftSwitchCases ( enumDef: enumDef) . joined ( separator: " \n " ) )
1054
- default: fatalError( " Unknown \( raw: typeName) case ID: \\ (caseId) " )
1055
- }
1045
+ static func bridgeJSLiftParameter(_ caseId: Int32) -> \( raw: typeName) {
1046
+ switch caseId {
1047
+ \( raw: generateStackLiftSwitchCases ( enumDef: enumDef) . joined ( separator: " \n " ) )
1048
+ default: fatalError( " Unknown \( raw: typeName) case ID: \\ (caseId) " )
1056
1049
}
1057
1050
}
1058
1051
@@ -1065,43 +1058,37 @@ public class ExportSwift {
1065
1058
"""
1066
1059
}
1067
1060
1068
- private func generateBinaryLiftSwitchCases ( enumDef: ExportedEnum ) -> [ String ] {
1061
+ private func generateStackLiftSwitchCases ( enumDef: ExportedEnum ) -> [ String ] {
1069
1062
var cases : [ String ] = [ ]
1070
1063
for (caseIndex, enumCase) in enumDef. cases. enumerated ( ) {
1071
1064
if enumCase. associatedValues. isEmpty {
1072
1065
cases. append ( " case \( caseIndex) : return . \( enumCase. name) " )
1073
1066
} else {
1074
1067
var lines : [ String ] = [ ]
1075
1068
lines. append ( " case \( caseIndex) : " )
1076
- lines . append ( " reader.readParamCount(expected: \( enumCase. associatedValues. count ) ) " )
1077
- var argList : [ String ] = [ ]
1078
-
1079
- for (paramIndex , associatedValue ) in enumCase . associatedValues . enumerated ( ) {
1080
- let paramName = associatedValue . label ?? " param \( paramIndex ) "
1081
- argList . append ( paramName)
1082
-
1069
+ let argList = enumCase. associatedValues. map { associatedValue in
1070
+ let paramName : String
1071
+ if let label = associatedValue . label {
1072
+ paramName = " \( label ) : "
1073
+ } else {
1074
+ paramName = " "
1075
+ }
1083
1076
switch associatedValue. type {
1084
1077
case . string:
1085
- lines . append ( " reader.expectTag(.string) " )
1086
- lines . append ( " let \( paramName) = reader.readString() " )
1078
+ return
1079
+ " \( paramName) String.bridgeJSLiftParameter(_swift_js_pop_param_int32(), _swift_js_pop_param_int32()) "
1087
1080
case . int:
1088
- lines. append ( " reader.expectTag(.int32) " )
1089
- lines. append ( " let \( paramName) = Int(reader.readInt32()) " )
1081
+ return " \( paramName) Int.bridgeJSLiftParameter(_swift_js_pop_param_int32()) "
1090
1082
case . bool:
1091
- lines. append ( " reader.expectTag(.bool) " )
1092
- lines. append ( " let \( paramName) = Int32(reader.readUInt8()) != 0 " )
1083
+ return " \( paramName) Bool.bridgeJSLiftParameter(_swift_js_pop_param_int32()) "
1093
1084
case . float:
1094
- lines. append ( " reader.expectTag(.float32) " )
1095
- lines. append ( " let \( paramName) = reader.readFloat32() " )
1085
+ return " \( paramName) Float.bridgeJSLiftParameter(_swift_js_pop_param_f32()) "
1096
1086
case . double:
1097
- lines. append ( " reader.expectTag(.float64) " )
1098
- lines. append ( " let \( paramName) = reader.readFloat64() " )
1087
+ return " \( paramName) Double.bridgeJSLiftParameter(_swift_js_pop_param_f64()) "
1099
1088
default :
1100
- lines. append ( " reader.expectTag(.int32) " )
1101
- lines. append ( " let \( paramName) = reader.readInt32() " )
1089
+ return " \( paramName) Int.bridgeJSLiftParameter(_swift_js_pop_param_int32()) "
1102
1090
}
1103
1091
}
1104
-
1105
1092
lines. append ( " return . \( enumCase. name) ( \( argList. joined ( separator: " , " ) ) ) " )
1106
1093
cases. append ( lines. joined ( separator: " \n " ) )
1107
1094
}
@@ -1114,26 +1101,26 @@ public class ExportSwift {
1114
1101
for (caseIndex, enumCase) in enumDef. cases. enumerated ( ) {
1115
1102
if enumCase. associatedValues. isEmpty {
1116
1103
cases. append ( " case . \( enumCase. name) : " )
1117
- cases. append ( " _swift_js_return_tag (Int32(\( caseIndex) )) " )
1104
+ cases. append ( " _swift_js_push_tag (Int32(\( caseIndex) )) " )
1118
1105
} else {
1119
1106
var bodyLines : [ String ] = [ ]
1120
- bodyLines. append ( " _swift_js_return_tag (Int32(\( caseIndex) )) " )
1107
+ bodyLines. append ( " _swift_js_push_tag (Int32(\( caseIndex) )) " )
1121
1108
for (index, associatedValue) in enumCase. associatedValues. enumerated ( ) {
1122
1109
let paramName = associatedValue. label ?? " param \( index) "
1123
1110
switch associatedValue. type {
1124
1111
case . string:
1125
1112
bodyLines. append ( " var __bjs_ \( paramName) = \( paramName) " )
1126
1113
bodyLines. append ( " __bjs_ \( paramName) .withUTF8 { ptr in " )
1127
- bodyLines. append ( " _swift_js_return_string (ptr.baseAddress, Int32(ptr.count))" )
1114
+ bodyLines. append ( " _swift_js_push_string (ptr.baseAddress, Int32(ptr.count))" )
1128
1115
bodyLines. append ( " } " )
1129
1116
case . int:
1130
- bodyLines. append ( " _swift_js_return_int (Int32(\( paramName) )) " )
1117
+ bodyLines. append ( " _swift_js_push_int (Int32(\( paramName) )) " )
1131
1118
case . bool:
1132
- bodyLines. append ( " _swift_js_return_bool (\( paramName) ? 1 : 0) " )
1119
+ bodyLines. append ( " _swift_js_push_int (\( paramName) ? 1 : 0) " )
1133
1120
case . float:
1134
- bodyLines. append ( " _swift_js_return_f32 (\( paramName) ) " )
1121
+ bodyLines. append ( " _swift_js_push_f32 (\( paramName) ) " )
1135
1122
case . double:
1136
- bodyLines. append ( " _swift_js_return_f64 (\( paramName) ) " )
1123
+ bodyLines. append ( " _swift_js_push_f64 (\( paramName) ) " )
1137
1124
default :
1138
1125
bodyLines. append (
1139
1126
" preconditionFailure( \" BridgeJS: unsupported associated value type in generated code \" ) "
@@ -1410,7 +1397,7 @@ extension BridgeType {
1410
1397
static let void = LiftingIntrinsicInfo ( parameters: [ ] )
1411
1398
static let caseEnum = LiftingIntrinsicInfo ( parameters: [ ( " value " , . i32) ] )
1412
1399
static let associatedValueEnum = LiftingIntrinsicInfo ( parameters: [
1413
- ( " caseId " , . i32) , ( " paramsId " , . i32 ) , ( " paramsLen " , . i32 ) ,
1400
+ ( " caseId " , . i32)
1414
1401
] )
1415
1402
}
1416
1403
0 commit comments