diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/StubGenerator.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/StubGenerator.kt index 3939343b015..5fb933c44c1 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/StubGenerator.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/StubGenerator.kt @@ -7,7 +7,8 @@ class StubGenerator( val nativeIndex: NativeIndex, val pkgName: String, val libName: String, - val excludedFunctions: Set) { + val excludedFunctions: Set, + val dumpShims: Boolean) { /** * The names that should not be used for struct classes to prevent name clashes @@ -583,7 +584,18 @@ class StubGenerator( out(binding.convFree.invoke(externalParamNames[i])) } } + + if (dumpShims) { + val returnValueRepresentation = retValBinding.conv("res") + out("print(\"\${${returnValueRepresentation}}\\t= \")") + out("print(\"${func.name}( \")") + val argsRepresentation = paramNames.map{"\${${it}}"}.joinToString(", ") + out("print(\"${argsRepresentation}\")") + out("println(\")\")") + } + out("return " + retValBinding.conv("res")) + } out("}") } @@ -819,4 +831,4 @@ class StubGenerator( } out("}") } -} \ No newline at end of file +} diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt index c4625721558..0d2c092c42d 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/jvm/main.kt @@ -86,6 +86,11 @@ private fun Properties.getSpaceSeparated(name: String): List { return this.getProperty(name)?.split(' ') ?: emptyList() } +private fun List?.isTrue(): Boolean { + // The rightmost wins + return this?.last() == "true" ?: false +} + private fun processLib(ktGenRoot: String, nativeLibsDir: String, llvmInstallPath: String, @@ -105,6 +110,7 @@ private fun processLib(ktGenRoot: String, val additionalHeaders = args["-h"].orEmpty() val additionalCompilerOpts = args["-copt"].orEmpty() val additionalLinkerOpts = args["-lopt"].orEmpty() + val generateShims = args["-shims"].isTrue() val headerFiles = config.getSpaceSeparated("headers") + additionalHeaders val compilerOpts = config.getSpaceSeparated("compilerOpts") + additionalCompilerOpts @@ -127,7 +133,7 @@ private fun processLib(ktGenRoot: String, val nativeIndex = buildNativeIndex(headerFiles, compilerOpts) - val gen = StubGenerator(nativeIndex, outKtPkg, libName, excludedFunctions) + val gen = StubGenerator(nativeIndex, outKtPkg, libName, excludedFunctions, generateShims) outKtFile.parentFile.mkdirs() outKtFile.bufferedWriter().use { out -> @@ -189,4 +195,4 @@ private fun buildNativeIndex(headerFiles: List, compilerOpts: List