Skip to content

Commit cd65619

Browse files
committed
print discriminator native
1 parent 8985c10 commit cd65619

File tree

3 files changed

+35
-21
lines changed

3 files changed

+35
-21
lines changed

Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -88,27 +88,13 @@ extension JNISwift2JavaGenerator {
8888
parentName: parentName
8989
)
9090

91-
let conversions = try enumCase.parameters.map {
92-
let result = SwiftResult(convention: .direct, type: $0.type)
91+
let conversions = try enumCase.parameters.enumerated().map { idx, parameter in
92+
let result = SwiftResult(convention: .direct, type: parameter.type)
9393
let translatedResult = try self.translate(swiftResult: result)
94-
let nativeResult = try nativeTranslation.translate(swiftResult: result)
94+
let nativeResult = try nativeTranslation.translate(swiftResult: result, resultName: parameter.name ?? "arg\(idx)")
9595
return (translatedResult, nativeResult)
9696
}
9797

98-
// let nativeParameters = try nativeTranslation.translateParameters(
99-
// enumCase.parameters.map {
100-
// SwiftParameter(
101-
// convention: .byValue,
102-
// argumentLabel: $0.name,
103-
// parameterName: $0.name,
104-
// type: $0.type
105-
// )
106-
// },
107-
// translatedParameters: translatedParameters,
108-
// methodName: methodName,
109-
// parentName: parentName
110-
// )
111-
11298
return TranslatedEnumCase(
11399
name: enumCase.name.firstCharacterUppercased,
114100
enumName: enumCase.enumType.nominalTypeDecl.name,

Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,8 @@ extension JNISwift2JavaGenerator {
385385
}
386386

387387
func translate(
388-
swiftResult: SwiftResult
388+
swiftResult: SwiftResult,
389+
resultName: String = "result"
389390
) throws -> NativeResult {
390391
switch swiftResult.type {
391392
case .nominal(let nominalType):
@@ -416,7 +417,7 @@ extension JNISwift2JavaGenerator {
416417

417418
return NativeResult(
418419
javaType: .long,
419-
conversion: .getJNIValue(.allocateSwiftValue(name: "result", swiftType: swiftResult.type)),
420+
conversion: .getJNIValue(.allocateSwiftValue(name: resultName, swiftType: swiftResult.type)),
420421
outParameters: []
421422
)
422423

Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,14 @@ extension JNISwift2JavaGenerator {
102102
printer.println()
103103
}
104104

105-
for enumCase in type.cases {
106-
printEnumCase(&printer, enumCase)
105+
if type.swiftNominal.kind == .enum {
106+
printEnumDiscriminator(&printer, type)
107107
printer.println()
108+
109+
for enumCase in type.cases {
110+
printEnumCase(&printer, enumCase)
111+
printer.println()
112+
}
108113
}
109114

110115
for method in type.methods {
@@ -120,6 +125,28 @@ extension JNISwift2JavaGenerator {
120125
printDestroyFunctionThunk(&printer, type)
121126
}
122127

128+
private func printEnumDiscriminator(_ printer: inout CodePrinter, _ type: ImportedNominalType) {
129+
let selfPointerParam = JavaParameter(name: "selfPointer", type: .long)
130+
printCDecl(
131+
&printer,
132+
javaMethodName: "$getDiscriminator",
133+
parentName: type.swiftNominal.name,
134+
parameters: [selfPointerParam],
135+
resultType: .int
136+
) { printer in
137+
let selfPointer = self.printSelfJLongToUnsafeMutablePointer(
138+
&printer,
139+
swiftParentName: type.swiftNominal.name,
140+
selfPointerParam
141+
)
142+
printer.printBraceBlock("switch (\(selfPointer).pointee)") { printer in
143+
for (idx, enumCase) in type.cases.enumerated() {
144+
printer.print("case .\(enumCase.name): return \(idx)")
145+
}
146+
}
147+
}
148+
}
149+
123150
private func printEnumCase(_ printer: inout CodePrinter, _ enumCase: ImportedEnumCase) {
124151
guard let translatedCase = self.translatedEnumCase(for: enumCase) else {
125152
return

0 commit comments

Comments
 (0)