[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>()
|
val declaredInlineFunctionSignatures = mutableSetOf<IdSignature>()
|
||||||
|
|
||||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||||
val irModule = info.backendInput.irModuleFragment
|
val irModule = info.irModuleFragment
|
||||||
irModule.acceptChildrenVoid(InlineFunctionsCollector())
|
irModule.acceptChildrenVoid(InlineFunctionsCollector())
|
||||||
irModule.acceptChildrenVoid(InlineCallBodiesCheck())
|
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) {
|
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ open class IrInterpreterBackendHandler(testServices: TestServices) : AbstractIrH
|
|||||||
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
|
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
|
||||||
|
|
||||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||||
val moduleFragment = info.backendInput.irModuleFragment
|
val moduleFragment = info.irModuleFragment
|
||||||
val evaluator = Evaluator(IrInterpreter(moduleFragment.irBuiltins), globalMetadataInfoHandler)
|
val evaluator = Evaluator(IrInterpreter(moduleFragment.irBuiltins), globalMetadataInfoHandler)
|
||||||
for ((irFile, testFile) in moduleFragment.files.zip(module.files)) {
|
for ((irFile, testFile) in moduleFragment.files.zip(module.files)) {
|
||||||
if (testFile.isAdditional) continue
|
if (testFile.isAdditional) continue
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@ class IrPrettyKotlinDumpHandler(testServices: TestServices) : AbstractIrHandler(
|
|||||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||||
if (DUMP_KT_IR !in module.directives || SKIP_KT_DUMP in module.directives) return
|
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 builder = dumper.builderForModule(module)
|
||||||
val filteredIrFiles = irFiles.groupWithTestFiles(module).filterNot {
|
val filteredIrFiles = irFiles.groupWithTestFiles(module).filterNot {
|
||||||
it.first?.directives?.contains(EXTERNAL_FILE) == true
|
it.first?.directives?.contains(EXTERNAL_FILE) == true
|
||||||
|
|||||||
+2
-2
@@ -63,7 +63,7 @@ class IrTextDumpHandler(testServices: TestServices) : AbstractIrHandler(testServ
|
|||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||||
if (DUMP_IR !in module.directives) return
|
if (DUMP_IR !in module.directives) return
|
||||||
val irFiles = info.backendInput.irModuleFragment.files
|
val irFiles = info.irModuleFragment.files
|
||||||
val testFileToIrFile = irFiles.groupWithTestFiles(module)
|
val testFileToIrFile = irFiles.groupWithTestFiles(module)
|
||||||
val builder = baseDumper.builderForModule(module)
|
val builder = baseDumper.builderForModule(module)
|
||||||
for ((testFile, irFile) in testFileToIrFile) {
|
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?
|
// TODO: why JS one is used here in original AbstractIrTextTestCase?
|
||||||
val mangler = JsManglerDesc
|
val mangler = JsManglerDesc
|
||||||
val signaturer = IdSignatureDescriptor(mangler)
|
val signaturer = IdSignatureDescriptor(mangler)
|
||||||
val irModule = info.backendInput.irModuleFragment
|
val irModule = info.irModuleFragment
|
||||||
val stubGenerator = DeclarationStubGeneratorImpl(
|
val stubGenerator = DeclarationStubGeneratorImpl(
|
||||||
irModule.descriptor,
|
irModule.descriptor,
|
||||||
SymbolTable(signaturer, IrFactoryImpl), // TODO
|
SymbolTable(signaturer, IrFactoryImpl), // TODO
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ class IrTreeVerifierHandler(testServices: TestServices) : AbstractIrHandler(test
|
|||||||
|
|
||||||
override fun processModule(module: TestModule, info: IrBackendInput) {
|
override fun processModule(module: TestModule, info: IrBackendInput) {
|
||||||
if (CodegenTestDirectives.DUMP_IR !in module.directives) return
|
if (CodegenTestDirectives.DUMP_IR !in module.directives) return
|
||||||
val irFiles = info.backendInput.irModuleFragment.files
|
val irFiles = info.irModuleFragment.files
|
||||||
val testFileToIrFile = irFiles.groupWithTestFiles(module)
|
val testFileToIrFile = irFiles.groupWithTestFiles(module)
|
||||||
for ((testFile, irFile) in testFileToIrFile) {
|
for ((testFile, irFile) in testFileToIrFile) {
|
||||||
if (testFile?.directives?.contains(EXTERNAL_FILE) == true) continue
|
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.backend.jvm.JvmIrCodegenFactory
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
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.BackendKinds
|
||||||
import org.jetbrains.kotlin.test.model.ResultingArtifact
|
import org.jetbrains.kotlin.test.model.ResultingArtifact
|
||||||
|
|
||||||
// IR backend (JVM, JS, Native)
|
// IR backend (JVM, JS, Native)
|
||||||
data class IrBackendInput(
|
sealed class IrBackendInput : ResultingArtifact.BackendInput<IrBackendInput>() {
|
||||||
val state: GenerationState,
|
|
||||||
val backendInput: JvmIrCodegenFactory.JvmIrBackendInput
|
|
||||||
) : ResultingArtifact.BackendInput<IrBackendInput>() {
|
|
||||||
override val kind: BackendKinds.IrBackend
|
override val kind: BackendKinds.IrBackend
|
||||||
get() = 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,
|
module: TestModule,
|
||||||
inputArtifact: IrBackendInput
|
inputArtifact: IrBackendInput
|
||||||
): BinaryArtifacts.Jvm? {
|
): BinaryArtifacts.Jvm? {
|
||||||
|
if (inputArtifact !is IrBackendInput.JvmIrBackendInput) {
|
||||||
|
error("JvmIrBackendFacade expects IrBackendInput.JvmIrBackendInput as input")
|
||||||
|
}
|
||||||
val state = inputArtifact.state
|
val state = inputArtifact.state
|
||||||
val codegenFactory = state.codegenFactory as JvmIrCodegenFactory
|
val codegenFactory = state.codegenFactory as JvmIrCodegenFactory
|
||||||
try {
|
try {
|
||||||
|
|||||||
+4
-1
@@ -47,6 +47,9 @@ class ClassicFrontend2IrConverter(
|
|||||||
.diagnosticReporter(DiagnosticReporterFactory.createReporter())
|
.diagnosticReporter(DiagnosticReporterFactory.createReporter())
|
||||||
.build()
|
.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)
|
val irProviders = codegenFactory.configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions)
|
||||||
|
|
||||||
return IrBackendInput(
|
return IrBackendInput.JvmIrBackendInput(
|
||||||
generationState,
|
generationState,
|
||||||
JvmIrCodegenFactory.JvmIrBackendInput(
|
JvmIrCodegenFactory.JvmIrBackendInput(
|
||||||
irModuleFragment,
|
irModuleFragment,
|
||||||
|
|||||||
Reference in New Issue
Block a user