From 8970445ff4a54536d1fc45f047899dc4886e30dc Mon Sep 17 00:00:00 2001 From: Krzysztof Rodak Date: Thu, 12 Feb 2026 10:19:49 +0100 Subject: [PATCH] NFC: BridgeJS: Simplify ExportSwift codegen by using no-arg bridgeJSLiftParameter() intrinsics --- .../Sources/BridgeJSCore/ExportSwift.swift | 55 ++++--------------- .../EnumAssociatedValue.swift | 6 +- .../BridgeJSCodegenTests/SwiftStruct.swift | 2 +- .../Generated/BridgeJS.swift | 18 +++--- 4 files changed, 24 insertions(+), 57 deletions(-) diff --git a/Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift b/Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift index 5fb6f103f..600a24e2c 100644 --- a/Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift +++ b/Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift @@ -779,30 +779,11 @@ struct StackCodegen { func liftExpression(for type: BridgeType) -> ExprSyntax { switch type { case .string, .int, .uint, .bool, .float, .double, - .jsObject(nil), .jsValue, .swiftStruct, .swiftHeapObject: + .jsObject(nil), .jsValue, .swiftStruct, .swiftHeapObject, .unsafePointer, + .swiftProtocol, .caseEnum, .associatedValueEnum, .rawValueEnum: return "\(raw: type.swiftType).bridgeJSLiftParameter()" case .jsObject(let className?): return "\(raw: className)(unsafelyWrapping: JSObject.bridgeJSLiftParameter())" - case .unsafePointer: - return "\(raw: type.swiftType).bridgeJSLiftParameter()" - case .swiftProtocol(let protocolName): - return "Any\(raw: protocolName).bridgeJSLiftParameter(_swift_js_pop_i32())" - case .caseEnum: - return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_i32())" - case .rawValueEnum(_, let rawType): - switch rawType { - case .string: - return - "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_i32(), _swift_js_pop_i32())" - case .float: - return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_f32())" - case .double: - return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_f64())" - case .bool, .int, .int32, .int64, .uint, .uint32, .uint64: - return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_i32())" - } - case .associatedValueEnum: - return "\(raw: type.swiftType).bridgeJSLiftParameter(_swift_js_pop_i32())" case .nullable(let wrappedType, let kind): return liftNullableExpression(wrappedType: wrappedType, kind: kind) case .array(let elementType): @@ -820,8 +801,6 @@ struct StackCodegen { switch elementType { case .jsObject(let className?) where className != "JSObject": return liftArrayExpressionInline(elementType: elementType) - case .swiftProtocol(let protocolName): - return "[Any\(raw: protocolName)].bridgeJSLiftParameter()" case .nullable, .closure: return liftArrayExpressionInline(elementType: elementType) case .void, .namespaceEnum: @@ -857,13 +836,6 @@ struct StackCodegen { return __dict.mapValues { \(raw: className)(unsafelyWrapping: $0) } }() """ - case .swiftProtocol(let protocolName): - return """ - { - let __dict = [String: JSObject].bridgeJSLiftParameter() - return __dict.mapValues { $0 as! Any\(raw: protocolName) } - }() - """ case .nullable, .closure: return liftDictionaryExpressionInline(valueType: valueType) case .void, .namespaceEnum: @@ -917,19 +889,14 @@ struct StackCodegen { varPrefix: String ) -> [CodeBlockItemSyntax] { switch type { - case .string, .int, .uint, .bool, .float, .double, .jsValue: - return ["\(raw: accessor).bridgeJSLowerStackReturn()"] - case .jsObject(nil): + case .string, .int, .uint, .bool, .float, .double, .jsValue, + .jsObject(nil), .swiftHeapObject, .unsafePointer, .closure, + .caseEnum, .rawValueEnum: return ["\(raw: accessor).bridgeJSLowerStackReturn()"] case .jsObject(_?): return ["\(raw: accessor).jsObject.bridgeJSLowerStackReturn()"] - case .swiftHeapObject, .unsafePointer, .closure: - return ["\(raw: accessor).bridgeJSLowerStackReturn()"] - case .swiftProtocol(let protocolName): - let wrapperName = "Any\(protocolName)" - return ["(\(raw: accessor) as! \(raw: wrapperName)).bridgeJSLowerStackReturn()"] - case .caseEnum, .rawValueEnum: - return ["\(raw: accessor).bridgeJSLowerStackReturn()"] + case .swiftProtocol: + return ["(\(raw: accessor) as! \(raw: type.swiftType)).bridgeJSLowerStackReturn()"] case .associatedValueEnum, .swiftStruct: return ["\(raw: accessor).bridgeJSLowerReturn()"] case .nullable(let wrappedType, _): @@ -951,8 +918,8 @@ struct StackCodegen { switch elementType { case .jsObject(let className?) where className != "JSObject": return ["\(raw: accessor).map { $0.jsObject }.bridgeJSLowerReturn()"] - case .swiftProtocol(let protocolName): - return ["\(raw: accessor).map { $0 as! Any\(raw: protocolName) }.bridgeJSLowerReturn()"] + case .swiftProtocol: + return ["\(raw: accessor).map { $0 as! \(raw: elementType.swiftType) }.bridgeJSLowerReturn()"] case .nullable, .closure: return lowerArrayStatementsInline( elementType: elementType, @@ -998,8 +965,8 @@ struct StackCodegen { switch valueType { case .jsObject(let className?) where className != "JSObject": return ["\(raw: accessor).mapValues { $0.jsObject }.bridgeJSLowerReturn()"] - case .swiftProtocol(let protocolName): - return ["\(raw: accessor).mapValues { $0 as! Any\(raw: protocolName) }.bridgeJSLowerReturn()"] + case .swiftProtocol: + return ["\(raw: accessor).mapValues { $0 as! \(raw: valueType.swiftType) }.bridgeJSLowerReturn()"] case .nullable, .closure: return lowerDictionaryStatementsInline( valueType: valueType, diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumAssociatedValue.swift b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumAssociatedValue.swift index 8705c929e..39582c9a9 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumAssociatedValue.swift +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumAssociatedValue.swift @@ -260,9 +260,9 @@ extension TypedPayloadResult: _BridgedSwiftAssociatedValueEnum { @_spi(BridgeJS) @_transparent public static func bridgeJSStackPopPayload(_ caseId: Int32) -> TypedPayloadResult { switch caseId { case 0: - return .precision(Precision.bridgeJSLiftParameter(_swift_js_pop_f32())) + return .precision(Precision.bridgeJSLiftParameter()) case 1: - return .direction(CardinalDirection.bridgeJSLiftParameter(_swift_js_pop_i32())) + return .direction(CardinalDirection.bridgeJSLiftParameter()) case 2: return .optPrecision(Optional.bridgeJSLiftParameter()) case 3: @@ -312,7 +312,7 @@ extension AllTypesResult: _BridgedSwiftAssociatedValueEnum { case 2: return .jsObjectPayload(JSObject.bridgeJSLiftParameter()) case 3: - return .nestedEnum(APIResult.bridgeJSLiftParameter(_swift_js_pop_i32())) + return .nestedEnum(APIResult.bridgeJSLiftParameter()) case 4: return .arrayPayload([Int].bridgeJSLiftParameter()) case 5: diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/SwiftStruct.swift b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/SwiftStruct.swift index 1ff0a4ce8..2e551452d 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/SwiftStruct.swift +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/SwiftStruct.swift @@ -223,7 +223,7 @@ fileprivate func _bjs_struct_lift_Session() -> Int32 { extension Measurement: _BridgedSwiftStruct { @_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter() -> Measurement { let optionalPrecision = Optional.bridgeJSLiftParameter() - let precision = Precision.bridgeJSLiftParameter(_swift_js_pop_f32()) + let precision = Precision.bridgeJSLiftParameter() let value = Double.bridgeJSLiftParameter() return Measurement(value: value, precision: precision, optionalPrecision: optionalPrecision) } diff --git a/Tests/BridgeJSRuntimeTests/Generated/BridgeJS.swift b/Tests/BridgeJSRuntimeTests/Generated/BridgeJS.swift index 400829a5d..07092d4bd 100644 --- a/Tests/BridgeJSRuntimeTests/Generated/BridgeJS.swift +++ b/Tests/BridgeJSRuntimeTests/Generated/BridgeJS.swift @@ -2198,7 +2198,7 @@ extension AllTypesResult: _BridgedSwiftAssociatedValueEnum { case 2: return .jsObjectPayload(JSObject.bridgeJSLiftParameter()) case 3: - return .nestedEnum(APIResult.bridgeJSLiftParameter(_swift_js_pop_i32())) + return .nestedEnum(APIResult.bridgeJSLiftParameter()) case 4: return .arrayPayload([Int].bridgeJSLiftParameter()) case 5: @@ -2240,9 +2240,9 @@ extension TypedPayloadResult: _BridgedSwiftAssociatedValueEnum { @_spi(BridgeJS) @_transparent public static func bridgeJSStackPopPayload(_ caseId: Int32) -> TypedPayloadResult { switch caseId { case 0: - return .precision(Precision.bridgeJSLiftParameter(_swift_js_pop_f32())) + return .precision(Precision.bridgeJSLiftParameter()) case 1: - return .direction(Direction.bridgeJSLiftParameter(_swift_js_pop_i32())) + return .direction(Direction.bridgeJSLiftParameter()) case 2: return .optPrecision(Optional.bridgeJSLiftParameter()) case 3: @@ -2992,7 +2992,7 @@ fileprivate func _bjs_struct_lift_Contact() -> Int32 { extension Config: _BridgedSwiftStruct { @_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter() -> Config { - let status = Status.bridgeJSLiftParameter(_swift_js_pop_i32()) + let status = Status.bridgeJSLiftParameter() let direction = Optional.bridgeJSLiftParameter() let theme = Optional.bridgeJSLiftParameter() let name = String.bridgeJSLiftParameter() @@ -3100,7 +3100,7 @@ extension ValidationReport: _BridgedSwiftStruct { @_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter() -> ValidationReport { let outcome = Optional.bridgeJSLiftParameter() let status = Optional.bridgeJSLiftParameter() - let result = APIResult.bridgeJSLiftParameter(_swift_js_pop_i32()) + let result = APIResult.bridgeJSLiftParameter() let id = Int.bridgeJSLiftParameter() return ValidationReport(id: id, result: result, status: status, outcome: outcome) } @@ -3160,8 +3160,8 @@ extension AdvancedConfig: _BridgedSwiftStruct { let location = Optional.bridgeJSLiftParameter() let metadata = Optional.bridgeJSLiftParameter() let result = Optional.bridgeJSLiftParameter() - let status = Status.bridgeJSLiftParameter(_swift_js_pop_i32()) - let theme = Theme.bridgeJSLiftParameter(_swift_js_pop_i32(), _swift_js_pop_i32()) + let status = Status.bridgeJSLiftParameter() + let theme = Theme.bridgeJSLiftParameter() let enabled = Bool.bridgeJSLiftParameter() let title = String.bridgeJSLiftParameter() let id = Int.bridgeJSLiftParameter() @@ -3226,8 +3226,8 @@ extension MeasurementConfig: _BridgedSwiftStruct { @_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter() -> MeasurementConfig { let optionalRatio = Optional.bridgeJSLiftParameter() let optionalPrecision = Optional.bridgeJSLiftParameter() - let ratio = Ratio.bridgeJSLiftParameter(_swift_js_pop_f64()) - let precision = Precision.bridgeJSLiftParameter(_swift_js_pop_f32()) + let ratio = Ratio.bridgeJSLiftParameter() + let precision = Precision.bridgeJSLiftParameter() return MeasurementConfig(precision: precision, ratio: ratio, optionalPrecision: optionalPrecision, optionalRatio: optionalRatio) }