[Swift Export] Check SIR validity in pass tests
This commit is contained in:
committed by
Space Team
parent
9fde7e0d35
commit
00caf0f1e1
+8
-1
@@ -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",
|
||||
|
||||
+19
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user