Support for Unsigned Types in swift export #KT-65668 fixed
Merge-request: KT-MR-14300 Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
@@ -5,7 +5,9 @@ plugins {
|
||||
tasks.register("sirAllTests") {
|
||||
dependsOn(
|
||||
":native:swift:sir-compiler-bridge:test",
|
||||
":native:swift:sir-printer:test",
|
||||
":native:swift:swift-export-standalone:test",
|
||||
":native:swift:sir-printer:test"
|
||||
)
|
||||
if (kotlinBuildProperties.isKotlinNativeEnabled) {
|
||||
dependsOn(":native:swift:swift-export-standalone:test")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,9 +41,8 @@ sourceSets {
|
||||
|
||||
val testDataDir = projectDir.resolve("testData")
|
||||
|
||||
projectTest(jUnitMode = JUnitMode.JUnit5) {
|
||||
val test by nativeTest("test", null) {
|
||||
inputs.dir(testDataDir)
|
||||
dependsOn(":dist")
|
||||
workingDir = rootDir
|
||||
useJUnitPlatform { }
|
||||
}
|
||||
|
||||
+16
-6
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.swiftexport.standalone
|
||||
|
||||
import org.jetbrains.kotlin.konan.target.Distribution
|
||||
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportConfig.Companion.BRIDGE_MODULE_NAME
|
||||
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportConfig.Companion.DEBUG_MODE_ENABLED
|
||||
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportConfig.Companion.DEFAULT_BRIDGE_MODULE_NAME
|
||||
@@ -12,11 +13,13 @@ import org.jetbrains.kotlin.swiftexport.standalone.builders.buildFunctionBridges
|
||||
import org.jetbrains.kotlin.swiftexport.standalone.builders.buildSwiftModule
|
||||
import org.jetbrains.kotlin.swiftexport.standalone.transformation.transformToSwift
|
||||
import org.jetbrains.kotlin.swiftexport.standalone.writer.dumpResultToFiles
|
||||
import org.jetbrains.kotlin.utils.KotlinNativePaths
|
||||
import java.nio.file.Path
|
||||
|
||||
public data class SwiftExportConfig(
|
||||
val settings: Map<String, String>,
|
||||
val logger: SwiftExportLogger,
|
||||
val settings: Map<String, String> = emptyMap(),
|
||||
val logger: SwiftExportLogger = createDummyLogger(),
|
||||
val distribution: Distribution = Distribution(KotlinNativePaths.homePath.absolutePath)
|
||||
) {
|
||||
public companion object {
|
||||
public const val DEBUG_MODE_ENABLED: String = "DEBUG_MODE_ENABLED"
|
||||
@@ -73,18 +76,25 @@ public fun createDummyLogger(): SwiftExportLogger = object : SwiftExportLogger {
|
||||
*/
|
||||
public fun runSwiftExport(
|
||||
input: SwiftExportInput,
|
||||
config: SwiftExportConfig = SwiftExportConfig(emptyMap(), createDummyLogger()),
|
||||
config: SwiftExportConfig = SwiftExportConfig(),
|
||||
output: SwiftExportOutput,
|
||||
) {
|
||||
val isDebugModeEnabled = config.settings.containsKey(DEBUG_MODE_ENABLED)
|
||||
val bridgeModuleName = config.settings.getOrElse(BRIDGE_MODULE_NAME) {
|
||||
config.logger.report(SwiftExportLogger.Severity.Warning,
|
||||
"Bridging header is not set. Using $DEFAULT_BRIDGE_MODULE_NAME instead")
|
||||
config.logger.report(
|
||||
SwiftExportLogger.Severity.Warning,
|
||||
"Bridging header is not set. Using $DEFAULT_BRIDGE_MODULE_NAME instead"
|
||||
)
|
||||
DEFAULT_BRIDGE_MODULE_NAME
|
||||
}
|
||||
|
||||
|
||||
val module = buildSwiftModule(input, isDebugModeEnabled, bridgeModuleName)
|
||||
val module = buildSwiftModule(
|
||||
input,
|
||||
config.distribution,
|
||||
isDebugModeEnabled,
|
||||
bridgeModuleName
|
||||
)
|
||||
.transformToSwift()
|
||||
val bridgeRequests = module.buildFunctionBridges()
|
||||
module.dumpResultToFiles(bridgeRequests, output)
|
||||
|
||||
+13
@@ -10,7 +10,9 @@ import org.jetbrains.kotlin.analysis.api.analyze
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeTokenProvider
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.KtAlwaysAccessibleLifetimeTokenProvider
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.buildStandaloneAnalysisAPISession
|
||||
import org.jetbrains.kotlin.analysis.project.structure.builder.buildKtLibraryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.builder.buildKtSourceModule
|
||||
import org.jetbrains.kotlin.konan.target.Distribution
|
||||
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.sir.SirModule
|
||||
@@ -18,10 +20,12 @@ import org.jetbrains.kotlin.sir.builder.buildImport
|
||||
import org.jetbrains.kotlin.sir.builder.buildModule
|
||||
import org.jetbrains.kotlin.swiftexport.standalone.SwiftExportInput
|
||||
import org.jetbrains.sir.passes.builder.buildSirDeclarationList
|
||||
import kotlin.io.path.Path
|
||||
|
||||
@OptIn(KtAnalysisApiInternals::class)
|
||||
internal fun buildSwiftModule(
|
||||
input: SwiftExportInput,
|
||||
kotlinDistribution: Distribution,
|
||||
shouldSortInputFiles: Boolean,
|
||||
bridgeModuleName: String,
|
||||
): SirModule {
|
||||
@@ -31,11 +35,20 @@ internal fun buildSwiftModule(
|
||||
buildKtModuleProvider {
|
||||
platform = NativePlatforms.unspecifiedNativePlatform
|
||||
|
||||
val stdlib = addModule(
|
||||
buildKtLibraryModule {
|
||||
addBinaryRoot(Path(kotlinDistribution.stdlib))
|
||||
platform = NativePlatforms.unspecifiedNativePlatform
|
||||
libraryName = "stdlib"
|
||||
}
|
||||
)
|
||||
|
||||
addModule(
|
||||
buildKtSourceModule {
|
||||
addSourceRoot(input.sourceRoot)
|
||||
platform = NativePlatforms.unspecifiedNativePlatform
|
||||
moduleName = "main"
|
||||
addRegularDependency(stdlib)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ void namespace1_local_functions_foo();
|
||||
|
||||
int32_t namespace1_main_foobar__TypesOfArguments__int32_t__(int32_t param);
|
||||
|
||||
void namespace1_main_all_args__TypesOfArguments___Bool_int8_t_int16_t_int32_t_int64_t_float_double__(_Bool arg1, int8_t arg2, int16_t arg3, int32_t arg4, int64_t arg5, float arg10, double arg11);
|
||||
void namespace1_main_all_args__TypesOfArguments___Bool_int8_t_int16_t_int32_t_int64_t_uint8_t_uint16_t_uint32_t_uint64_t_float_double__(_Bool arg1, int8_t arg2, int16_t arg3, int32_t arg4, int64_t arg5, uint8_t arg6, uint16_t arg7, uint32_t arg8, uint64_t arg9, float arg10, double arg11);
|
||||
|
||||
int32_t namespace1_bar();
|
||||
|
||||
|
||||
+3
-3
@@ -12,9 +12,9 @@ public fun namespace1_main_foobar(param: Int): Int {
|
||||
return result
|
||||
}
|
||||
|
||||
@ExportedBridge("namespace1_main_all_args__TypesOfArguments___Bool_int8_t_int16_t_int32_t_int64_t_float_double__")
|
||||
public fun namespace1_main_all_args(arg1: Boolean, arg2: Byte, arg3: Short, arg4: Int, arg5: Long, arg10: Float, arg11: Double): Unit {
|
||||
val result = namespace1.main.all_args(arg1, arg2, arg3, arg4, arg5, arg10, arg11)
|
||||
@ExportedBridge("namespace1_main_all_args__TypesOfArguments___Bool_int8_t_int16_t_int32_t_int64_t_uint8_t_uint16_t_uint32_t_uint64_t_float_double__")
|
||||
public fun namespace1_main_all_args(arg1: Boolean, arg2: Byte, arg3: Short, arg4: Int, arg5: Long, arg6: UByte, arg7: UShort, arg8: UInt, arg9: ULong, arg10: Float, arg11: Double): Unit {
|
||||
val result = namespace1.main.all_args(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11)
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
+5
-1
@@ -18,10 +18,14 @@ public enum namespace1 {
|
||||
arg3: Swift.Int16,
|
||||
arg4: Swift.Int32,
|
||||
arg5: Swift.Int64,
|
||||
arg6: Swift.UInt8,
|
||||
arg7: Swift.UInt16,
|
||||
arg8: Swift.UInt32,
|
||||
arg9: Swift.UInt64,
|
||||
arg10: Swift.Float,
|
||||
arg11: Swift.Double
|
||||
) -> Swift.Void {
|
||||
namespace1_main_all_args__TypesOfArguments___Bool_int8_t_int16_t_int32_t_int64_t_float_double__(arg1, arg2, arg3, arg4, arg5, arg10, arg11)
|
||||
namespace1_main_all_args__TypesOfArguments___Bool_int8_t_int16_t_int32_t_int64_t_uint8_t_uint16_t_uint32_t_uint64_t_float_double__(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11)
|
||||
}
|
||||
}
|
||||
public static func bar() -> Swift.Int32 {
|
||||
|
||||
@@ -13,11 +13,10 @@ fun all_args(
|
||||
arg4: Int,
|
||||
arg5: Long,
|
||||
|
||||
// TODO: support kotlin Unsigned types - KT-65668
|
||||
// arg6: UByte,
|
||||
// arg7: UShort,
|
||||
// arg8: UInt,
|
||||
// arg9: ULong,
|
||||
arg6: UByte,
|
||||
arg7: UShort,
|
||||
arg8: UInt,
|
||||
arg9: ULong,
|
||||
|
||||
arg10: Float,
|
||||
arg11: Double,
|
||||
|
||||
+11
-1
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.swiftexport.standalone
|
||||
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import org.jetbrains.kotlin.konan.target.Distribution
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import kotlin.io.path.*
|
||||
|
||||
@@ -41,7 +42,8 @@ abstract class AbstractSwiftRunnerTestBase {
|
||||
SwiftExportConfig.DEBUG_MODE_ENABLED to "true",
|
||||
SwiftExportConfig.BRIDGE_MODULE_NAME to SwiftExportConfig.DEFAULT_BRIDGE_MODULE_NAME,
|
||||
),
|
||||
logger = createDummyLogger()
|
||||
logger = createDummyLogger(),
|
||||
distribution = Distribution(KonanHome.konanHomePath),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -50,3 +52,11 @@ abstract class AbstractSwiftRunnerTestBase {
|
||||
KotlinTestUtils.assertEqualsToFile(expectedKotlinBridge, output.kotlinBridges.readText())
|
||||
}
|
||||
}
|
||||
|
||||
private object KonanHome {
|
||||
private const val KONAN_HOME_PROPERTY_KEY = "kotlin.internal.native.test.nativeHome"
|
||||
|
||||
val konanHomePath: String
|
||||
get() = System.getProperty(KONAN_HOME_PROPERTY_KEY)
|
||||
?: error("Missing System property: '$KONAN_HOME_PROPERTY_KEY'")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user