JS IR: split compilation and deserialization

This commit is contained in:
Anton Bannykh
2019-03-21 15:59:10 +03:00
parent 08785b7cea
commit 0f183ed662
6 changed files with 343 additions and 312 deletions
@@ -9,14 +9,10 @@ import com.intellij.openapi.Disposable
import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.PsiManager
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.ir.backend.js.CompilationMode
import org.jetbrains.kotlin.ir.backend.js.compile
import org.jetbrains.kotlin.ir.backend.js.jsPhases
import org.jetbrains.kotlin.ir.backend.js.generateKLib
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.js.test.JsIrTestRuntime
import org.jetbrains.kotlin.psi.KtFile
@@ -60,13 +56,10 @@ fun main() {
fun buildKlib(sources: List<String>, outputPath: String) {
val configuration = buildConfiguration(environment)
compile(
generateKLib(
project = environment.project,
files = sources.map(::createPsiFile),
configuration = configuration,
phaseConfig = configuration.get(CLIConfigurationKeys.PHASE_CONFIG) ?: PhaseConfig(jsPhases),
compileMode = CompilationMode.KLIB,
configuration = buildConfiguration(environment),
immediateDependencies = emptyList(),
allDependencies = emptyList(),
outputKlibPath = outputPath
@@ -109,25 +109,30 @@ abstract class BasicIrBoxTest(
if (!isMainModule) it.replace("_v5.js", "/") else it
}
val result: TranslationResult = compile(
project = config.project,
files = filesToCompile,
configuration = config.configuration,
phaseConfig = config.configuration.get(CLIConfigurationKeys.PHASE_CONFIG) ?: PhaseConfig(jsPhases),
compileMode = if (isMainModule) CompilationMode.JS else CompilationMode.KLIB,
immediateDependencies = dependencies,
allDependencies = allDependencies,
outputKlibPath = actualOutputFile
)
if (isMainModule) {
val jsCode = compile(
project = config.project,
files = filesToCompile,
configuration = config.configuration,
phaseConfig = config.configuration.get(CLIConfigurationKeys.PHASE_CONFIG) ?: PhaseConfig(jsPhases),
immediateDependencies = dependencies,
allDependencies = allDependencies
)
val moduleName = config.configuration.get(CommonConfigurationKeys.MODULE_NAME) as String
val module = KlibModuleRef(moduleName, actualOutputFile)
compilationCache[outputFile.name.replace(".js", ".meta.js")] = module
if (result is TranslationResult.CompiledJsCode) {
val wrappedCode = wrapWithModuleEmulationMarkers(result.jsCode, moduleId = config.moduleId, moduleKind = config.moduleKind)
val wrappedCode = wrapWithModuleEmulationMarkers(jsCode, moduleId = config.moduleId, moduleKind = config.moduleKind)
outputFile.write(wrappedCode)
} else {
val module = generateKLib(
project = config.project,
files = filesToCompile,
configuration = config.configuration,
immediateDependencies = dependencies,
allDependencies = allDependencies,
outputKlibPath = actualOutputFile
)
compilationCache[outputFile.name.replace(".js", ".meta.js")] = module
}
}