[JS IR] Enable IR dump for IC invalidation tests
Support 'fd.kotlin.js.debugMode' property in IC invalidation tests.
This commit is contained in:
committed by
Space Team
parent
c58314fddf
commit
1ec88ff560
@@ -682,6 +682,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
||||
mainModule,
|
||||
cfg,
|
||||
arguments.granularity,
|
||||
PhaseConfig(jsPhases),
|
||||
es6mode = arguments.useEsClasses
|
||||
)
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ class JsIrCompilerWithIC(
|
||||
private val mainModule: IrModuleFragment,
|
||||
configuration: CompilerConfiguration,
|
||||
granularity: JsGenerationGranularity,
|
||||
private val phaseConfig: PhaseConfig,
|
||||
exportedDeclarations: Set<FqName> = emptySet(),
|
||||
es6mode: Boolean = false
|
||||
) : JsIrCompilerICInterface {
|
||||
@@ -64,7 +65,7 @@ class JsIrCompilerWithIC(
|
||||
|
||||
generateJsTests(context, mainModule)
|
||||
|
||||
lowerPreservingTags(allModules, context, PhaseConfig(jsPhases), context.irFactory.stageController as WholeWorldStageController)
|
||||
lowerPreservingTags(allModules, context, phaseConfig, context.irFactory.stageController as WholeWorldStageController)
|
||||
|
||||
val transformer = IrModuleToJsTransformer(context, mainArguments)
|
||||
return transformer.makeIrFragmentsGenerators(dirtyFiles, allModules)
|
||||
@@ -72,7 +73,10 @@ class JsIrCompilerWithIC(
|
||||
}
|
||||
|
||||
fun lowerPreservingTags(
|
||||
modules: Iterable<IrModuleFragment>, context: JsIrBackendContext, phaseConfig: PhaseConfig, controller: WholeWorldStageController
|
||||
modules: Iterable<IrModuleFragment>,
|
||||
context: JsIrBackendContext,
|
||||
phaseConfig: PhaseConfig,
|
||||
controller: WholeWorldStageController
|
||||
) {
|
||||
// Lower all the things
|
||||
controller.currentStage = 0
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.backend.js.ic
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||
import org.jetbrains.kotlin.backend.common.serialization.cityHash64
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.ir.backend.js.*
|
||||
@@ -758,6 +759,7 @@ fun rebuildCacheForDirtyFiles(
|
||||
currentIrModule,
|
||||
configuration,
|
||||
JsGenerationGranularity.PER_MODULE,
|
||||
PhaseConfig(jsPhases),
|
||||
exportedDeclarations,
|
||||
es6mode
|
||||
)
|
||||
|
||||
@@ -346,6 +346,23 @@ fun Test.setUpJsBoxTests(jsEnabled: Boolean, jsIrEnabled: Boolean, firEnabled: B
|
||||
setUpBoxTests()
|
||||
}
|
||||
|
||||
fun Test.forwardProperties() {
|
||||
val rootLocalProperties = Properties().apply {
|
||||
rootProject.file("local.properties").takeIf { it.isFile }?.inputStream()?.use {
|
||||
load(it)
|
||||
}
|
||||
}
|
||||
|
||||
val allProperties = properties + rootLocalProperties
|
||||
|
||||
val prefixForPropertiesToForward = "fd."
|
||||
for ((key, value) in allProperties) {
|
||||
if (key is String && key.startsWith(prefixForPropertiesToForward)) {
|
||||
systemProperty(key.substring(prefixForPropertiesToForward.length), value!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Test.setUpBoxTests() {
|
||||
workingDir = rootDir
|
||||
dependsOn(antLauncherJar)
|
||||
@@ -362,20 +379,7 @@ fun Test.setUpBoxTests() {
|
||||
.forUseAtConfigurationTime().orNull ?: "false"
|
||||
)
|
||||
|
||||
val rootLocalProperties = Properties().apply {
|
||||
rootProject.file("local.properties").takeIf { it.isFile }?.inputStream()?.use {
|
||||
load(it)
|
||||
}
|
||||
}
|
||||
|
||||
val allProperties = properties + rootLocalProperties
|
||||
|
||||
val prefixForPropertiesToForward = "fd."
|
||||
for ((key, value) in allProperties) {
|
||||
if (key is String && key.startsWith(prefixForPropertiesToForward)) {
|
||||
systemProperty(key.substring(prefixForPropertiesToForward.length), value!!)
|
||||
}
|
||||
}
|
||||
forwardProperties()
|
||||
}
|
||||
|
||||
val test = projectTest(parallel = true, jUnitMode = JUnitMode.JUnit5, maxHeapSizeMb = 4096) {
|
||||
@@ -507,8 +511,10 @@ projectTest("invalidationTest", jUnitMode = JUnitMode.JUnit4) {
|
||||
|
||||
systemProperty("kotlin.js.stdlib.klib.path", "libraries/stdlib/js-ir/build/libs/kotlin-stdlib-js-ir-js-$version.klib")
|
||||
systemProperty("kotlin.js.test.root.out.dir", "$buildDir/")
|
||||
|
||||
forwardProperties()
|
||||
}
|
||||
|
||||
tasks.named("check") {
|
||||
dependsOn(runMocha)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ import com.intellij.openapi.vfs.VirtualFileManager
|
||||
import com.intellij.openapi.vfs.local.CoreLocalFileSystem
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.SingleRootFileViewProvider
|
||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||
import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap
|
||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||
import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
@@ -36,6 +38,7 @@ import org.jetbrains.kotlin.js.testOld.V8IrJsTestChecker
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||
import org.jetbrains.kotlin.test.DebugMode
|
||||
import org.jetbrains.kotlin.test.builders.LanguageVersionSettingsBuilder
|
||||
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
@@ -285,6 +288,18 @@ abstract class AbstractInvalidationTest(
|
||||
}
|
||||
}
|
||||
|
||||
private fun getPhaseConfig(stepId: Int): PhaseConfig {
|
||||
if (DebugMode.fromSystemProperty("kotlin.js.debugMode") < DebugMode.SUPER_DEBUG) {
|
||||
return PhaseConfig(jsPhases)
|
||||
}
|
||||
|
||||
return PhaseConfig(
|
||||
jsPhases,
|
||||
dumpToDirectory = buildDir.resolve("irdump").resolve("step-$stepId").path,
|
||||
toDumpStateAfter = jsPhases.toPhaseMap().values.toSet()
|
||||
)
|
||||
}
|
||||
|
||||
fun execute() {
|
||||
for (projStep in projectInfo.steps) {
|
||||
val testInfo = projStep.order.map { setupTestStep(projStep, it, true) }
|
||||
@@ -308,6 +323,7 @@ abstract class AbstractInvalidationTest(
|
||||
mainModule,
|
||||
cfg,
|
||||
JsGenerationGranularity.PER_MODULE,
|
||||
getPhaseConfig(projStep.id),
|
||||
setOf(FqName(BOX_FUNCTION_NAME)),
|
||||
targetBackend == TargetBackend.JS_IR_ES6
|
||||
)
|
||||
|
||||
@@ -191,7 +191,7 @@ abstract class AbstractJsKLibABITestCase : KtUsefulTestCase() {
|
||||
irFactory = { IrFactoryImplForJsIC(WholeWorldStageController()) },
|
||||
mainArguments = null,
|
||||
compilerInterfaceFactory = { mainModule, cfg ->
|
||||
JsIrCompilerWithIC(mainModule, cfg, JsGenerationGranularity.PER_MODULE, setOf(BOX_FUN_FQN))
|
||||
JsIrCompilerWithIC(mainModule, cfg, JsGenerationGranularity.PER_MODULE, PhaseConfig(jsPhases), setOf(BOX_FUN_FQN))
|
||||
}
|
||||
)
|
||||
val icCaches = cacheUpdater.actualizeCaches()
|
||||
|
||||
Reference in New Issue
Block a user