[Swift Export] Check SIR validity in pass tests

This commit is contained in:
Sergey Bogolepov
2023-12-11 23:01:52 +02:00
committed by Space Team
parent 9fde7e0d35
commit 00caf0f1e1
3 changed files with 31 additions and 5 deletions
@@ -31,7 +31,14 @@ internal abstract class DeclarationParentVisitor : SirVisitor<Unit, Nothing?>()
}
override fun visitDeclaration(declaration: SirDeclaration, data: Nothing?) {
handleParent(declaration, declarationParentStack.peekFirst())
// Special case if visitor is started not from the module node.
// In this case we assume that parent is set properly.
val currentParent = if (declarationParentStack.size == 0) {
declaration.parent
} else {
declarationParentStack.peekFirst()
}
handleParent(declaration, currentParent)
if (declaration is SirDeclarationParent) {
declarationParentStack.push(declaration)
@@ -17,9 +17,11 @@ import org.jetbrains.kotlin.sir.mock.MockKotlinType
import org.jetbrains.kotlin.sir.mock.MockParameter
import org.jetbrains.kotlin.sir.passes.asserts.assertSirFunctionsEquals
import org.jetbrains.kotlin.sir.passes.mocks.MockSirFunction
import org.jetbrains.kotlin.sir.passes.util.runWithAsserts
import org.jetbrains.kotlin.sir.util.SirSwiftModule
import org.jetbrains.sir.passes.run
import org.jetbrains.sir.passes.translation.ForeignIntoSwiftFunctionTranslationPass
import org.jetbrains.sir.passes.utility.assertValid
import kotlin.test.Test
import kotlin.test.assertNotNull
@@ -38,9 +40,8 @@ class SirPassTests {
visibility = SirVisibility.PUBLIC
}
mySirElement.parent = module
val myPass = ForeignIntoSwiftFunctionTranslationPass()
val result = myPass.run(mySirElement) as? SirFunction
val result = myPass.runWithAsserts(mySirElement, null) as? SirFunction
assertNotNull(result, "SirFunction should be produced")
val exp = MockSirFunction(
name = "foo",
@@ -94,9 +95,8 @@ class SirPassTests {
visibility = SirVisibility.PUBLIC
}
mySirElement.parent = module
val myPass = ForeignIntoSwiftFunctionTranslationPass()
val result = myPass.run(mySirElement) as? SirFunction
val result = myPass.runWithAsserts(mySirElement, null) as? SirFunction
assertNotNull(result, "SirFunction should be produced")
val exp = MockSirFunction(
name = "foo",
@@ -0,0 +1,19 @@
/*
* 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.util
import org.jetbrains.kotlin.sir.SirElement
import org.jetbrains.sir.passes.SirPass
import org.jetbrains.sir.passes.utility.assertValid
fun <S : SirElement, R, T> SirPass<S, T, R>.runWithAsserts(element: S, data: T): R {
element.assertValid()
val result = run(element, data)
if (result is SirElement) {
result.assertValid()
}
return result
}