Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 4 additions & 90 deletions Benchmarks/Sources/Generated/BridgeJS.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
@_spi(BridgeJS) import JavaScriptKit

extension APIResult: _BridgedSwiftAssociatedValueEnum {
private static func _bridgeJSLiftFromCaseId(_ caseId: Int32) -> APIResult {
@_spi(BridgeJS) @_transparent public static func bridgeJSStackPopPayload(_ caseId: Int32) -> APIResult {
switch caseId {
case 0:
return .success(String.bridgeJSLiftParameter())
Expand All @@ -27,9 +27,7 @@ extension APIResult: _BridgedSwiftAssociatedValueEnum {
}
}

// MARK: Protocol Export

@_spi(BridgeJS) @_transparent public consuming func bridgeJSLowerParameter() -> Int32 {
@_spi(BridgeJS) @_transparent public consuming func bridgeJSStackPushPayload() -> Int32 {
switch self {
case .success(let param0):
param0.bridgeJSLowerStackReturn()
Expand All @@ -50,42 +48,10 @@ extension APIResult: _BridgedSwiftAssociatedValueEnum {
return Int32(5)
}
}

@_spi(BridgeJS) @_transparent public static func bridgeJSLiftReturn(_ caseId: Int32) -> APIResult {
return _bridgeJSLiftFromCaseId(caseId)
}

// MARK: ExportSwift

@_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter(_ caseId: Int32) -> APIResult {
return _bridgeJSLiftFromCaseId(caseId)
}

@_spi(BridgeJS) @_transparent public consuming func bridgeJSLowerReturn() {
switch self {
case .success(let param0):
param0.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(0))
case .failure(let param0):
param0.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(1))
case .flag(let param0):
param0.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(2))
case .rate(let param0):
param0.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(3))
case .precise(let param0):
param0.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(4))
case .info:
_swift_js_push_i32(Int32(5))
}
}
}

extension ComplexResult: _BridgedSwiftAssociatedValueEnum {
private static func _bridgeJSLiftFromCaseId(_ caseId: Int32) -> ComplexResult {
@_spi(BridgeJS) @_transparent public static func bridgeJSStackPopPayload(_ caseId: Int32) -> ComplexResult {
switch caseId {
case 0:
return .success(String.bridgeJSLiftParameter())
Expand All @@ -106,9 +72,7 @@ extension ComplexResult: _BridgedSwiftAssociatedValueEnum {
}
}

// MARK: Protocol Export

@_spi(BridgeJS) @_transparent public consuming func bridgeJSLowerParameter() -> Int32 {
@_spi(BridgeJS) @_transparent public consuming func bridgeJSStackPushPayload() -> Int32 {
switch self {
case .success(let param0):
param0.bridgeJSLowerStackReturn()
Expand Down Expand Up @@ -147,56 +111,6 @@ extension ComplexResult: _BridgedSwiftAssociatedValueEnum {
return Int32(6)
}
}

@_spi(BridgeJS) @_transparent public static func bridgeJSLiftReturn(_ caseId: Int32) -> ComplexResult {
return _bridgeJSLiftFromCaseId(caseId)
}

// MARK: ExportSwift

@_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter(_ caseId: Int32) -> ComplexResult {
return _bridgeJSLiftFromCaseId(caseId)
}

@_spi(BridgeJS) @_transparent public consuming func bridgeJSLowerReturn() {
switch self {
case .success(let param0):
param0.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(0))
case .error(let param0, let param1):
param0.bridgeJSLowerStackReturn()
param1.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(1))
case .location(let param0, let param1, let param2):
param0.bridgeJSLowerStackReturn()
param1.bridgeJSLowerStackReturn()
param2.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(2))
case .status(let param0, let param1, let param2):
param0.bridgeJSLowerStackReturn()
param1.bridgeJSLowerStackReturn()
param2.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(3))
case .coordinates(let param0, let param1, let param2):
param0.bridgeJSLowerStackReturn()
param1.bridgeJSLowerStackReturn()
param2.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(4))
case .comprehensive(let param0, let param1, let param2, let param3, let param4, let param5, let param6, let param7, let param8):
param0.bridgeJSLowerStackReturn()
param1.bridgeJSLowerStackReturn()
param2.bridgeJSLowerStackReturn()
param3.bridgeJSLowerStackReturn()
param4.bridgeJSLowerStackReturn()
param5.bridgeJSLowerStackReturn()
param6.bridgeJSLowerStackReturn()
param7.bridgeJSLowerStackReturn()
param8.bridgeJSLowerStackReturn()
_swift_js_push_i32(Int32(5))
case .info:
_swift_js_push_i32(Int32(6))
}
}
}

extension SimpleStruct: _BridgedSwiftStruct {
Expand Down
63 changes: 6 additions & 57 deletions Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1199,7 +1199,9 @@ struct EnumCodegen {
let printer = CodeFragmentPrinter()
printer.write("extension \(typeName): _BridgedSwiftAssociatedValueEnum {")
printer.indent {
printer.write("private static func _bridgeJSLiftFromCaseId(_ caseId: Int32) -> \(typeName) {")
printer.write(
"@_spi(BridgeJS) @_transparent public static func bridgeJSStackPopPayload(_ caseId: Int32) -> \(typeName) {"
)
printer.indent {
printer.write("switch caseId {")
generateStackLiftSwitchCases(printer: printer, enumDef: enumDef)
Expand All @@ -1212,40 +1214,7 @@ struct EnumCodegen {
printer.write("}")
printer.nextLine()

printer.write("// MARK: Protocol Export")
printer.nextLine()

printer.write("@_spi(BridgeJS) @_transparent public consuming func bridgeJSLowerParameter() -> Int32 {")
printer.indent {
printer.write("switch self {")
generateLowerParameterSwitchCases(printer: printer, enumDef: enumDef)
printer.write("}")
}
printer.write("}")
printer.nextLine()

printer.write(
multilineString: """
@_spi(BridgeJS) @_transparent public static func bridgeJSLiftReturn(_ caseId: Int32) -> \(typeName) {
return _bridgeJSLiftFromCaseId(caseId)
}
"""
)
printer.nextLine()

printer.write("// MARK: ExportSwift")
printer.nextLine()

printer.write(
multilineString: """
@_spi(BridgeJS) @_transparent public static func bridgeJSLiftParameter(_ caseId: Int32) -> \(typeName) {
return _bridgeJSLiftFromCaseId(caseId)
}
"""
)
printer.nextLine()

printer.write("@_spi(BridgeJS) @_transparent public consuming func bridgeJSLowerReturn() {")
printer.write("@_spi(BridgeJS) @_transparent public consuming func bridgeJSStackPushPayload() -> Int32 {")
printer.indent {
printer.write("switch self {")
generateReturnSwitchCases(printer: printer, enumDef: enumDef)
Expand Down Expand Up @@ -1298,32 +1267,12 @@ struct EnumCodegen {
}
}

private func generateLowerParameterSwitchCases(printer: CodeFragmentPrinter, enumDef: ExportedEnum) {
for (caseIndex, enumCase) in enumDef.cases.enumerated() {
if enumCase.associatedValues.isEmpty {
printer.write("case .\(enumCase.name):")
printer.indent {
printer.write("return Int32(\(caseIndex))")
}
} else {
let pattern = enumCase.associatedValues.enumerated()
.map { index, associatedValue in "let \(associatedValue.label ?? "param\(index)")" }
.joined(separator: ", ")
printer.write("case .\(enumCase.name)(\(pattern)):")
printer.indent {
generatePayloadPushingCode(printer: printer, associatedValues: enumCase.associatedValues)
printer.write("return Int32(\(caseIndex))")
}
}
}
}

private func generateReturnSwitchCases(printer: CodeFragmentPrinter, enumDef: ExportedEnum) {
for (caseIndex, enumCase) in enumDef.cases.enumerated() {
if enumCase.associatedValues.isEmpty {
printer.write("case .\(enumCase.name):")
printer.indent {
printer.write("_swift_js_push_i32(Int32(\(caseIndex)))")
printer.write("return Int32(\(caseIndex))")
}
} else {
let pattern = enumCase.associatedValues.enumerated()
Expand All @@ -1334,7 +1283,7 @@ struct EnumCodegen {
generatePayloadPushingCode(printer: printer, associatedValues: enumCase.associatedValues)
// Push tag AFTER payloads so it's popped first (LIFO) by the JS lift function.
// This ensures nested enum tags don't overwrite the outer tag.
printer.write("_swift_js_push_i32(Int32(\(caseIndex)))")
printer.write("return Int32(\(caseIndex))")
}
}
}
Expand Down
Loading