[JS IR] Enable directives for IR box tests

This commit is contained in:
Sergej Jaskiewicz
2021-09-17 17:56:12 +03:00
committed by Space
parent c9a0369805
commit b93e0181ca
4 changed files with 17 additions and 7 deletions
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.ir.declarations.StageController
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
import org.jetbrains.kotlin.ir.util.noUnboundLeft 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.js.config.RuntimeDiagnostic
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -31,6 +32,7 @@ class CompilerResult(
class CompilationOutputs( class CompilationOutputs(
val jsCode: String, val jsCode: String,
val jsProgram: JsProgram? = null,
val sourceMap: String? = null, val sourceMap: String? = null,
val dependencies: Iterable<Pair<String, CompilationOutputs>> = emptyList() val dependencies: Iterable<Pair<String, CompilationOutputs>> = emptyList()
) )
@@ -113,7 +113,7 @@ class IrModuleToJsTransformer(
) )
}.reversed() }.reversed()
return CompilationOutputs(mainModule.jsCode, mainModule.sourceMap, dependencies) return CompilationOutputs(mainModule.jsCode, mainModule.jsProgram, mainModule.sourceMap, dependencies)
} else { } else {
return generateWrappedModuleBody2( return generateWrappedModuleBody2(
modules, modules,
@@ -228,6 +228,7 @@ class IrModuleToJsTransformer(
return CompilationOutputs( return CompilationOutputs(
jsCode.toString(), jsCode.toString(),
program,
if(sourceMapsEnabled) sourceMapBuilder.build() else null if(sourceMapsEnabled) sourceMapBuilder.build() else null
) )
} }
@@ -790,7 +790,7 @@ abstract class BasicBoxTest(
incrementalData.header = incrementalService.headerMetadata incrementalData.header = incrementalService.headerMetadata
} }
processJsProgram(translationResult.program, units.filterIsInstance<TranslationUnit.SourceFile>().map { it.file }) processJsProgram(translationResult.program, units)
checkSourceMap(outputFile, translationResult.program, remap) checkSourceMap(outputFile, translationResult.program, remap)
} }
@@ -816,11 +816,15 @@ abstract class BasicBoxTest(
} }
} }
private fun processJsProgram(program: JsProgram, psiFiles: List<KtFile>) { protected fun processJsProgram(program: JsProgram, units: List<TranslationUnit>) {
psiFiles.asSequence() units.filterIsInstance<TranslationUnit.SourceFile>()
.map { it.text } .forEach { DirectiveTestUtils.processDirectives(program, it.file.text, targetBackend) }
.forEach { DirectiveTestUtils.processDirectives(program, it) }
program.verifyAst() // 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) { private fun checkSourceMap(outputFile: File, program: JsProgram, remap: Boolean) {
@@ -347,6 +347,8 @@ abstract class BasicIrBoxTest(
logger.logFile("Output d.ts", dtsFile) logger.logFile("Output d.ts", dtsFile)
dtsFile.write(compiledModule.tsDefinitions ?: error("No ts definitions")) dtsFile.write(compiledModule.tsDefinitions ?: error("No ts definitions"))
} }
compiledOutput.jsProgram?.let { processJsProgram(it, units) }
} }
if (runIrPir) { if (runIrPir) {
@@ -368,6 +370,7 @@ abstract class BasicIrBoxTest(
verifySignatures = !skipMangleVerification, verifySignatures = !skipMangleVerification,
) )
compiledModule.outputs!!.writeTo(pirOutputFile, config) compiledModule.outputs!!.writeTo(pirOutputFile, config)
processJsProgram(compiledModule.outputs!!.jsProgram!!, units)
} }
} }
} }