[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?) {
|
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) {
|
if (declaration is SirDeclarationParent) {
|
||||||
declarationParentStack.push(declaration)
|
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.mock.MockParameter
|
||||||
import org.jetbrains.kotlin.sir.passes.asserts.assertSirFunctionsEquals
|
import org.jetbrains.kotlin.sir.passes.asserts.assertSirFunctionsEquals
|
||||||
import org.jetbrains.kotlin.sir.passes.mocks.MockSirFunction
|
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.kotlin.sir.util.SirSwiftModule
|
||||||
import org.jetbrains.sir.passes.run
|
import org.jetbrains.sir.passes.run
|
||||||
import org.jetbrains.sir.passes.translation.ForeignIntoSwiftFunctionTranslationPass
|
import org.jetbrains.sir.passes.translation.ForeignIntoSwiftFunctionTranslationPass
|
||||||
|
import org.jetbrains.sir.passes.utility.assertValid
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertNotNull
|
import kotlin.test.assertNotNull
|
||||||
|
|
||||||
@@ -38,9 +40,8 @@ class SirPassTests {
|
|||||||
visibility = SirVisibility.PUBLIC
|
visibility = SirVisibility.PUBLIC
|
||||||
}
|
}
|
||||||
mySirElement.parent = module
|
mySirElement.parent = module
|
||||||
|
|
||||||
val myPass = ForeignIntoSwiftFunctionTranslationPass()
|
val myPass = ForeignIntoSwiftFunctionTranslationPass()
|
||||||
val result = myPass.run(mySirElement) as? SirFunction
|
val result = myPass.runWithAsserts(mySirElement, null) as? SirFunction
|
||||||
assertNotNull(result, "SirFunction should be produced")
|
assertNotNull(result, "SirFunction should be produced")
|
||||||
val exp = MockSirFunction(
|
val exp = MockSirFunction(
|
||||||
name = "foo",
|
name = "foo",
|
||||||
@@ -94,9 +95,8 @@ class SirPassTests {
|
|||||||
visibility = SirVisibility.PUBLIC
|
visibility = SirVisibility.PUBLIC
|
||||||
}
|
}
|
||||||
mySirElement.parent = module
|
mySirElement.parent = module
|
||||||
|
|
||||||
val myPass = ForeignIntoSwiftFunctionTranslationPass()
|
val myPass = ForeignIntoSwiftFunctionTranslationPass()
|
||||||
val result = myPass.run(mySirElement) as? SirFunction
|
val result = myPass.runWithAsserts(mySirElement, null) as? SirFunction
|
||||||
assertNotNull(result, "SirFunction should be produced")
|
assertNotNull(result, "SirFunction should be produced")
|
||||||
val exp = MockSirFunction(
|
val exp = MockSirFunction(
|
||||||
name = "foo",
|
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