Skip to content

Commit 886beb9

Browse files
implied the suggestions
1 parent 526bbce commit 886beb9

3 files changed

Lines changed: 31 additions & 36 deletions

File tree

Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaBindingsPrinting.swift

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -771,14 +771,11 @@ extension FFMSwift2JavaGenerator.JavaConversionStep {
771771
return inner.render(&printer, root, placeholderForDowncall: placeholderForDowncall)
772772

773773
case .tupleFromOutParams(let tupleClassName, let elements):
774-
var args: [String] = []
775-
for element in elements {
776-
args.append(
777-
element.elementConversion.render(
778-
&printer,
779-
element.outParamName,
780-
placeholderForDowncall: placeholderForDowncall
781-
)
774+
let args = elements.map { element in
775+
element.elementConversion.render(
776+
&printer,
777+
element.outParamName,
778+
placeholderForDowncall: placeholderForDowncall
782779
)
783780
}
784781
return "\(tupleClassName)(\(args.joined(separator: ", ")))"

Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaTranslation.swift

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ extension FFMSwift2JavaGenerator {
474474
conversion: .placeholder
475475
)
476476

477-
case .tuple(let elements) where !elements.isEmpty:
477+
case .tuple(let elements):
478478
return try translateTupleParameter(
479479
elements: elements,
480480
convention: convention,
@@ -484,9 +484,6 @@ extension FFMSwift2JavaGenerator {
484484
genericRequirements: genericRequirements
485485
)
486486

487-
case .tuple:
488-
throw JavaTranslationError.unhandledType(swiftType)
489-
490487
case .function:
491488
return TranslatedParameter(
492489
javaParameters: [
@@ -801,15 +798,12 @@ extension FFMSwift2JavaGenerator {
801798
conversion: .placeholder
802799
)
803800

804-
case .tuple(let elements) where !elements.isEmpty:
801+
case .tuple(let elements):
805802
return try translateTupleResult(
806803
elements: elements,
807804
resultAnnotations: resultAnnotations
808805
)
809806

810-
case .tuple:
811-
throw JavaTranslationError.unhandledType(swiftType)
812-
813807
case .array(let wrapped) where wrapped == knownTypes.uint8:
814808
return TranslatedResult(
815809
javaResultType:
@@ -866,12 +860,11 @@ extension FFMSwift2JavaGenerator {
866860

867861
}
868862

869-
/// Tuple results: indirect `MemorySegment` per element, then `new TupleN<>(…)` (mirrors JNI out-arrays).
863+
/// Tuple results: indirect `MemorySegment` per element, then `new TupleN<>(…)` (mirrors JNI out-arrays).
870864
func translateTupleResult(
871865
elements: [SwiftTupleElement],
872866
resultAnnotations: [JavaAnnotation]
873867
) throws -> TranslatedResult {
874-
let arity = elements.count
875868
var outParameters: [JavaParameter] = []
876869
var tupleElements: [(outParamName: String, elementConversion: JavaConversionStep)] = []
877870
var elementJavaTypes: [JavaType] = []
@@ -884,14 +877,14 @@ extension FFMSwift2JavaGenerator {
884877
}
885878

886879
let javaResultType: JavaType = .tuple(elementTypes: elementJavaTypes)
887-
let fullTupleClassName = "org.swift.swiftkit.core.tuple.Tuple\(arity)"
880+
let fullTupleClassName = javaResultType.fullyQualifiedClassName!
888881

889882
return TranslatedResult(
890883
javaResultType: javaResultType,
891884
annotations: resultAnnotations,
892885
outParameters: outParameters,
893886
conversion: .tupleFromOutParams(
894-
tupleClassName: "new \(fullTupleClassName)<>",
887+
tupleClassName: "new \(fullTupleClassName)",
895888
elements: tupleElements
896889
)
897890
)

Tests/JExtractSwiftTests/FFM/FFMTupleTests.swift

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,6 @@
1515
import JExtractSwiftLib
1616
import Testing
1717

18-
/// FFM tuple binding tests, aligned with `JNITupleTests` where lowering allows it.
19-
///
20-
/// JNI uses `(Int64, String)` for `returnPair` / `takePair`; FFM `lowerResult` does not support
21-
/// `String` in tuple results yet, so those signatures use `(Int64, Int64)` here.
2218
@Suite
2319
struct FFMTupleTests {
2420
let source = """
@@ -40,7 +36,7 @@ struct FFMTupleTests {
4036
MemorySegment _result_0 = arena$.allocate(SwiftValueLayout.SWIFT_INT64);
4137
MemorySegment _result_1 = arena$.allocate(SwiftValueLayout.SWIFT_INT64);
4238
swiftjava_SwiftModule_returnPair.call(_result_0, _result_1);
43-
return new org.swift.swiftkit.core.tuple.Tuple2<>(_result_0.get(SwiftValueLayout.SWIFT_INT64, 0), _result_1.get(SwiftValueLayout.SWIFT_INT64, 0));
39+
return new org.swift.swiftkit.core.tuple.Tuple2<Long, Long>(_result_0.get(SwiftValueLayout.SWIFT_INT64, 0), _result_1.get(SwiftValueLayout.SWIFT_INT64, 0));
4440
}
4541
}
4642
"""
@@ -76,7 +72,7 @@ struct FFMTupleTests {
7672
public static org.swift.swiftkit.core.tuple.Tuple2<Integer, Integer> labeledTuple() {
7773
""",
7874
"""
79-
return new org.swift.swiftkit.core.tuple.Tuple2<>(_result_0.get(SwiftValueLayout.SWIFT_INT32, 0), _result_1.get(SwiftValueLayout.SWIFT_INT32, 0));
75+
return new org.swift.swiftkit.core.tuple.Tuple2<Integer, Integer>(_result_0.get(SwiftValueLayout.SWIFT_INT32, 0), _result_1.get(SwiftValueLayout.SWIFT_INT32, 0));
8076
"""
8177
]
8278
)
@@ -88,12 +84,15 @@ struct FFMTupleTests {
8884
input: source,
8985
.ffm,
9086
.swift,
91-
detectChunkByInitialLines: 1,
87+
detectChunkByInitialLines: 2,
9288
expectedChunks: [
9389
"""
94-
let _result = returnPair()
95-
_result_0.initialize(to: _result.0)
96-
_result_1.initialize(to: _result.1)
90+
@_cdecl("swiftjava_SwiftModule_returnPair")
91+
public func swiftjava_SwiftModule_returnPair(_ _result_0: UnsafeMutablePointer<Int64>, _ _result_1: UnsafeMutablePointer<Int64>) {
92+
let _result = returnPair()
93+
_result_0.initialize(to: _result.0)
94+
_result_1.initialize(to: _result.1)
95+
}
9796
"""
9897
]
9998
)
@@ -105,10 +104,13 @@ struct FFMTupleTests {
105104
input: source,
106105
.ffm,
107106
.swift,
108-
detectChunkByInitialLines: 1,
107+
detectChunkByInitialLines: 2,
109108
expectedChunks: [
110109
"""
111-
takePair((arg_0, arg_1))
110+
@_cdecl("swiftjava_SwiftModule_takePair__")
111+
public func swiftjava_SwiftModule_takePair__(_ arg_0: Int64, _ arg_1: Int64) {
112+
takePair((arg_0, arg_1))
113+
}
112114
"""
113115
]
114116
)
@@ -120,12 +122,15 @@ struct FFMTupleTests {
120122
input: source,
121123
.ffm,
122124
.swift,
123-
detectChunkByInitialLines: 1,
125+
detectChunkByInitialLines: 2,
124126
expectedChunks: [
125127
"""
126-
let _result = labeledTuple()
127-
_result_0.initialize(to: _result.0)
128-
_result_1.initialize(to: _result.1)
128+
@_cdecl("swiftjava_SwiftModule_labeledTuple")
129+
public func swiftjava_SwiftModule_labeledTuple(_ _result_0: UnsafeMutablePointer<Int32>, _ _result_1: UnsafeMutablePointer<Int32>) {
130+
let _result = labeledTuple()
131+
_result_0.initialize(to: _result.0)
132+
_result_1.initialize(to: _result.1)
133+
}
129134
"""
130135
]
131136
)

0 commit comments

Comments
 (0)