From b93e0181caefc2c6e5e5efe0ca02933a62940ef8 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Fri, 17 Sep 2021 17:56:12 +0300 Subject: [PATCH] [JS IR] Enable directives for IR box tests --- .../jetbrains/kotlin/ir/backend/js/compiler.kt | 2 ++ .../irToJs/IrModuleToJsTransformer.kt | 3 ++- .../org/jetbrains/kotlin/js/test/BasicBoxTest.kt | 16 ++++++++++------ .../jetbrains/kotlin/js/test/BasicIrBoxTest.kt | 3 +++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt index 7e060b37282..73fc47ddb39 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.ir.declarations.StageController import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator import org.jetbrains.kotlin.ir.util.noUnboundLeft +import org.jetbrains.kotlin.js.backend.ast.JsProgram import org.jetbrains.kotlin.js.config.RuntimeDiagnostic import org.jetbrains.kotlin.name.FqName @@ -31,6 +32,7 @@ class CompilerResult( class CompilationOutputs( val jsCode: String, + val jsProgram: JsProgram? = null, val sourceMap: String? = null, val dependencies: Iterable> = emptyList() ) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt index 89f7db93abd..7184b8204f6 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt @@ -113,7 +113,7 @@ class IrModuleToJsTransformer( ) }.reversed() - return CompilationOutputs(mainModule.jsCode, mainModule.sourceMap, dependencies) + return CompilationOutputs(mainModule.jsCode, mainModule.jsProgram, mainModule.sourceMap, dependencies) } else { return generateWrappedModuleBody2( modules, @@ -228,6 +228,7 @@ class IrModuleToJsTransformer( return CompilationOutputs( jsCode.toString(), + program, if(sourceMapsEnabled) sourceMapBuilder.build() else null ) } diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicBoxTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicBoxTest.kt index 7d1985bce6c..547866f8830 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicBoxTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicBoxTest.kt @@ -790,7 +790,7 @@ abstract class BasicBoxTest( incrementalData.header = incrementalService.headerMetadata } - processJsProgram(translationResult.program, units.filterIsInstance().map { it.file }) + processJsProgram(translationResult.program, units) checkSourceMap(outputFile, translationResult.program, remap) } @@ -816,11 +816,15 @@ abstract class BasicBoxTest( } } - private fun processJsProgram(program: JsProgram, psiFiles: List) { - psiFiles.asSequence() - .map { it.text } - .forEach { DirectiveTestUtils.processDirectives(program, it) } - program.verifyAst() + protected fun processJsProgram(program: JsProgram, units: List) { + units.filterIsInstance() + .forEach { DirectiveTestUtils.processDirectives(program, it.file.text, targetBackend) } + + // TODO: For now the IR backend generates JS code that doesn't pass verification, + // TODO: so we temporarily disabled AST verification. + if (targetBackend == TargetBackend.JS) { + program.verifyAst() + } } private fun checkSourceMap(outputFile: File, program: JsProgram, remap: Boolean) { diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicIrBoxTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicIrBoxTest.kt index cdc034ef535..9eb5fb63045 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicIrBoxTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicIrBoxTest.kt @@ -347,6 +347,8 @@ abstract class BasicIrBoxTest( logger.logFile("Output d.ts", dtsFile) dtsFile.write(compiledModule.tsDefinitions ?: error("No ts definitions")) } + + compiledOutput.jsProgram?.let { processJsProgram(it, units) } } if (runIrPir) { @@ -368,6 +370,7 @@ abstract class BasicIrBoxTest( verifySignatures = !skipMangleVerification, ) compiledModule.outputs!!.writeTo(pirOutputFile, config) + processJsProgram(compiledModule.outputs!!.jsProgram!!, units) } } }