[TESTS] Add abstraction at IrBackendInput to work with several backends

This commit is contained in:
Ivan Kylchik
2021-10-25 13:51:11 +03:00
parent 701a10d643
commit 108d6b63dd
9 changed files with 40 additions and 13 deletions
@@ -21,10 +21,10 @@ class IrInlineBodiesHandler(testServices: TestServices) : AbstractIrHandler(test
val declaredInlineFunctionSignatures = mutableSetOf<IdSignature>()
override fun processModule(module: TestModule, info: IrBackendInput) {
val irModule = info.backendInput.irModuleFragment
val irModule = info.irModuleFragment
irModule.acceptChildrenVoid(InlineFunctionsCollector())
irModule.acceptChildrenVoid(InlineCallBodiesCheck())
assertions.assertTrue(info.backendInput.symbolTable.allUnbound.isEmpty())
assertions.assertTrue((info as IrBackendInput.JvmIrBackendInput).backendInput.symbolTable.allUnbound.isEmpty())
}
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
@@ -27,7 +27,7 @@ open class IrInterpreterBackendHandler(testServices: TestServices) : AbstractIrH
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
override fun processModule(module: TestModule, info: IrBackendInput) {
val moduleFragment = info.backendInput.irModuleFragment
val moduleFragment = info.irModuleFragment
val evaluator = Evaluator(IrInterpreter(moduleFragment.irBuiltins), globalMetadataInfoHandler)
for ((irFile, testFile) in moduleFragment.files.zip(module.files)) {
if (testFile.isAdditional) continue
@@ -36,7 +36,7 @@ class IrPrettyKotlinDumpHandler(testServices: TestServices) : AbstractIrHandler(
override fun processModule(module: TestModule, info: IrBackendInput) {
if (DUMP_KT_IR !in module.directives || SKIP_KT_DUMP in module.directives) return
val irFiles = info.backendInput.irModuleFragment.files
val irFiles = info.irModuleFragment.files
val builder = dumper.builderForModule(module)
val filteredIrFiles = irFiles.groupWithTestFiles(module).filterNot {
it.first?.directives?.contains(EXTERNAL_FILE) == true
@@ -63,7 +63,7 @@ class IrTextDumpHandler(testServices: TestServices) : AbstractIrHandler(testServ
@OptIn(ExperimentalStdlibApi::class)
override fun processModule(module: TestModule, info: IrBackendInput) {
if (DUMP_IR !in module.directives) return
val irFiles = info.backendInput.irModuleFragment.files
val irFiles = info.irModuleFragment.files
val testFileToIrFile = irFiles.groupWithTestFiles(module)
val builder = baseDumper.builderForModule(module)
for ((testFile, irFile) in testFileToIrFile) {
@@ -87,7 +87,7 @@ class IrTextDumpHandler(testServices: TestServices) : AbstractIrHandler(testServ
// TODO: why JS one is used here in original AbstractIrTextTestCase?
val mangler = JsManglerDesc
val signaturer = IdSignatureDescriptor(mangler)
val irModule = info.backendInput.irModuleFragment
val irModule = info.irModuleFragment
val stubGenerator = DeclarationStubGeneratorImpl(
irModule.descriptor,
SymbolTable(signaturer, IrFactoryImpl), // TODO
@@ -22,7 +22,7 @@ class IrTreeVerifierHandler(testServices: TestServices) : AbstractIrHandler(test
override fun processModule(module: TestModule, info: IrBackendInput) {
if (CodegenTestDirectives.DUMP_IR !in module.directives) return
val irFiles = info.backendInput.irModuleFragment.files
val irFiles = info.irModuleFragment.files
val testFileToIrFile = irFiles.groupWithTestFiles(module)
for ((testFile, irFile) in testFileToIrFile) {
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
@@ -7,14 +7,35 @@ package org.jetbrains.kotlin.test.backend.ir
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.test.model.BackendKinds
import org.jetbrains.kotlin.test.model.ResultingArtifact
// IR backend (JVM, JS, Native)
data class IrBackendInput(
val state: GenerationState,
val backendInput: JvmIrCodegenFactory.JvmIrBackendInput
) : ResultingArtifact.BackendInput<IrBackendInput>() {
sealed class IrBackendInput : ResultingArtifact.BackendInput<IrBackendInput>() {
override val kind: BackendKinds.IrBackend
get() = BackendKinds.IrBackend
abstract val irModuleFragment: IrModuleFragment
data class JsIrBackendInput(
override val irModuleFragment: IrModuleFragment,
val sourceFiles: List<KtFile>,
val bindingContext: BindingContext,
val expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
) : IrBackendInput()
data class JvmIrBackendInput(
val state: GenerationState,
val backendInput: JvmIrCodegenFactory.JvmIrBackendInput
) : IrBackendInput() {
override val irModuleFragment: IrModuleFragment
get() = backendInput.irModuleFragment
}
}
@@ -24,6 +24,9 @@ class JvmIrBackendFacade(
module: TestModule,
inputArtifact: IrBackendInput
): BinaryArtifacts.Jvm? {
if (inputArtifact !is IrBackendInput.JvmIrBackendInput) {
error("JvmIrBackendFacade expects IrBackendInput.JvmIrBackendInput as input")
}
val state = inputArtifact.state
val codegenFactory = state.codegenFactory as JvmIrCodegenFactory
try {
@@ -47,6 +47,9 @@ class ClassicFrontend2IrConverter(
.diagnosticReporter(DiagnosticReporterFactory.createReporter())
.build()
return IrBackendInput(state, codegenFactory.convertToIr(CodegenFactory.IrConversionInput.fromGenerationState(state)))
return IrBackendInput.JvmIrBackendInput(
state,
codegenFactory.convertToIr(CodegenFactory.IrConversionInput.fromGenerationState(state))
)
}
}
@@ -74,7 +74,7 @@ class Fir2IrResultsConverter(
val irProviders = codegenFactory.configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions)
return IrBackendInput(
return IrBackendInput.JvmIrBackendInput(
generationState,
JvmIrCodegenFactory.JvmIrBackendInput(
irModuleFragment,