[Wasm] Add Wasm platform and K1 FE infrastructure

This commit is contained in:
Svyatoslav Kuzmich
2023-02-21 21:53:12 +01:00
parent fa4bbdf6d6
commit 54a45c49f8
28 changed files with 458 additions and 26 deletions
+1
View File
@@ -20,6 +20,7 @@ dependencies {
api(project(":compiler:javac-wrapper"))
api(project(":js:js.translator"))
api(project(":native:frontend.native"))
api(project(":wasm:wasm.frontend"))
api(commonDependency("org.fusesource.jansi", "jansi"))
api(project(":compiler:fir:raw-fir:psi2fir"))
api(project(":compiler:fir:resolve"))
+2
View File
@@ -19,6 +19,8 @@ dependencies {
api(project(":js:js.serializer"))
api(project(":js:js.dce"))
api(project(":js:js.sourcemap"))
api(project(":wasm:wasm.frontend"))
api(project(":wasm:wasm.config"))
compileOnly(intellijCore())
}
@@ -31,6 +31,8 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.*
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageUtil
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForWasm
import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
@@ -427,7 +429,8 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
environmentForJS.configuration,
libraries,
friendLibraries,
AnalyzerWithCompilerReport(environmentForJS.configuration)
AnalyzerWithCompilerReport(environmentForJS.configuration),
analyzerFacade = if (arguments.wasm) TopDownAnalyzerFacadeForWasm else TopDownAnalyzerFacadeForJSIR
)
val result = sourceModule.jsFrontEndResult.jsAnalysisResult
if (result is JsAnalysisResult.RetryWithAdditionalRoots) {
@@ -11,11 +11,18 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
import org.jetbrains.kotlin.ir.backend.js.JsFactories
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForJS
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
// TODO: put it in separated module `frontend.js`
object TopDownAnalyzerFacadeForJSIR : AbstractTopDownAnalyzerFacadeForJS() {
object TopDownAnalyzerFacadeForJSIR : AbstractTopDownAnalyzerFacadeForWeb() {
override val analyzerServices: PlatformDependentAnalyzerServices = JsPlatformAnalyzerServices
override val platform: TargetPlatform = JsPlatforms.defaultJsPlatform
override fun loadIncrementalCacheMetadata(
incrementalData: IncrementalDataProvider,
moduleContext: ModuleContext,
@@ -0,0 +1,39 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.cli.js.klib
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
import org.jetbrains.kotlin.ir.backend.js.JsFactories
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.wasm.WasmPlatforms
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
import org.jetbrains.kotlin.wasm.resolve.WasmPlatformAnalyzerServices
object TopDownAnalyzerFacadeForWasm : AbstractTopDownAnalyzerFacadeForWeb() {
override val analyzerServices: PlatformDependentAnalyzerServices = WasmPlatformAnalyzerServices
override val platform: TargetPlatform = WasmPlatforms.Default
override fun loadIncrementalCacheMetadata(
incrementalData: IncrementalDataProvider,
moduleContext: ModuleContext,
lookupTracker: LookupTracker,
languageVersionSettings: LanguageVersionSettings
): PackageFragmentProvider {
return JsFactories.DefaultDeserializedDescriptorFactory.createCachedPackageFragmentProvider(
incrementalData.compiledPackageParts.values.map { it.metadata },
moduleContext.storageManager,
moduleContext.module,
CompilerDeserializationConfiguration(languageVersionSettings),
lookupTracker
)
}
}
@@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analyzer.AbstractAnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.psi.KtFile
@@ -21,10 +22,11 @@ fun prepareAnalyzedSourceModule(
friendDependencies: List<String>,
analyzer: AbstractAnalyzerWithCompilerReport,
errorPolicy: ErrorTolerancePolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT,
analyzerFacade: AbstractTopDownAnalyzerFacadeForWeb = TopDownAnalyzerFacadeForJSIR,
): ModulesStructure {
val mainModule = MainModule.SourceFiles(files)
val sourceModule = ModulesStructure(project, mainModule, configuration, dependencies, friendDependencies)
return sourceModule.apply {
runAnalysis(errorPolicy, analyzer, TopDownAnalyzerFacadeForJSIR)
runAnalysis(errorPolicy, analyzer, analyzerFacade)
}
}
@@ -2,3 +2,4 @@
org.jetbrains.kotlin.resolve.jvm.diagnostics.DefaultErrorMessagesJvm
org.jetbrains.kotlin.js.resolve.diagnostics.DefaultErrorMessagesJs
org.jetbrains.kotlin.resolve.konan.diagnostics.DefaultErrorMessagesNative
org.jetbrains.kotlin.wasm.resolve.diagnostics.DefaultErrorMessagesWasm
@@ -20,5 +20,6 @@ public enum EnvironmentConfigFiles {
JVM_CONFIG_FILES,
JS_CONFIG_FILES,
NATIVE_CONFIG_FILES,
WASM_CONFIG_FILES,
METADATA_CONFIG_FILES,
}