Skip to content

Commit 7018c02

Browse files
authored
Merge pull request swiftwasm#623 from PassiveLogic/kr/bridgejs-lift-simplification
NFC: BridgeJS: Simplify liftExpression by using no-arg bridgeJSLiftParameter() for enums and protocols
2 parents a77ee78 + 8970445 commit 7018c02

File tree

4 files changed

+24
-57
lines changed

4 files changed

+24
-57
lines changed

Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift

Lines changed: 11 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -779,30 +779,11 @@ struct StackCodegen {
779779
func liftExpression(for type: BridgeType) -> ExprSyntax {
780780
switch type {
781781
case .string, .int, .uint, .bool, .float, .double,
782-
.jsObject(nil), .jsValue, .swiftStruct, .swiftHeapObject:
782+
.jsObject(nil), .jsValue, .swiftStruct, .swiftHeapObject, .unsafePointer,
783+
.swiftProtocol, .caseEnum, .associatedValueEnum, .rawValueEnum:
783784
return "\(raw: type.swiftType).bridgeJSLiftParameter()"
784785
case .jsObject(let className?):
785786
return "\(raw: className)(unsafelyWrapping: JSObject.bridgeJSLiftParameter())"
786-
case .unsafePointer:
787-
return "\(raw: type.swiftType).bridgeJSLiftParameter()"
788-
case .swiftProtocol(let protocolName):
789-
return "Any\(raw: protocolName).bridgeJSLiftParameter(_swift_js_pop_i32())"
790-
case .caseEnum:
791-
return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_i32())"
792-
case .rawValueEnum(_, let rawType):
793-
switch rawType {
794-
case .string:
795-
return
796-
"\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_i32(), _swift_js_pop_i32())"
797-
case .float:
798-
return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_f32())"
799-
case .double:
800-
return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_f64())"
801-
case .bool, .int, .int32, .int64, .uint, .uint32, .uint64:
802-
return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_i32())"
803-
}
804-
case .associatedValueEnum:
805-
return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_i32())"
806787
case .nullable(let wrappedType, let kind):
807788
return liftNullableExpression(wrappedType: wrappedType, kind: kind)
808789
case .array(let elementType):
@@ -820,8 +801,6 @@ struct StackCodegen {
820801
switch elementType {
821802
case .jsObject(let className?) where className != "JSObject":
822803
return liftArrayExpressionInline(elementType: elementType)
823-
case .swiftProtocol(let protocolName):
824-
return "[Any\(raw: protocolName)].bridgeJSLiftParameter()"
825804
case .nullable, .closure:
826805
return liftArrayExpressionInline(elementType: elementType)
827806
case .void, .namespaceEnum:
@@ -857,13 +836,6 @@ struct StackCodegen {
857836
return __dict.mapValues { \(raw: className)(unsafelyWrapping: $0) }
858837
}()
859838
"""
860-
case .swiftProtocol(let protocolName):
861-
return """
862-
{
863-
let __dict = [String: JSObject].bridgeJSLiftParameter()
864-
return __dict.mapValues { $0 as! Any\(raw: protocolName) }
865-
}()
866-
"""
867839
case .nullable, .closure:
868840
return liftDictionaryExpressionInline(valueType: valueType)
869841
case .void, .namespaceEnum:
@@ -917,19 +889,14 @@ struct StackCodegen {
917889
varPrefix: String
918890
) -> [CodeBlockItemSyntax] {
919891
switch type {
920-
case .string, .int, .uint, .bool, .float, .double, .jsValue:
921-
return ["\(raw: accessor).bridgeJSLowerStackReturn()"]
922-
case .jsObject(nil):
892+
case .string, .int, .uint, .bool, .float, .double, .jsValue,
893+
.jsObject(nil), .swiftHeapObject, .unsafePointer, .closure,
894+
.caseEnum, .rawValueEnum:
923895
return ["\(raw: accessor).bridgeJSLowerStackReturn()"]
924896
case .jsObject(_?):
925897
return ["\(raw: accessor).jsObject.bridgeJSLowerStackReturn()"]
926-
case .swiftHeapObject, .unsafePointer, .closure:
927-
return ["\(raw: accessor).bridgeJSLowerStackReturn()"]
928-
case .swiftProtocol(let protocolName):
929-
let wrapperName = "Any\(protocolName)"
930-
return ["(\(raw: accessor) as! \(raw: wrapperName)).bridgeJSLowerStackReturn()"]
931-
case .caseEnum, .rawValueEnum:
932-
return ["\(raw: accessor).bridgeJSLowerStackReturn()"]
898+
case .swiftProtocol:
899+
return ["(\(raw: accessor) as! \(raw: type.swiftType)).bridgeJSLowerStackReturn()"]
933900
case .associatedValueEnum, .swiftStruct:
934901
return ["\(raw: accessor).bridgeJSLowerReturn()"]
935902
case .nullable(let wrappedType, _):
@@ -951,8 +918,8 @@ struct StackCodegen {
951918
switch elementType {
952919
case .jsObject(let className?) where className != "JSObject":
953920
return ["\(raw: accessor).map { $0.jsObject }.bridgeJSLowerReturn()"]
954-
case .swiftProtocol(let protocolName):
955-
return ["\(raw: accessor).map { $0 as! Any\(raw: protocolName) }.bridgeJSLowerReturn()"]
921+
case .swiftProtocol:
922+
return ["\(raw: accessor).map { $0 as! \(raw: elementType.swiftType) }.bridgeJSLowerReturn()"]
956923
case .nullable, .closure:
957924
return lowerArrayStatementsInline(
958925
elementType: elementType,
@@ -998,8 +965,8 @@ struct StackCodegen {
998965
switch valueType {
999966
case .jsObject(let className?) where className != "JSObject":
1000967
return ["\(raw: accessor).mapValues { $0.jsObject }.bridgeJSLowerReturn()"]
1001-
case .swiftProtocol(let protocolName):
1002-
return ["\(raw: accessor).mapValues { $0 as! Any\(raw: protocolName) }.bridgeJSLowerReturn()"]
968+
case .swiftProtocol:
969+
return ["\(raw: accessor).mapValues { $0 as! \(raw: valueType.swiftType) }.bridgeJSLowerReturn()"]
1003970
case .nullable, .closure:
1004971
return lowerDictionaryStatementsInline(
1005972
valueType: valueType,

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumAssociatedValue.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,9 @@ extension TypedPayloadResult: _BridgedSwiftAssociatedValueEnum {
260260
@_spi(BridgeJS) @_transparent public static func bridgeJSStackPopPayload(_ caseId: Int32) -> TypedPayloadResult {
261261
switch caseId {
262262
case 0:
263-
return .precision(Precision.bridgeJSLiftParameter(_swift_js_pop_f32()))
263+
return .precision(Precision.bridgeJSLiftParameter())
264264
case 1:
265-
return .direction(CardinalDirection.bridgeJSLiftParameter(_swift_js_pop_i32()))
265+
return .direction(CardinalDirection.bridgeJSLiftParameter())
266266
case 2:
267267
return .optPrecision(Optional<Precision>.bridgeJSLiftParameter())
268268
case 3:
@@ -312,7 +312,7 @@ extension AllTypesResult: _BridgedSwiftAssociatedValueEnum {
312312
case 2:
313313
return .jsObjectPayload(JSObject.bridgeJSLiftParameter())
314314
case 3:
315-
return .nestedEnum(APIResult.bridgeJSLiftParameter(_swift_js_pop_i32()))
315+
return .nestedEnum(APIResult.bridgeJSLiftParameter())
316316
case 4:
317317
return .arrayPayload([Int].bridgeJSLiftParameter())
318318
case 5:

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/SwiftStruct.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ fileprivate func _bjs_struct_lift_Session() -> Int32 {
223223
extension Measurement: _BridgedSwiftStruct {
224224
@_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter() -> Measurement {
225225
let optionalPrecision = Optional<Precision>.bridgeJSLiftParameter()
226-
let precision = Precision.bridgeJSLiftParameter(_swift_js_pop_f32())
226+
let precision = Precision.bridgeJSLiftParameter()
227227
let value = Double.bridgeJSLiftParameter()
228228
return Measurement(value: value, precision: precision, optionalPrecision: optionalPrecision)
229229
}

Tests/BridgeJSRuntimeTests/Generated/BridgeJS.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2198,7 +2198,7 @@ extension AllTypesResult: _BridgedSwiftAssociatedValueEnum {
21982198
case 2:
21992199
return .jsObjectPayload(JSObject.bridgeJSLiftParameter())
22002200
case 3:
2201-
return .nestedEnum(APIResult.bridgeJSLiftParameter(_swift_js_pop_i32()))
2201+
return .nestedEnum(APIResult.bridgeJSLiftParameter())
22022202
case 4:
22032203
return .arrayPayload([Int].bridgeJSLiftParameter())
22042204
case 5:
@@ -2240,9 +2240,9 @@ extension TypedPayloadResult: _BridgedSwiftAssociatedValueEnum {
22402240
@_spi(BridgeJS) @_transparent public static func bridgeJSStackPopPayload(_ caseId: Int32) -> TypedPayloadResult {
22412241
switch caseId {
22422242
case 0:
2243-
return .precision(Precision.bridgeJSLiftParameter(_swift_js_pop_f32()))
2243+
return .precision(Precision.bridgeJSLiftParameter())
22442244
case 1:
2245-
return .direction(Direction.bridgeJSLiftParameter(_swift_js_pop_i32()))
2245+
return .direction(Direction.bridgeJSLiftParameter())
22462246
case 2:
22472247
return .optPrecision(Optional<Precision>.bridgeJSLiftParameter())
22482248
case 3:
@@ -2992,7 +2992,7 @@ fileprivate func _bjs_struct_lift_Contact() -> Int32 {
29922992

29932993
extension Config: _BridgedSwiftStruct {
29942994
@_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter() -> Config {
2995-
let status = Status.bridgeJSLiftParameter(_swift_js_pop_i32())
2995+
let status = Status.bridgeJSLiftParameter()
29962996
let direction = Optional<Direction>.bridgeJSLiftParameter()
29972997
let theme = Optional<Theme>.bridgeJSLiftParameter()
29982998
let name = String.bridgeJSLiftParameter()
@@ -3100,7 +3100,7 @@ extension ValidationReport: _BridgedSwiftStruct {
31003100
@_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter() -> ValidationReport {
31013101
let outcome = Optional<APIResult>.bridgeJSLiftParameter()
31023102
let status = Optional<Status>.bridgeJSLiftParameter()
3103-
let result = APIResult.bridgeJSLiftParameter(_swift_js_pop_i32())
3103+
let result = APIResult.bridgeJSLiftParameter()
31043104
let id = Int.bridgeJSLiftParameter()
31053105
return ValidationReport(id: id, result: result, status: status, outcome: outcome)
31063106
}
@@ -3160,8 +3160,8 @@ extension AdvancedConfig: _BridgedSwiftStruct {
31603160
let location = Optional<DataPoint>.bridgeJSLiftParameter()
31613161
let metadata = Optional<JSObject>.bridgeJSLiftParameter()
31623162
let result = Optional<APIResult>.bridgeJSLiftParameter()
3163-
let status = Status.bridgeJSLiftParameter(_swift_js_pop_i32())
3164-
let theme = Theme.bridgeJSLiftParameter(_swift_js_pop_i32(), _swift_js_pop_i32())
3163+
let status = Status.bridgeJSLiftParameter()
3164+
let theme = Theme.bridgeJSLiftParameter()
31653165
let enabled = Bool.bridgeJSLiftParameter()
31663166
let title = String.bridgeJSLiftParameter()
31673167
let id = Int.bridgeJSLiftParameter()
@@ -3226,8 +3226,8 @@ extension MeasurementConfig: _BridgedSwiftStruct {
32263226
@_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter() -> MeasurementConfig {
32273227
let optionalRatio = Optional<Ratio>.bridgeJSLiftParameter()
32283228
let optionalPrecision = Optional<Precision>.bridgeJSLiftParameter()
3229-
let ratio = Ratio.bridgeJSLiftParameter(_swift_js_pop_f64())
3230-
let precision = Precision.bridgeJSLiftParameter(_swift_js_pop_f32())
3229+
let ratio = Ratio.bridgeJSLiftParameter()
3230+
let precision = Precision.bridgeJSLiftParameter()
32313231
return MeasurementConfig(precision: precision, ratio: ratio, optionalPrecision: optionalPrecision, optionalRatio: optionalRatio)
32323232
}
32333233

0 commit comments

Comments
 (0)