Skip to content

Commit c1007f7

Browse files
authored
jextract/jni: Always return (U)Int as long (#564)
* add 32-bit CI * fix ABI name * map `Int`through `(U)Int64` initializer
1 parent 40512d3 commit c1007f7

3 files changed

Lines changed: 27 additions & 9 deletions

File tree

‎.github/workflows/pull_request.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ jobs:
192192
swift_version: ['nightly-main']
193193
os_version: ['jammy']
194194
jdk_vendor: ['corretto']
195-
sdk_triple: ['x86_64-unknown-linux-android28']
195+
sdk_triple: ['x86_64-unknown-linux-android28', 'armv7-unknown-linux-android28']
196196
ndk_version: ['r27d']
197197
container:
198198
image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }}

‎Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift‎

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -619,11 +619,22 @@ extension JNISwift2JavaGenerator {
619619
throw JavaTranslationError.unsupportedSwiftType(swiftResult.type)
620620
}
621621

622-
return NativeResult(
623-
javaType: javaType,
624-
conversion: .getJNIValue(.placeholder),
625-
outParameters: []
626-
)
622+
if let indirectReturnType = JNIJavaTypeTranslator.indirectConversionStepSwiftType(
623+
for: knownType,
624+
from: knownTypes
625+
) {
626+
return NativeResult(
627+
javaType: javaType,
628+
conversion: .getJNIValue(.labelessInitializer(.placeholder, swiftType: indirectReturnType)),
629+
outParameters: []
630+
)
631+
} else {
632+
return NativeResult(
633+
javaType: javaType,
634+
conversion: .getJNIValue(.placeholder),
635+
outParameters: []
636+
)
637+
}
627638
}
628639
}
629640

@@ -902,6 +913,9 @@ extension JNISwift2JavaGenerator {
902913

903914
indirect case replacingPlaceholder(NativeSwiftConversionStep, placeholder: NativeSwiftConversionStep)
904915

916+
/// `SwiftType(inner)`
917+
indirect case labelessInitializer(NativeSwiftConversionStep, swiftType: SwiftType)
918+
905919
/// Returns the conversion string applied to the placeholder.
906920
func render(_ printer: inout CodePrinter, _ placeholder: String) -> String {
907921
// NOTE: 'printer' is used if the conversion wants to cause side-effects.
@@ -1396,6 +1410,10 @@ extension JNISwift2JavaGenerator {
13961410
case .replacingPlaceholder(let inner, let newPlaceholder):
13971411
let newPlaceholder = newPlaceholder.render(&printer, placeholder)
13981412
return inner.render(&printer, newPlaceholder)
1413+
1414+
case .labelessInitializer(let inner, let swiftType):
1415+
let inner = inner.render(&printer, placeholder)
1416+
return "\(swiftType)(\(inner))"
13991417
}
14001418
}
14011419
}

‎Tests/JExtractSwiftTests/JNI/JNIIntConversionChecksTests.swift‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ struct JNIIntConversionChecksTests {
152152
guard let self$ else {
153153
fatalError("self memory address was null in call to \\(#function)!")
154154
}
155-
return self$.pointee.unsignedInt.getJNIValue(in: environment)
155+
return UInt64(self$.pointee.unsignedInt).getJNIValue(in: environment)
156156
"""
157157
]
158158
)
@@ -210,7 +210,7 @@ struct JNIIntConversionChecksTests {
210210
guard let self$ else {
211211
fatalError("self memory address was null in call to \\(#function)!")
212212
}
213-
return self$.pointee.dummyFunc(arg: Int(arg$indirect)).getJNIValue(in: environment)
213+
return Int64(self$.pointee.dummyFunc(arg: Int(arg$indirect))).getJNIValue(in: environment)
214214
""",
215215
]
216216
)
@@ -238,7 +238,7 @@ struct JNIIntConversionChecksTests {
238238
guard let self$ else {
239239
fatalError("self memory address was null in call to \\(#function)!")
240240
}
241-
return self$.pointee.dummyFunc(arg: UInt(arg$indirect)).getJNIValue(in: environment)
241+
return UInt64(self$.pointee.dummyFunc(arg: UInt(arg$indirect))).getJNIValue(in: environment)
242242
""",
243243
]
244244
)

0 commit comments

Comments
 (0)