From cb19e291a358211e76f696e1761b1044e9b8f2bf Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Fri, 12 Jan 2024 13:38:51 +0200 Subject: [PATCH] [KT-63275] Implement trivial bodies in SIR functions --- .../sir/printer/SirAsSwiftSourcesPrinter.kt | 2 +- .../testData/non_empty_body.golden.swift | 5 ++++ .../printer/SirAsSwiftSourcesPrinterTests.kt | 28 +++++++++++++++++++ .../jetbrains/kotlin/sir/SirFunctionBody.kt | 9 ++++-- 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 native/swift/sir-printer/testData/non_empty_body.golden.swift diff --git a/native/swift/sir-printer/src/org/jetbrains/sir/printer/SirAsSwiftSourcesPrinter.kt b/native/swift/sir-printer/src/org/jetbrains/sir/printer/SirAsSwiftSourcesPrinter.kt index 0bd7e648be8..5f2b7745125 100644 --- a/native/swift/sir-printer/src/org/jetbrains/sir/printer/SirAsSwiftSourcesPrinter.kt +++ b/native/swift/sir-printer/src/org/jetbrains/sir/printer/SirAsSwiftSourcesPrinter.kt @@ -78,7 +78,7 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi } private fun printFunctionBody(function: SirFunction): List { - return listOf("fatalError()") + return function.body?.statements ?: listOf("fatalError()") } private val SirVisibility.swift diff --git a/native/swift/sir-printer/testData/non_empty_body.golden.swift b/native/swift/sir-printer/testData/non_empty_body.golden.swift new file mode 100644 index 00000000000..09f627c5b0c --- /dev/null +++ b/native/swift/sir-printer/testData/non_empty_body.golden.swift @@ -0,0 +1,5 @@ +public func foo( + arg1: Swift.Int32 +) -> Swift.Bool { + return foo_wrapped(arg1) +} \ No newline at end of file diff --git a/native/swift/sir-printer/tests/org/jetbrains/kotlin/sir/printer/SirAsSwiftSourcesPrinterTests.kt b/native/swift/sir-printer/tests/org/jetbrains/kotlin/sir/printer/SirAsSwiftSourcesPrinterTests.kt index 505fb829f70..a53c3d7e06e 100644 --- a/native/swift/sir-printer/tests/org/jetbrains/kotlin/sir/printer/SirAsSwiftSourcesPrinterTests.kt +++ b/native/swift/sir-printer/tests/org/jetbrains/kotlin/sir/printer/SirAsSwiftSourcesPrinterTests.kt @@ -191,6 +191,34 @@ class SirAsSwiftSourcesPrinterTests { ) } + @Test + fun `should print non-empty bodies`() { + + val module = buildModule { + name = "Test" + declarations.add( + buildFunction { + origin = SirOrigin.Unknown + visibility = SirVisibility.PUBLIC + name = "foo" + parameters.add( + SirParameter( + argumentName = "arg1", + type = SirNominalType(SirSwiftModule.int32) + ) + ) + returnType = SirNominalType(SirSwiftModule.bool) + body = SirFunctionBody(listOf("return foo_wrapped(arg1)")) + } + ) + } + + runTest( + module, + "testData/non_empty_body" + ) + } + private fun runTest(module: SirModule, goldenDataFile: String) { val expectedSwiftSrc = File(KtTestUtil.getHomeDirectory()).resolve("$goldenDataFile.golden.swift") diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirFunctionBody.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirFunctionBody.kt index ddac9c01754..4ce44e54e81 100644 --- a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirFunctionBody.kt +++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirFunctionBody.kt @@ -5,5 +5,10 @@ package org.jetbrains.kotlin.sir -class SirFunctionBody { -} \ No newline at end of file +/** + * A body of a SIR function. + * + * For now, it is just a list of statements. This is sufficient as bodies are pretty trivial. + * In the future, it may become more complicated as bridging logic becomes more sophisticated. + */ +class SirFunctionBody(val statements: List) \ No newline at end of file