JS IR: split compilation and deserialization
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user