[TESTS] Add abstraction at IrBackendInput to work with several backends
This commit is contained in:
+2
-2
@@ -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) {
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+25
-4
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -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 {
|
||||
|
||||
+4
-1
@@ -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))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -74,7 +74,7 @@ class Fir2IrResultsConverter(
|
||||
|
||||
val irProviders = codegenFactory.configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions)
|
||||
|
||||
return IrBackendInput(
|
||||
return IrBackendInput.JvmIrBackendInput(
|
||||
generationState,
|
||||
JvmIrCodegenFactory.JvmIrBackendInput(
|
||||
irModuleFragment,
|
||||
|
||||
Reference in New Issue
Block a user