[Swift Export] initial infrastructure for Swift IR
New modules 'sir', 'sir-passes', and 'sir-analysis-api' were added under 'native:swift' for creating and manipulating Swift IR elements. * `sir` contains the implementation of Swift IR. * `sir-analysis-api` contains translation from Analysis API to SIR. * `sir-passses` contains transformation passes. This groundwork will allow to progress with the Swift IR.
This commit is contained in:
committed by
Space Team
parent
d15ee71b6c
commit
cc14f11e2a
@@ -0,0 +1,20 @@
|
|||||||
|
plugins {
|
||||||
|
kotlin("jvm")
|
||||||
|
}
|
||||||
|
|
||||||
|
description = "Build Swift IR from Analysis"
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compileOnly(kotlinStdlib())
|
||||||
|
|
||||||
|
api(project(":native:swift:sir"))
|
||||||
|
api(project(":analysis:analysis-api"))
|
||||||
|
|
||||||
|
testImplementation(libs.junit4)
|
||||||
|
testImplementation(projectTests(":compiler:tests-common"))
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
"main" { projectDefault() }
|
||||||
|
"test" { projectDefault() }
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.sir.analysisapi
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.sir.SirElement
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A root interface for classes that produce Swift IR elements.
|
||||||
|
*/
|
||||||
|
interface SirFactory {
|
||||||
|
fun build(): SirElement
|
||||||
|
}
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.sir.analysisapi
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.sir.SirElement
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class FactoryTests {
|
||||||
|
@Test
|
||||||
|
fun smoke() {
|
||||||
|
val expectedString = "Element from factory"
|
||||||
|
val myFactory = object : SirFactory {
|
||||||
|
override fun build(): SirElement {
|
||||||
|
return object : SirElement {
|
||||||
|
override fun toString(): String {
|
||||||
|
return expectedString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val element = myFactory.build()
|
||||||
|
assertEquals(expectedString, element.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
plugins {
|
||||||
|
kotlin("jvm")
|
||||||
|
}
|
||||||
|
|
||||||
|
description = "Infrastructure of transformations over SIR"
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compileOnly(kotlinStdlib())
|
||||||
|
|
||||||
|
api(project(":native:swift:sir"))
|
||||||
|
|
||||||
|
testImplementation(libs.junit4)
|
||||||
|
testImplementation(projectTests(":compiler:tests-common"))
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
"main" { projectDefault() }
|
||||||
|
"test" { projectDefault() }
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.sir.passes
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.sir.SirElement
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Swift IR is supposed to be transformed by a series of passes.
|
||||||
|
* This is a base interface that all such passes should implement.
|
||||||
|
*/
|
||||||
|
interface SirPass<out R, in T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes the pass over the given [SirElement].
|
||||||
|
*
|
||||||
|
* @param element SIR element to be processed.
|
||||||
|
* @param data Additional data that is required to run the pass.
|
||||||
|
* @return The result of the pass.
|
||||||
|
*/
|
||||||
|
fun run(element: SirElement, data: T): R
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.sir.passes
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.sir.SirElement
|
||||||
|
import org.jetbrains.sir.passes.SirPass
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class SirPassTests {
|
||||||
|
@Test
|
||||||
|
fun smoke() {
|
||||||
|
val elementDescription = "mySirElement"
|
||||||
|
val mySirElement = object : SirElement {
|
||||||
|
override fun toString(): String {
|
||||||
|
return elementDescription
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val myPass = object : SirPass<String, Unit> {
|
||||||
|
override fun run(element: SirElement, data: Unit): String {
|
||||||
|
return element.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val result = myPass.run(mySirElement, Unit)
|
||||||
|
assertEquals(elementDescription, result)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
plugins {
|
||||||
|
kotlin("jvm")
|
||||||
|
}
|
||||||
|
|
||||||
|
description = "Swift Intermediate Representation"
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compileOnly(kotlinStdlib())
|
||||||
|
|
||||||
|
testImplementation(libs.junit4)
|
||||||
|
testImplementation(projectTests(":compiler:tests-common"))
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
"main" { projectDefault() }
|
||||||
|
"test" { projectDefault() }
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.sir
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A marker interface that denotes Swift IR elements.
|
||||||
|
*/
|
||||||
|
interface SirElement {
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.sir
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
|
class SirTest {
|
||||||
|
|
||||||
|
// TODO: Just a fake test to validate that everything is working. Feel free to delete.
|
||||||
|
@Test
|
||||||
|
fun exampleTest() {
|
||||||
|
val fakeElement = produceSwiftElement()
|
||||||
|
assertTrue(fakeElement is SirElement)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun produceSwiftElement(): Any {
|
||||||
|
return object : SirElement {}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -397,6 +397,11 @@ include ":plugins:compose-compiler-plugin:compiler",
|
|||||||
":plugins:compose-compiler-plugin:compiler-daemon",
|
":plugins:compose-compiler-plugin:compiler-daemon",
|
||||||
":plugins:compose-compiler-plugin:compiler-daemon:integration-tests"
|
":plugins:compose-compiler-plugin:compiler-daemon:integration-tests"
|
||||||
|
|
||||||
|
// Swift Export modules
|
||||||
|
include ":native:swift:sir",
|
||||||
|
":native:swift:sir-passes",
|
||||||
|
":native:swift:sir-analysis-api"
|
||||||
|
|
||||||
void intellij(String imlPath) {
|
void intellij(String imlPath) {
|
||||||
File imlFile = new File("${rootDir}/intellij/community/plugins/kotlin/${imlPath}")
|
File imlFile = new File("${rootDir}/intellij/community/plugins/kotlin/${imlPath}")
|
||||||
imlFile = imlFile.exists() ? imlFile : new File("${rootDir}/intellij/plugins/kotlin/${imlPath}")
|
imlFile = imlFile.exists() ? imlFile : new File("${rootDir}/intellij/plugins/kotlin/${imlPath}")
|
||||||
|
|||||||
Reference in New Issue
Block a user