[Wasm] Separate wasm targets for IDE frontend. wasm-wasi and wasm-js have different set of checkers ^KTIJ-29380 fixed
diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt index 48a21aa..e0c4daa 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt
@@ -28,11 +28,14 @@ import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.platform.konan.isNative +import org.jetbrains.kotlin.platform.wasm.isWasmJs +import org.jetbrains.kotlin.platform.wasm.isWasmWasi import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerServices import org.jetbrains.kotlin.wasm.resolve.WasmJsPlatformAnalyzerServices +import org.jetbrains.kotlin.wasm.resolve.WasmWasiPlatformAnalyzerServices import java.io.IOException import java.nio.file.* import java.nio.file.attribute.BasicFileAttributes @@ -42,7 +45,8 @@ return when { isJvm() -> JvmPlatformAnalyzerServices isJs() -> JsPlatformAnalyzerServices - isWasm() -> WasmJsPlatformAnalyzerServices + isWasmJs() -> WasmJsPlatformAnalyzerServices + isWasmWasi() -> WasmWasiPlatformAnalyzerServices isNative() -> NativePlatformAnalyzerServices isCommon() -> CommonPlatformAnalyzerServices else -> error("Unknown target platform: $this")
diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/CommonPlatforms.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/CommonPlatforms.kt index b96e482..dbd871a 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/CommonPlatforms.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/CommonPlatforms.kt
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.platform.konan.NativePlatforms.allNativePlatforms import org.jetbrains.kotlin.platform.konan.NativePlatforms.unspecifiedNativePlatform import org.jetbrains.kotlin.platform.wasm.WasmPlatforms +import org.jetbrains.kotlin.platform.wasm.WasmPlatforms.allWasmPlatforms @Suppress("DEPRECATION_ERROR") object CommonPlatforms { @@ -24,7 +25,8 @@ setOf( unspecifiedJvmPlatform.single(), defaultJsPlatform.single(), - WasmPlatforms.Default.single(), + WasmPlatforms.wasmJs.single(), + WasmPlatforms.wasmWasi.single(), unspecifiedNativePlatform.single() ) ), org.jetbrains.kotlin.analyzer.common.CommonPlatform { @@ -41,7 +43,7 @@ yieldAll(allJvmPlatforms) yieldAll(allNativePlatforms) yieldAll(allJsPlatforms) - yield(WasmPlatforms.Default) + yieldAll(allWasmPlatforms) // TODO(dsavvinov): extensions points? }.toList()
diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index d316693..3a2d97f 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
@@ -60,12 +60,14 @@ import org.jetbrains.kotlin.library.metadata.KlibMetadataVersion import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.progress.IncrementalNextRoundException import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.utils.KotlinPaths import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.join +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys import java.io.File import java.io.IOException @@ -195,12 +197,12 @@ configuration.put(JSConfigurationKeys.LIBRARIES, libraries) configuration.put(JSConfigurationKeys.TRANSITIVE_LIBRARIES, libraries) - configuration.put(JSConfigurationKeys.WASM_ENABLE_ARRAY_RANGE_CHECKS, arguments.wasmEnableArrayRangeChecks) - configuration.put(JSConfigurationKeys.WASM_ENABLE_ASSERTS, arguments.wasmEnableAsserts) - configuration.put(JSConfigurationKeys.WASM_GENERATE_WAT, arguments.wasmGenerateWat) - configuration.put(JSConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS, arguments.wasmUseTrapsInsteadOfExceptions) - configuration.put(JSConfigurationKeys.WASM_USE_NEW_EXCEPTION_PROPOSAL, arguments.wasmUseNewExceptionProposal) - configuration.putIfNotNull(JSConfigurationKeys.WASM_TARGET, arguments.wasmTarget?.let(WasmTarget::fromName)) + configuration.put(WasmConfigurationKeys.WASM_ENABLE_ARRAY_RANGE_CHECKS, arguments.wasmEnableArrayRangeChecks) + configuration.put(WasmConfigurationKeys.WASM_ENABLE_ASSERTS, arguments.wasmEnableAsserts) + configuration.put(WasmConfigurationKeys.WASM_GENERATE_WAT, arguments.wasmGenerateWat) + configuration.put(WasmConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS, arguments.wasmUseTrapsInsteadOfExceptions) + configuration.put(WasmConfigurationKeys.WASM_USE_NEW_EXCEPTION_PROPOSAL, arguments.wasmUseNewExceptionProposal) + configuration.putIfNotNull(WasmConfigurationKeys.WASM_TARGET, arguments.wasmTarget?.let(WasmTarget::fromName)) configuration.put(JSConfigurationKeys.OPTIMIZE_GENERATED_JS, arguments.optimizeGeneratedJs) @@ -406,7 +408,7 @@ baseFileName = outputName, emitNameSection = arguments.wasmDebug, allowIncompleteImplementations = arguments.irDce, - generateWat = configuration.get(JSConfigurationKeys.WASM_GENERATE_WAT, false), + generateWat = configuration.get(WasmConfigurationKeys.WASM_GENERATE_WAT, false), generateSourceMaps = generateSourceMaps, ) @@ -463,7 +465,7 @@ lateinit var sourceModule: ModulesStructure do { val analyzerFacade = when (arguments.wasm) { - true -> TopDownAnalyzerFacadeForWasm.facadeFor(environmentForJS.configuration.get(JSConfigurationKeys.WASM_TARGET)) + true -> TopDownAnalyzerFacadeForWasm.facadeFor(environmentForJS.configuration.get(WasmConfigurationKeys.WASM_TARGET)) else -> TopDownAnalyzerFacadeForJSIR } sourceModule = prepareAnalyzedSourceModule(
diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/TopDownAnalyzerFacadeForWasm.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/TopDownAnalyzerFacadeForWasm.kt index 96ae59a..bff5517 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/TopDownAnalyzerFacadeForWasm.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/TopDownAnalyzerFacadeForWasm.kt
@@ -12,17 +12,15 @@ 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.js.config.WasmTarget import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.wasm.WasmPlatforms +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices import org.jetbrains.kotlin.wasm.resolve.WasmJsPlatformAnalyzerServices import org.jetbrains.kotlin.wasm.resolve.WasmWasiPlatformAnalyzerServices abstract class TopDownAnalyzerFacadeForWasm : AbstractTopDownAnalyzerFacadeForWeb() { - override val platform: TargetPlatform = WasmPlatforms.Default - override fun loadIncrementalCacheMetadata( incrementalData: IncrementalDataProvider, moduleContext: ModuleContext, @@ -47,9 +45,13 @@ } object TopDownAnalyzerFacadeForWasmJs : TopDownAnalyzerFacadeForWasm() { + override val platform: TargetPlatform = WasmPlatforms.wasmJs + override val analyzerServices: PlatformDependentAnalyzerServices = WasmJsPlatformAnalyzerServices } object TopDownAnalyzerFacadeForWasmWasi : TopDownAnalyzerFacadeForWasm() { + override val platform: TargetPlatform = WasmPlatforms.wasmWasi + override val analyzerServices: PlatformDependentAnalyzerServices = WasmWasiPlatformAnalyzerServices } \ No newline at end of file
diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt index 8dc4494..fa4f20c 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt
@@ -35,15 +35,16 @@ import org.jetbrains.kotlin.ir.backend.js.* import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerIr import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.library.KotlinAbiVersion import org.jetbrains.kotlin.library.impl.BuiltInsPlatform import org.jetbrains.kotlin.library.unresolvedDependencies import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.platform.wasm.WasmPlatforms +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.storage.LockBasedStorageManager +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys import java.nio.file.Paths inline fun <F> compileModuleToAnalyzedFir( @@ -63,8 +64,12 @@ val mainModuleName = moduleStructure.compilerConfiguration.get(CommonConfigurationKeys.MODULE_NAME)!! val escapedMainModuleName = Name.special("<$mainModuleName>") - val platform = if (useWasmPlatform) WasmPlatforms.Default else JsPlatforms.defaultJsPlatform - + val platform = if (useWasmPlatform) { + when (moduleStructure.compilerConfiguration.get(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS)) { + WasmTarget.JS -> WasmPlatforms.wasmJs + WasmTarget.WASI -> WasmPlatforms.wasmWasi + } + } else JsPlatforms.defaultJsPlatform val binaryModuleData = BinaryModuleData.initialize(escapedMainModuleName, platform) val dependencyList = DependencyListForCliModule.build(binaryModuleData) { dependencies(libraries.map { Paths.get(it).toAbsolutePath() })
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt index 9d6aa8f..f8267cc 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.js.config.wasmTarget import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider @@ -27,9 +26,12 @@ import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.konan.NativePlatforms import org.jetbrains.kotlin.platform.wasm.WasmPlatforms +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.multiplatform.hmppModuleName import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys +import org.jetbrains.kotlin.wasm.config.wasmTarget val isCommonSourceForPsi: (KtFile) -> Boolean = { it.isCommonSource == true } val fileBelongsToModuleForPsi: (KtFile, String) -> Boolean = { file, moduleName -> file.hmppModuleName == moduleName } @@ -230,8 +232,12 @@ lookupTracker: LookupTracker?, icData: KlibIcData?, ): List<SessionWithSources<F>> { + val platform = when (configuration.get(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS)) { + WasmTarget.JS -> WasmPlatforms.wasmJs + WasmTarget.WASI -> WasmPlatforms.wasmWasi + } return prepareSessions( - files, configuration, rootModuleName, WasmPlatforms.Default, + files, configuration, rootModuleName, platform, metadataCompilationMode = false, libraryList, isCommonSource, isScript = { false }, fileBelongsToModule, createLibrarySession = { sessionProvider ->
diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CheckersContainers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CheckersContainers.kt index 1193474..9f3ebcc 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CheckersContainers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CheckersContainers.kt
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.analysis.native.checkers.NativeExpressionCheckers import org.jetbrains.kotlin.fir.analysis.wasm.checkers.* import org.jetbrains.kotlin.fir.session.FirSessionConfigurator -import org.jetbrains.kotlin.js.config.WasmTarget +import org.jetbrains.kotlin.platform.wasm.WasmTarget fun FirSessionConfigurator.registerCommonCheckers() { useCheckers(CommonDeclarationCheckers)
diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirWasmSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirWasmSessionFactory.kt index a890d65..5f5f9e1 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirWasmSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirWasmSessionFactory.kt
@@ -20,9 +20,9 @@ import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.wasm.resolve.WasmPlatformAnalyzerServices import org.jetbrains.kotlin.wasm.resolve.WasmWasiPlatformAnalyzerServices
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AddContinuationToFunctionCallsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AddContinuationToFunctionCallsLowering.kt index f232e9c..9e8a06d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AddContinuationToFunctionCallsLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AddContinuationToFunctionCallsLowering.kt
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.backend.common.lower.coroutines.AddContinuationToNonLocalSuspendFunctionsLowering import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.js.config.JSConfigurationKeys /** * Requires [AddContinuationToLocalSuspendFunctionsLowering] and
diff --git a/compiler/ir/backend.wasm/build.gradle.kts b/compiler/ir/backend.wasm/build.gradle.kts index f021c44..fe0fe15 100644 --- a/compiler/ir/backend.wasm/build.gradle.kts +++ b/compiler/ir/backend.wasm/build.gradle.kts
@@ -17,6 +17,9 @@ api(project(":compiler:backend.js")) api(project(":wasm:wasm.ir")) + implementation(project(":wasm:wasm.frontend")) + implementation(project(":wasm:wasm.config")) + compileOnly(intellijCore()) }
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt index 0b1d6da..3a4f09f 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt
@@ -34,10 +34,10 @@ import org.jetbrains.kotlin.ir.util.addChild import org.jetbrains.kotlin.ir.util.file import org.jetbrains.kotlin.ir.util.irMessageLogger -import org.jetbrains.kotlin.js.config.WasmTarget -import org.jetbrains.kotlin.js.config.wasmTarget import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.wasm.WasmTarget +import org.jetbrains.kotlin.wasm.config.wasmTarget class WasmBackendContext( val module: ModuleDescriptor,
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmLoweringPhases.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmLoweringPhases.kt index 6659bb4..b71e647 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmLoweringPhases.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmLoweringPhases.kt
@@ -20,8 +20,7 @@ import org.jetbrains.kotlin.ir.backend.js.lower.inline.RemoveInlineDeclarationsWithReifiedTypeParametersLowering import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.interpreter.IrInterpreterConfiguration -import org.jetbrains.kotlin.platform.WasmPlatform -import org.jetbrains.kotlin.platform.toTargetPlatform +import org.jetbrains.kotlin.platform.wasm.WasmPlatforms private fun List<CompilerPhase<WasmBackendContext, IrModuleFragment, IrModuleFragment>>.toCompilerPhase() = reduce { acc, lowering -> acc.then(lowering) } @@ -624,7 +623,7 @@ { context -> val configuration = IrInterpreterConfiguration( printOnlyExceptionMessage = true, - platform = WasmPlatform.toTargetPlatform(), + platform = WasmPlatforms.unspecifiedWasmPlatform, ) ConstEvaluationLowering(context, configuration = configuration) },
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt index 3c9c974..abd0c9a 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt
@@ -23,11 +23,11 @@ import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.constructors import org.jetbrains.kotlin.ir.util.render -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.resolve.scopes.MemberScope +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys @OptIn(ObsoleteDescriptorBasedAPI::class) class WasmSymbols( @@ -421,7 +421,7 @@ private val invokeOnExportedFunctionExitIfWasi = - when (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) { + when (context.configuration.get(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) { true -> getInternalFunction("invokeOnExportedFunctionExit") else -> null }
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/compiler.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/compiler.kt index b746190..7707fcb 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/compiler.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/compiler.kt
@@ -8,6 +8,7 @@ import org.jetbrains.kotlin.backend.common.linkage.issues.checkNoUnboundSymbols import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.PhaserState +import org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator import org.jetbrains.kotlin.backend.wasm.ir2wasm.JsModuleAndQualifierReference import org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment import org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmModuleFragmentGenerator @@ -15,7 +16,6 @@ import org.jetbrains.kotlin.backend.wasm.lower.JsInteropFunctionsLowering import org.jetbrains.kotlin.backend.wasm.lower.markExportedDeclarations import org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -import org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator import org.jetbrains.kotlin.ir.backend.js.MainModule import org.jetbrains.kotlin.ir.backend.js.ModulesStructure import org.jetbrains.kotlin.ir.backend.js.export.ExportModelToTsDeclarations @@ -25,11 +25,11 @@ import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator import org.jetbrains.kotlin.ir.util.patchDeclarationParents -import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.serialization.js.ModuleKind -import org.jetbrains.kotlin.utils.addToStdlib.runIf import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty +import org.jetbrains.kotlin.utils.addToStdlib.runIf +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys import org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToBinary import org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToText import java.io.ByteArrayOutputStream @@ -126,7 +126,7 @@ ): WasmCompilerResult { val compiledWasmModule = WasmCompiledModuleFragment( backendContext.irBuiltIns, - backendContext.configuration.getBoolean(JSConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS) + backendContext.configuration.getBoolean(WasmConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS) ) val codeGenerator = WasmModuleFragmentGenerator(backendContext, compiledWasmModule, allowIncompleteImplementations = allowIncompleteImplementations) allModules.forEach { codeGenerator.collectInterfaceTables(it) }
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt index ea054c2..1969bf5 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.backend.wasm.WasmSymbols import org.jetbrains.kotlin.backend.wasm.lower.JsExceptionRevealOrigin import org.jetbrains.kotlin.backend.wasm.utils.* -import org.jetbrains.kotlin.backend.wasm.utils.isCanonical import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement @@ -24,7 +23,7 @@ import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid -import org.jetbrains.kotlin.js.config.JSConfigurationKeys +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys import org.jetbrains.kotlin.wasm.ir.* import org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation @@ -138,7 +137,7 @@ override fun visitThrow(expression: IrThrow) { generateExpression(expression.value) - if (context.backendContext.configuration.getBoolean(JSConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS)) { + if (context.backendContext.configuration.getBoolean(WasmConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS)) { body.buildUnreachable(SourceLocation.NoLocation("Unreachable is inserted instead of a `throw` instruction")) return } @@ -149,12 +148,12 @@ override fun visitTry(aTry: IrTry) { assert(aTry.isCanonical(irBuiltIns)) { "expected canonical try/catch" } - if (context.backendContext.configuration.getBoolean(JSConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS)) { + if (context.backendContext.configuration.getBoolean(WasmConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS)) { generateExpression(aTry.tryResult) return } - if (context.backendContext.configuration.getBoolean(JSConfigurationKeys.WASM_USE_NEW_EXCEPTION_PROPOSAL)) { + if (context.backendContext.configuration.getBoolean(WasmConfigurationKeys.WASM_USE_NEW_EXCEPTION_PROPOSAL)) { generateTryFollowingNewProposal(aTry) } else { generateTryFollowingOldProposal(aTry) @@ -478,13 +477,13 @@ } // Some intrinsics are a special case because we want to remove them completely, including their arguments. - if (!backendContext.configuration.getNotNull(JSConfigurationKeys.WASM_ENABLE_ARRAY_RANGE_CHECKS)) { + if (!backendContext.configuration.getNotNull(WasmConfigurationKeys.WASM_ENABLE_ARRAY_RANGE_CHECKS)) { if (call.symbol == wasmSymbols.rangeCheck) { body.buildGetUnit() return } } - if (!backendContext.configuration.getNotNull(JSConfigurationKeys.WASM_ENABLE_ASSERTS)) { + if (!backendContext.configuration.getNotNull(WasmConfigurationKeys.WASM_ENABLE_ASSERTS)) { if (call.symbol in wasmSymbols.assertFuncs) { body.buildGetUnit() return @@ -800,7 +799,7 @@ } if (context.backendContext.isWasmJsTarget && expression.origin == JsExceptionRevealOrigin.JS_EXCEPTION_REVEAL) { - if (context.backendContext.configuration.getBoolean(JSConfigurationKeys.WASM_USE_NEW_EXCEPTION_PROPOSAL)) { + if (context.backendContext.configuration.getBoolean(WasmConfigurationKeys.WASM_USE_NEW_EXCEPTION_PROPOSAL)) { generateTryCatchAllFollowingNewProposal(expression) } else { generateTryCatchAllFollowingOldProposal(expression)
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/InvokeOnExportedFunctionExitLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/InvokeOnExportedFunctionExitLowering.kt index 11a8c5b..560e28d 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/InvokeOnExportedFunctionExitLowering.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/InvokeOnExportedFunctionExitLowering.kt
@@ -19,8 +19,6 @@ import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.util.toIrConst -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.name.Name // This pass needed to call coroutines event loop run after exported functions calls
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsCodeCallsLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsCodeCallsLowering.kt index e118dbc..09ebfec 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsCodeCallsLowering.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsCodeCallsLowering.kt
@@ -9,12 +9,15 @@ import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.backend.wasm.WasmBackendContext import org.jetbrains.kotlin.ir.builders.* -import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrProperty +import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.types.defaultType -import org.jetbrains.kotlin.ir.util.* -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget +import org.jetbrains.kotlin.ir.util.copyTo +import org.jetbrains.kotlin.ir.util.copyTypeParametersFrom +import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat /** * Lower calls to `js(code)` into `@JsFun(code) external` functions.
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsExceptionRevealLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsExceptionRevealLowering.kt index d6df662..c909782 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsExceptionRevealLowering.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsExceptionRevealLowering.kt
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid -import org.jetbrains.kotlin.js.config.JSConfigurationKeys +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys /** * Wraps try block with finalizer and/or catch block for Throwable/JsException into JS reveal intrinsic @@ -44,7 +44,7 @@ class JsExceptionRevealLowering(private val context: WasmBackendContext) : BodyLoweringPass { override fun lower(irBody: IrBody, container: IrDeclaration) { - if (context.isWasmJsTarget && !context.configuration.getBoolean(JSConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS)) { + if (context.isWasmJsTarget && !context.configuration.getBoolean(WasmConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS)) { irBody.transformChildrenVoid(JsExceptionRevealTransformer(context, container.symbol)) } }
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/UnhandledExceptionLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/UnhandledExceptionLowering.kt index 9994785..f9edb98 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/UnhandledExceptionLowering.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/UnhandledExceptionLowering.kt
@@ -20,8 +20,6 @@ import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.util.toIrConst -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.name.Name // This pass needed to wrap around unhandled exceptions from JsExport functions and throw JS exception for call from JS site
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/WasmTypeOperatorLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/WasmTypeOperatorLowering.kt index fcb7289..4b5fa68 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/WasmTypeOperatorLowering.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/WasmTypeOperatorLowering.kt
@@ -18,13 +18,14 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.backend.js.utils.erasedUpperBound import org.jetbrains.kotlin.ir.builders.* -import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrTypeParameter +import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget class WasmTypeOperatorLowering(val context: WasmBackendContext) : FileLoweringPass {
diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/markAdditionalExportedDeclarations.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/markAdditionalExportedDeclarations.kt index 8c59867..221bc1d 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/markAdditionalExportedDeclarations.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/markAdditionalExportedDeclarations.kt
@@ -11,8 +11,6 @@ import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.name.FqName /**
diff --git a/compiler/ir/serialization.js/build.gradle.kts b/compiler/ir/serialization.js/build.gradle.kts index afef3f1..a1966e9 100644 --- a/compiler/ir/serialization.js/build.gradle.kts +++ b/compiler/ir/serialization.js/build.gradle.kts
@@ -11,6 +11,7 @@ implementation(project(":compiler:ir.backend.common")) implementation(project(":compiler:fir:fir-serialization")) + implementation(project(":wasm:wasm.config")) compileOnly(intellijCore()) }
diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index 2f7c720..47fc179 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt
@@ -47,7 +47,6 @@ import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.konan.properties.Properties import org.jetbrains.kotlin.konan.properties.propertyList import org.jetbrains.kotlin.library.* @@ -55,6 +54,7 @@ import org.jetbrains.kotlin.library.impl.buildKotlinLibrary import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories import org.jetbrains.kotlin.library.metadata.KlibMetadataVersion +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.progress.IncrementalNextRoundException import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus import org.jetbrains.kotlin.psi.KtFile @@ -66,7 +66,6 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.StorageManager -import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.utils.DFS import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.memoryOptimizedFilter
diff --git a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/TargetPlatformEnum.kt b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/TargetPlatformEnum.kt index 17cdff2..181fd74 100644 --- a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/TargetPlatformEnum.kt +++ b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/TargetPlatformEnum.kt
@@ -7,13 +7,15 @@ import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.platform.TargetPlatform -import org.jetbrains.kotlin.platform.WasmPlatform import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.platform.jvm.JdkPlatform import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.konan.NativePlatformUnspecifiedTarget import org.jetbrains.kotlin.platform.konan.NativePlatforms +import org.jetbrains.kotlin.platform.wasm.WasmPlatformUnspecifiedTarget +import org.jetbrains.kotlin.platform.wasm.WasmPlatformWithTarget import org.jetbrains.kotlin.platform.wasm.WasmPlatforms +import org.jetbrains.kotlin.platform.wasm.WasmTarget enum class TargetPlatformEnum(val targetPlatform: TargetPlatform) { Common( @@ -21,7 +23,8 @@ setOf( JdkPlatform(JvmTarget.DEFAULT), JsPlatforms.DefaultSimpleJsPlatform, - WasmPlatform, + WasmPlatformWithTarget(WasmTarget.JS), + WasmPlatformWithTarget(WasmTarget.WASI), NativePlatformUnspecifiedTarget ) ) @@ -32,6 +35,6 @@ JVM_1_8(JvmPlatforms.jvm8), JS(JsPlatforms.defaultJsPlatform), - Wasm(WasmPlatforms.Default), + Wasm(WasmPlatforms.wasmJs), Native(NativePlatforms.unspecifiedNativePlatform) }
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/TestSetupUtils.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/TestSetupUtils.kt index 972339a..cdad8a4 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/TestSetupUtils.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/TestSetupUtils.kt
@@ -11,9 +11,10 @@ import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.isJs -import org.jetbrains.kotlin.platform.isWasm import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.platform.konan.isNative +import org.jetbrains.kotlin.platform.wasm.isWasmJs +import org.jetbrains.kotlin.platform.wasm.isWasmWasi import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerServices @@ -21,6 +22,7 @@ import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.compilerConfigurationProvider import org.jetbrains.kotlin.wasm.resolve.WasmJsPlatformAnalyzerServices +import org.jetbrains.kotlin.wasm.resolve.WasmWasiPlatformAnalyzerServices import java.io.File /** @@ -45,7 +47,8 @@ isJs() -> JsPlatformAnalyzerServices isNative() -> NativePlatformAnalyzerServices isCommon() -> CommonPlatformAnalyzerServices - isWasm() -> WasmJsPlatformAnalyzerServices + isWasmJs() -> WasmJsPlatformAnalyzerServices + isWasmWasi() -> WasmWasiPlatformAnalyzerServices else -> error("Unknown target platform: $this") } }
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontend2IrConverter.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontend2IrConverter.kt index f6df3f9..5194c4c 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontend2IrConverter.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontend2IrConverter.kt
@@ -14,8 +14,11 @@ import org.jetbrains.kotlin.codegen.CodegenFactory import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory -import org.jetbrains.kotlin.ir.backend.js.* +import org.jetbrains.kotlin.ir.backend.js.KlibMetadataIncrementalSerializer +import org.jetbrains.kotlin.ir.backend.js.getSerializedData +import org.jetbrains.kotlin.ir.backend.js.incrementalDataProvider import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerIr +import org.jetbrains.kotlin.ir.backend.js.sortDependencies import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.util.SymbolTable @@ -32,6 +35,7 @@ import org.jetbrains.kotlin.test.services.* import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys class ClassicFrontend2IrConverter( testServices: TestServices @@ -149,7 +153,7 @@ } val errorPolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT - val analyzerFacade = TopDownAnalyzerFacadeForWasm.facadeFor(configuration.get(JSConfigurationKeys.WASM_TARGET)) + val analyzerFacade = TopDownAnalyzerFacadeForWasm.facadeFor(configuration.get(WasmConfigurationKeys.WASM_TARGET)) val hasErrors = analyzerFacade.checkForErrors(sourceFiles, analysisResult.bindingContext, errorPolicy) val metadataSerializer = KlibMetadataIncrementalSerializer( sourceFiles,
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt index 8e645ae..049969b 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt
@@ -46,8 +46,6 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.ir.backend.js.JsFactories import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.library.metadata.CurrentKlibModuleOrigin import org.jetbrains.kotlin.library.metadata.KlibMetadataFactories import org.jetbrains.kotlin.library.metadata.KlibModuleOrigin @@ -58,12 +56,15 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.native.FakeTopDownAnalyzerFacadeForNative import org.jetbrains.kotlin.platform.* -import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.platform.konan.isNative +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.* +import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer +import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices +import org.jetbrains.kotlin.resolve.TargetEnvironment +import org.jetbrains.kotlin.resolve.TopDownAnalysisMode import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory @@ -81,6 +82,7 @@ import org.jetbrains.kotlin.test.util.KtTestUtil import org.jetbrains.kotlin.types.typeUtil.closure import org.jetbrains.kotlin.utils.addToStdlib.runIf +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys import java.io.File class ClassicFrontendFacade( @@ -346,7 +348,7 @@ dependencyDescriptors: List<ModuleDescriptor>, friendsDescriptors: List<ModuleDescriptor>, ): AnalysisResult { - val suffix = when (configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS)) { + val suffix = when (configuration.get(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS)) { WasmTarget.JS -> "-js" WasmTarget.WASI -> "-wasi" else -> error("Unexpected wasi target") @@ -366,7 +368,7 @@ val allDependencies = runtimeKlibs + dependencyDescriptors + friendLibraries + friendsDescriptors + transitiveLibraries val builtInModuleDescriptor = allDependencies.firstNotNullOfOrNull { it.builtIns }?.builtInsModule - val analyzerFacade = TopDownAnalyzerFacadeForWasm.facadeFor(configuration.get(JSConfigurationKeys.WASM_TARGET)) + val analyzerFacade = TopDownAnalyzerFacadeForWasm.facadeFor(configuration.get(WasmConfigurationKeys.WASM_TARGET)) return analyzerFacade.analyzeFiles( files,
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirFrontendFacade.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirFrontendFacade.kt index 358c569..bda61c5 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirFrontendFacade.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/FirFrontendFacade.kt
@@ -29,9 +29,6 @@ import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.session.* import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget -import org.jetbrains.kotlin.js.config.wasmTarget import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.TargetPlatform @@ -40,6 +37,7 @@ import org.jetbrains.kotlin.platform.isWasm import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.platform.konan.isNative +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.FirParser import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives @@ -56,6 +54,8 @@ import org.jetbrains.kotlin.test.services.configuration.NativeEnvironmentConfigurator import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator import org.jetbrains.kotlin.utils.addToStdlib.runIf +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys +import org.jetbrains.kotlin.wasm.config.wasmTarget import java.nio.file.Paths open class FirFrontendFacade( @@ -445,7 +445,7 @@ } targetPlatform.isWasm() -> { val runtimeKlibsPaths = WasmEnvironmentConfigurator.getRuntimePathsForModule( - configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) + configuration.get(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS) ) val (transitiveLibraries, friendLibraries) = getTransitivesAndFriends(mainModule, testServices) dependencies(runtimeKlibsPaths.map { Paths.get(it).toAbsolutePath() })
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/TestFirWasmSessionFactory.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/TestFirWasmSessionFactory.kt index 7a4d104..0506755 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/TestFirWasmSessionFactory.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/TestFirWasmSessionFactory.kt
@@ -15,14 +15,14 @@ import org.jetbrains.kotlin.fir.session.FirSessionConfigurator import org.jetbrains.kotlin.fir.session.FirWasmSessionFactory import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.test.model.DependencyRelation import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys import java.io.File object TestFirWasmSessionFactory { @@ -37,7 +37,7 @@ languageVersionSettings: LanguageVersionSettings, registerExtraComponents: ((FirSession) -> Unit), ): FirSession { - val target = configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) + val target = configuration.get(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS) val resolvedLibraries = resolveLibraries( configuration = configuration, paths = getAllWasmDependenciesPaths(module, testServices, target) @@ -81,7 +81,7 @@ val paths = getAllWasmDependenciesPaths( module = module, testServices = testServices, - target = configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) + target = configuration.get(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS) ) return resolveLibraries(configuration, paths) }
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/WasmEnvironmentConfigurator.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/WasmEnvironmentConfigurator.kt index 5a81144..011d78e 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/WasmEnvironmentConfigurator.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/WasmEnvironmentConfigurator.kt
@@ -10,10 +10,9 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.LanguageVersion -import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding -import org.jetbrains.kotlin.js.config.WasmTarget +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.INFER_MAIN_MODULE import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.PROPERTY_LAZY_INITIALIZATION @@ -23,24 +22,21 @@ import org.jetbrains.kotlin.test.directives.WasmEnvironmentConfigurationDirectives.USE_NEW_EXCEPTION_HANDLING_PROPOSAL import org.jetbrains.kotlin.test.directives.model.DirectivesContainer import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives -import org.jetbrains.kotlin.test.model.ArtifactKinds -import org.jetbrains.kotlin.test.model.DependencyKind -import org.jetbrains.kotlin.test.model.DependencyRelation import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.* -import java.io.File +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys class WasmEnvironmentConfiguratorJs(testServices: TestServices) : WasmEnvironmentConfigurator(testServices) { override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) { super.configureCompilerConfiguration(configuration, module) - configuration.put(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) + configuration.put(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS) } } class WasmEnvironmentConfiguratorWasi(testServices: TestServices) : WasmEnvironmentConfigurator(testServices) { override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) { super.configureCompilerConfiguration(configuration, module) - configuration.put(JSConfigurationKeys.WASM_TARGET, WasmTarget.WASI) + configuration.put(WasmConfigurationKeys.WASM_TARGET, WasmTarget.WASI) } } @@ -91,8 +87,8 @@ configuration.put(JSConfigurationKeys.MODULE_KIND, ModuleKind.ES) configuration.put(CommonConfigurationKeys.MODULE_NAME, module.name) - configuration.put(JSConfigurationKeys.WASM_ENABLE_ASSERTS, true) - configuration.put(JSConfigurationKeys.WASM_ENABLE_ARRAY_RANGE_CHECKS, true) + configuration.put(WasmConfigurationKeys.WASM_ENABLE_ASSERTS, true) + configuration.put(WasmConfigurationKeys.WASM_ENABLE_ARRAY_RANGE_CHECKS, true) val sourceDirs = module.files.map { it.originalFile.parent }.distinct() configuration.put(JSConfigurationKeys.SOURCE_MAP_SOURCE_ROOTS, sourceDirs) @@ -101,7 +97,7 @@ val sourceMapSourceEmbedding = registeredDirectives[SOURCE_MAP_EMBED_SOURCES].singleOrNull() ?: SourceMapSourceEmbedding.NEVER configuration.put(JSConfigurationKeys.SOURCE_MAP_EMBED_SOURCES, sourceMapSourceEmbedding) - configuration.put(JSConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS, DISABLE_WASM_EXCEPTION_HANDLING in registeredDirectives) - configuration.put(JSConfigurationKeys.WASM_USE_NEW_EXCEPTION_PROPOSAL, USE_NEW_EXCEPTION_HANDLING_PROPOSAL in registeredDirectives) + configuration.put(WasmConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS, DISABLE_WASM_EXCEPTION_HANDLING in registeredDirectives) + configuration.put(WasmConfigurationKeys.WASM_USE_NEW_EXCEPTION_PROPOSAL, USE_NEW_EXCEPTION_HANDLING_PROPOSAL in registeredDirectives) } } \ No newline at end of file
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt index 8bb7534..1275de0 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt
@@ -5,7 +5,6 @@ package org.jetbrains.kotlin.test.services.impl -import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.js.JsPlatforms @@ -377,7 +376,7 @@ nameSuffix == "COMMON" -> CommonPlatforms.defaultCommonPlatform nameSuffix == "JVM" -> JvmPlatforms.unspecifiedJvmPlatform // TODO(dsavvinov): determine JvmTarget precisely nameSuffix == "JS" -> JsPlatforms.defaultJsPlatform - nameSuffix == "WASM" -> WasmPlatforms.Default + nameSuffix == "WASM" -> WasmPlatforms.wasmJs nameSuffix == "NATIVE" -> NativePlatforms.unspecifiedNativePlatform nameSuffix.isEmpty() -> null // TODO(dsavvinov): this leads to 'null'-platform in ModuleDescriptor else -> throw IllegalStateException("Can't determine platform by name $nameSuffix")
diff --git a/core/compiler.common/src/org/jetbrains/kotlin/platform/WasmPlatform.kt b/core/compiler.common/src/org/jetbrains/kotlin/platform/WasmPlatform.kt index 7ad9446..9323a87 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/platform/WasmPlatform.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/platform/WasmPlatform.kt
@@ -5,7 +5,7 @@ package org.jetbrains.kotlin.platform -object WasmPlatform : SimplePlatform("Wasm") { +abstract class WasmPlatform(platformName: String) : SimplePlatform(platformName) { override val oldFashionedDescription: String get() = "Wasm " }
diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt index 56abecc..b141ded 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt
@@ -11,11 +11,7 @@ import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.config.isJps import org.jetbrains.kotlin.extensions.ApplicationExtensionDescriptor -import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind -import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind -import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind -import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind -import org.jetbrains.kotlin.platform.impl.WasmIdePlatformKind +import org.jetbrains.kotlin.platform.impl.* abstract class IdePlatformKind { abstract fun supportsTargetPlatform(platform: TargetPlatform): Boolean @@ -54,7 +50,8 @@ get() = listOf( JvmIdePlatformKind, JsIdePlatformKind, - WasmIdePlatformKind, + WasmJsIdePlatformKind, + WasmWasiIdePlatformKind, CommonIdePlatformKind, NativeIdePlatformKind )
diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/compat/compatConversions.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/compat/compatConversions.kt index 2ffdbee4..c7fd38b 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/compat/compatConversions.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/compat/compatConversions.kt
@@ -10,19 +10,15 @@ import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.IdePlatform -import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind -import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind -import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind -import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind import org.jetbrains.kotlin.platform.JsPlatform import org.jetbrains.kotlin.platform.WasmPlatform -import org.jetbrains.kotlin.platform.impl.WasmIdePlatformKind +import org.jetbrains.kotlin.platform.impl.* import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.platform.jvm.JdkPlatform import org.jetbrains.kotlin.platform.jvm.JvmPlatform import org.jetbrains.kotlin.platform.jvm.JvmPlatforms -import org.jetbrains.kotlin.platform.konan.NativePlatforms import org.jetbrains.kotlin.platform.konan.NativePlatform +import org.jetbrains.kotlin.platform.konan.NativePlatforms import org.jetbrains.kotlin.platform.wasm.WasmPlatforms typealias OldPlatform = org.jetbrains.kotlin.resolve.TargetPlatform @@ -54,7 +50,7 @@ is CommonIdePlatformKind.Platform -> CommonPlatforms.defaultCommonPlatform is JvmIdePlatformKind.Platform -> JvmPlatforms.jvmPlatformByTargetVersion(this.version) is JsIdePlatformKind.Platform -> JsPlatforms.defaultJsPlatform - is WasmIdePlatformKind.Platform -> WasmPlatforms.Default + is WasmIdePlatformKind.Platform -> WasmPlatforms.wasmJs is NativeIdePlatformKind.Platform -> NativePlatforms.unspecifiedNativePlatform else -> error("Unknown platform $this") }
diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/WasmIdePlatformKind.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/WasmIdePlatformKind.kt index 7b636e7..90fd0fb 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/WasmIdePlatformKind.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/WasmIdePlatformKind.kt
@@ -11,20 +11,41 @@ import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.platform.* -import org.jetbrains.kotlin.platform.wasm.WasmPlatforms +import org.jetbrains.kotlin.platform.isWasm +import org.jetbrains.kotlin.platform.wasm.* -object WasmIdePlatformKind : IdePlatformKind() { - override fun supportsTargetPlatform(platform: TargetPlatform): Boolean = platform.isWasm() - +abstract class WasmIdePlatformKind : IdePlatformKind() { override fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? { - return if (arguments is K2JSCompilerArguments && arguments.wasm) - WasmPlatforms.Default - else - null + return if (arguments is K2JSCompilerArguments && arguments.wasm) { + val wasmTarget = arguments.wasmTarget?.let { WasmTarget.fromName(it) } + wasmTarget?.let { + WasmPlatforms.wasmPlatformByTargetVersion(it) + } + } else null } - val platforms get() = listOf(WasmPlatforms.Default) - override val defaultPlatform get() = WasmPlatforms.Default + override fun createArguments(): CommonCompilerArguments { + return K2JSCompilerArguments() + } + + override val argumentsClass get() = K2JSCompilerArguments::class.java + + @Deprecated( + message = "IdePlatform is deprecated and will be removed soon, please, migrate to org.jetbrains.kotlin.platform.TargetPlatform", + level = DeprecationLevel.ERROR + ) + object Platform : IdePlatform<WasmIdePlatformKind, K2JSCompilerArguments>() { + override val kind get() = WasmJsIdePlatformKind + override val version get() = TargetPlatformVersion.NoVersion + override fun createArguments(init: K2JSCompilerArguments.() -> Unit) = K2JSCompilerArguments().apply(init) + } +} + +object WasmJsIdePlatformKind : WasmIdePlatformKind() { + override fun supportsTargetPlatform(platform: TargetPlatform): Boolean = + platform.isWasmJs() || (!platform.isWasmWasi() && platform.isWasm()) + + override val defaultPlatform get() = WasmPlatforms.wasmJs @Deprecated( message = "IdePlatform is deprecated and will be removed soon, please, migrate to org.jetbrains.kotlin.platform.TargetPlatform", @@ -38,18 +59,28 @@ override val argumentsClass get() = K2JSCompilerArguments::class.java - override val name get() = "WebAssembly" + override val name get() = "WebAssembly JS" +} + +object WasmWasiIdePlatformKind : WasmIdePlatformKind() { + override fun supportsTargetPlatform(platform: TargetPlatform): Boolean = platform.isWasmWasi() + + override val defaultPlatform get() = WasmPlatforms.wasmWasi @Deprecated( message = "IdePlatform is deprecated and will be removed soon, please, migrate to org.jetbrains.kotlin.platform.TargetPlatform", level = DeprecationLevel.ERROR ) - object Platform : IdePlatform<WasmIdePlatformKind, K2JSCompilerArguments>() { - override val kind get() = WasmIdePlatformKind - override val version get() = TargetPlatformVersion.NoVersion - override fun createArguments(init: K2JSCompilerArguments.() -> Unit) = K2JSCompilerArguments().apply(init) + override fun getDefaultPlatform(): IdePlatform<*, *> = WasmIdePlatformKind.Platform + + override fun createArguments(): CommonCompilerArguments { + return K2JSCompilerArguments() } + + override val argumentsClass get() = K2JSCompilerArguments::class.java + + override val name get() = "WebAssembly WASI" } -val IdePlatformKind?.isWasm - get() = this is WasmIdePlatformKind +val IdePlatformKind?.isWasmJs + get() = this is WasmJsIdePlatformKind
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java index 320bd99..c7d19e3 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java
@@ -5,14 +5,13 @@ package org.jetbrains.kotlin.js.config; -import org.jetbrains.kotlin.konan.file.ZipFileSystemAccessor; import org.jetbrains.kotlin.config.CompilerConfigurationKey; -import org.jetbrains.kotlin.incremental.js.IncrementalNextRoundChecker; import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider; +import org.jetbrains.kotlin.incremental.js.IncrementalNextRoundChecker; import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer; +import org.jetbrains.kotlin.konan.file.ZipFileSystemAccessor; import org.jetbrains.kotlin.serialization.js.ModuleKind; -import javax.annotation.Nullable; import java.io.File; import java.util.List; import java.util.Map; @@ -119,24 +118,6 @@ public static final CompilerConfigurationKey<Boolean> GENERATE_STRICT_IMPLICIT_EXPORT = CompilerConfigurationKey.create("enable strict implicitly exported entities types inside d.ts files"); - public static final CompilerConfigurationKey<Boolean> WASM_ENABLE_ARRAY_RANGE_CHECKS = - CompilerConfigurationKey.create("enable array range checks"); - - public static final CompilerConfigurationKey<Boolean> WASM_ENABLE_ASSERTS = - CompilerConfigurationKey.create("enable asserts"); - - public static final CompilerConfigurationKey<Boolean> WASM_GENERATE_WAT = - CompilerConfigurationKey.create("generate wat file"); - - public static final CompilerConfigurationKey<WasmTarget> WASM_TARGET = - CompilerConfigurationKey.create("wasm target"); - - public static final CompilerConfigurationKey<Boolean> WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS = - CompilerConfigurationKey.create("use wasm traps instead of throwing exceptions"); - - public static final CompilerConfigurationKey<Boolean> WASM_USE_NEW_EXCEPTION_PROPOSAL = - CompilerConfigurationKey.create("use wasm new exception proposal"); - public static final CompilerConfigurationKey<ZipFileSystemAccessor> ZIP_FILE_SYSTEM_ACCESSOR = CompilerConfigurationKey.create("zip file system accessor, used for klib reading");
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt index e8709bd..78cc414 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt
@@ -37,7 +37,6 @@ ), ) { override fun configureModuleComponents(container: StorageComponentContainer) { - container.useInstance(JsNameSuggestion()) container.useImpl<JsCallChecker>() container.useImpl<JsTypeSpecificityComparator>() container.useImpl<JsNameClashChecker>()
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinWasmTargetType.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinWasmTargetType.kt index 04277a2..6ee37f5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinWasmTargetType.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinWasmTargetType.kt
@@ -5,6 +5,8 @@ package org.jetbrains.kotlin.gradle.targets.js +import org.jetbrains.kotlin.platform.wasm.WasmTarget + enum class KotlinWasmTargetType { WASI, JS; @@ -15,4 +17,11 @@ KotlinWasmTargetType.WASI -> KotlinWasmTargetAttribute.wasi KotlinWasmTargetType.JS -> KotlinWasmTargetAttribute.js } +} + +fun KotlinWasmTargetType.toCompilerTarget(): WasmTarget { + return when(this) { + KotlinWasmTargetType.WASI -> WasmTarget.WASI + KotlinWasmTargetType.JS -> WasmTarget.JS + } } \ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt index 328d101..5ac3b55 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt
@@ -7,8 +7,12 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl +import org.jetbrains.kotlin.platform.wasm.WasmTarget import javax.inject.Inject open class KotlinJsIrCompilation @Inject internal constructor( - compilation: KotlinCompilationImpl, -) : KotlinJsCompilation(compilation) + compilation: KotlinCompilationImpl +) : KotlinJsCompilation(compilation) { + var wasmTarget: WasmTarget? = null + internal set +}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilationFactory.kt index f99f161..a37bb2f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilationFactory.kt
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinJsCompilerOptionsFactory +import org.jetbrains.kotlin.gradle.targets.js.toCompilerTarget class KotlinJsIrCompilationFactory internal constructor( override val target: KotlinJsIrTarget, @@ -52,5 +53,7 @@ override fun create(name: String): KotlinJsIrCompilation = target.project.objects.newInstance( itemClass, compilationImplFactory.create(target, name) - ) + ).also { + it.wasmTarget = target.wasmTargetType?.toCompilerTarget() + } }
diff --git a/wasm/wasm.config/src/org/jetbrains/kotlin/platform/wasm/WasmPlatform.kt b/wasm/wasm.config/src/org/jetbrains/kotlin/platform/wasm/WasmPlatform.kt index 2c25a42..1fd0a81 100644 --- a/wasm/wasm.config/src/org/jetbrains/kotlin/platform/wasm/WasmPlatform.kt +++ b/wasm/wasm.config/src/org/jetbrains/kotlin/platform/wasm/WasmPlatform.kt
@@ -6,8 +6,62 @@ package org.jetbrains.kotlin.platform.wasm import org.jetbrains.kotlin.platform.TargetPlatform -import org.jetbrains.kotlin.platform.WasmPlatform +import org.jetbrains.kotlin.platform.toTargetPlatform +import org.jetbrains.kotlin.platform.WasmPlatform as CoreWasmPlatform + +abstract class WasmPlatform(platformName: String) : CoreWasmPlatform(platformName) { + override val oldFashionedDescription: String + get() = "Wasm" +} + +object WasmPlatformUnspecifiedTarget : WasmPlatform("Wasm") { + override val targetName: String + get() = "general" +} + +class WasmPlatformWithTarget(val target: WasmTarget) : WasmPlatform(target.alias) { + override val targetName: String + get() = target.name +} object WasmPlatforms { - object Default : TargetPlatform(setOf(WasmPlatform)) + private val platforms: Map<WasmTarget, TargetPlatform> = + WasmTarget.entries.associateWith { WasmPlatformWithTarget(it).toTargetPlatform() } + + @Suppress("DEPRECATION_ERROR") + val unspecifiedWasmPlatform: TargetPlatform + get() = Default + + val wasmJs = platforms[WasmTarget.JS]!! + val wasmWasi = platforms[WasmTarget.WASI]!! + + fun wasmPlatformByTargetVersion(targetVersion: WasmTarget): TargetPlatform = + platforms[targetVersion]!! + + val allWasmPlatforms: List<TargetPlatform> = listOf(unspecifiedWasmPlatform) + platforms.values + + fun wasmPlatformByTargets(targets: Collection<WasmTarget>): TargetPlatform { + val platforms = targets.map { wasmPlatformByTargetVersion(it) } + return when (platforms.size) { + 0 -> wasmJs + 1 -> platforms.first() + else -> TargetPlatform(platforms.flatMap { it.componentPlatforms }.toSet()) + } + } + + fun wasmPlatformByTargetNames(targets: Collection<String>): TargetPlatform = + wasmPlatformByTargets(targets.mapNotNull { WasmTarget.fromName(it) }) + + object Default : TargetPlatform(setOf(WasmPlatformUnspecifiedTarget)) +} + +fun TargetPlatform?.isWasm(): Boolean = this?.singleOrNull() is WasmPlatform + +fun TargetPlatform?.isWasmJs(): Boolean { + val platform = this?.singleOrNull() + return platform is WasmPlatformWithTarget && platform.target == WasmTarget.JS +} +fun TargetPlatform?.isWasmWasi(): Boolean { + val platform = this?.singleOrNull() + return platform is WasmPlatformWithTarget && platform.target == WasmTarget.WASI } \ No newline at end of file
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/WasmTarget.kt b/wasm/wasm.config/src/org/jetbrains/kotlin/platform/wasm/WasmTarget.kt similarity index 64% rename from js/js.frontend/src/org/jetbrains/kotlin/js/config/WasmTarget.kt rename to wasm/wasm.config/src/org/jetbrains/kotlin/platform/wasm/WasmTarget.kt index 289729f..060e338 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/WasmTarget.kt +++ b/wasm/wasm.config/src/org/jetbrains/kotlin/platform/wasm/WasmTarget.kt
@@ -3,9 +3,7 @@ * 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.js.config - -import org.jetbrains.kotlin.config.CompilerConfiguration +package org.jetbrains.kotlin.platform.wasm enum class WasmTarget(val alias: String) { JS("wasm-js"), @@ -14,7 +12,4 @@ companion object { fun fromName(name: String): WasmTarget? = WasmTarget.entries.firstOrNull { it.alias == name } } -} - -val CompilerConfiguration.wasmTarget: WasmTarget - get() = get(JSConfigurationKeys.WASM_TARGET, /* defaultValue = */ WasmTarget.JS) \ No newline at end of file +} \ No newline at end of file
diff --git a/wasm/wasm.frontend/build.gradle.kts b/wasm/wasm.frontend/build.gradle.kts index 76941e1..3ec4ac26 100644 --- a/wasm/wasm.frontend/build.gradle.kts +++ b/wasm/wasm.frontend/build.gradle.kts
@@ -7,6 +7,7 @@ api(project(":compiler:util")) api(project(":compiler:frontend")) api(project(":js:js.frontend")) + api(project(":wasm:wasm.config")) compileOnly(intellijCore()) }
diff --git a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/config/WasmConfigurationKeys.java b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/config/WasmConfigurationKeys.java new file mode 100644 index 0000000..c51f23d --- /dev/null +++ b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/config/WasmConfigurationKeys.java
@@ -0,0 +1,29 @@ +/* + * Copyright 2010-2020 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.wasm.config; + +import org.jetbrains.kotlin.config.CompilerConfigurationKey; +import org.jetbrains.kotlin.platform.wasm.WasmTarget; + +public class WasmConfigurationKeys { + public static final CompilerConfigurationKey<Boolean> WASM_ENABLE_ARRAY_RANGE_CHECKS = + CompilerConfigurationKey.create("enable array range checks"); + + public static final CompilerConfigurationKey<Boolean> WASM_ENABLE_ASSERTS = + CompilerConfigurationKey.create("enable asserts"); + + public static final CompilerConfigurationKey<Boolean> WASM_GENERATE_WAT = + CompilerConfigurationKey.create("generate wat file"); + + public static final CompilerConfigurationKey<WasmTarget> WASM_TARGET = + CompilerConfigurationKey.create("wasm target"); + + public static final CompilerConfigurationKey<Boolean> WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS = + CompilerConfigurationKey.create("use wasm traps instead of throwing exceptions"); + + public static final CompilerConfigurationKey<Boolean> WASM_USE_NEW_EXCEPTION_PROPOSAL = + CompilerConfigurationKey.create("use wasm new exception proposal"); +}
diff --git a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/config/WasmTarget.kt b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/config/WasmTarget.kt new file mode 100644 index 0000000..3b2c795 --- /dev/null +++ b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/config/WasmTarget.kt
@@ -0,0 +1,12 @@ +/* + * Copyright 2010-2023 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.wasm.config + +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.platform.wasm.WasmTarget + +val CompilerConfiguration.wasmTarget: WasmTarget + get() = get(WasmConfigurationKeys.WASM_TARGET, /* defaultValue = */ WasmTarget.JS) \ No newline at end of file
diff --git a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/WasmPlatformConfigurator.kt b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/WasmPlatformConfigurator.kt index a4eda13..c613c04 100644 --- a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/WasmPlatformConfigurator.kt +++ b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/WasmPlatformConfigurator.kt
@@ -40,7 +40,6 @@ ), ) { override fun configureModuleComponents(container: StorageComponentContainer) { - container.useInstance(WasmNameSuggestion()) container.useImpl<WasmJsCallChecker>() container.useImpl<WasmNameClashChecker>() container.useImpl<WasmNameCharsChecker>() @@ -77,7 +76,6 @@ ), ) { override fun configureModuleComponents(container: StorageComponentContainer) { - container.useInstance(WasmNameSuggestion()) container.useImpl<WasmNameClashChecker>() container.useImpl<WasmNameCharsChecker>() container.useImpl<JsReflectionAPICallChecker>()
diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractFirWasmTest.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractFirWasmTest.kt index aedb04f..e1c98f5 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractFirWasmTest.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractFirWasmTest.kt
@@ -5,17 +5,27 @@ package org.jetbrains.kotlin.wasm.test +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.wasm.WasmPlatforms import org.jetbrains.kotlin.test.Constructor import org.jetbrains.kotlin.test.FirParser import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.backend.ir.IrBackendInput -import org.jetbrains.kotlin.test.builders.* +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.builders.configureFirHandlersStep +import org.jetbrains.kotlin.test.builders.firHandlersStep import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives import org.jetbrains.kotlin.test.directives.WasmEnvironmentConfigurationDirectives -import org.jetbrains.kotlin.test.frontend.fir.* -import org.jetbrains.kotlin.test.frontend.fir.handlers.* +import org.jetbrains.kotlin.test.frontend.fir.Fir2IrWasmResultsConverter +import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade +import org.jetbrains.kotlin.test.frontend.fir.FirMetaInfoDiffSuppressor +import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact +import org.jetbrains.kotlin.test.frontend.fir.handlers.FirCfgConsistencyHandler +import org.jetbrains.kotlin.test.frontend.fir.handlers.FirCfgDumpHandler +import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDumpHandler +import org.jetbrains.kotlin.test.frontend.fir.handlers.FirResolvedTypesVerifier import org.jetbrains.kotlin.test.model.* import org.jetbrains.kotlin.test.runners.codegen.commonFirHandlersForCodegenTest import org.jetbrains.kotlin.test.services.AdditionalSourceProvider @@ -29,10 +39,11 @@ import org.jetbrains.kotlin.wasm.test.handlers.WasmDebugRunner abstract class AbstractFirWasmTest( + targetPlatform: TargetPlatform, pathToTestDir: String, testGroupOutputDirPrefix: String, ) : AbstractWasmBlackBoxCodegenTestBase<FirOutputArtifact, IrBackendInput, BinaryArtifacts.KLib>( - FrontendKinds.FIR, TargetBackend.WASM, pathToTestDir, testGroupOutputDirPrefix + FrontendKinds.FIR, TargetBackend.WASM, targetPlatform, pathToTestDir, testGroupOutputDirPrefix ) { override val frontendFacade: Constructor<FrontendFacade<FirOutputArtifact>> get() = ::FirFrontendFacade @@ -70,7 +81,7 @@ open class AbstractFirWasmJsTest( pathToTestDir: String, testGroupOutputDirPrefix: String, -) : AbstractFirWasmTest(pathToTestDir, testGroupOutputDirPrefix) { +) : AbstractFirWasmTest(WasmPlatforms.wasmJs, pathToTestDir, testGroupOutputDirPrefix) { override val wasmBoxTestRunner: Constructor<AnalysisHandler<BinaryArtifacts.Wasm>> get() = ::WasmBoxRunner @@ -128,7 +139,7 @@ open class AbstractFirWasmWasiTest( pathToTestDir: String, testGroupOutputDirPrefix: String, -) : AbstractFirWasmTest(pathToTestDir, testGroupOutputDirPrefix) { +) : AbstractFirWasmTest(WasmPlatforms.wasmWasi, pathToTestDir, testGroupOutputDirPrefix) { override val wasmBoxTestRunner: Constructor<AnalysisHandler<BinaryArtifacts.Wasm>> get() = ::WasiBoxRunner
diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractK1WasmTest.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractK1WasmTest.kt index 4feb9e6..4169d10 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractK1WasmTest.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractK1WasmTest.kt
@@ -5,11 +5,11 @@ package org.jetbrains.kotlin.wasm.test +import org.jetbrains.kotlin.platform.wasm.WasmPlatforms import org.jetbrains.kotlin.test.Constructor import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.backend.ir.IrBackendInput import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder -import org.jetbrains.kotlin.test.builders.wasmArtifactsHandlersStep import org.jetbrains.kotlin.test.directives.WasmEnvironmentConfigurationDirectives import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2IrConverter import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade @@ -27,7 +27,7 @@ pathToTestDir: String, testGroupOutputDirPrefix: String, ) : AbstractWasmBlackBoxCodegenTestBase<ClassicFrontendOutputArtifact, IrBackendInput, BinaryArtifacts.KLib>( - FrontendKinds.ClassicFrontend, TargetBackend.WASM, pathToTestDir, testGroupOutputDirPrefix + FrontendKinds.ClassicFrontend, TargetBackend.WASM, WasmPlatforms.wasmJs, pathToTestDir, testGroupOutputDirPrefix ) { override val frontendFacade: Constructor<FrontendFacade<ClassicFrontendOutputArtifact>> get() = ::ClassicFrontendFacade
diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractK1WasmWasiTest.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractK1WasmWasiTest.kt index c22cf0e..e6616d9 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractK1WasmWasiTest.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractK1WasmWasiTest.kt
@@ -5,10 +5,10 @@ package org.jetbrains.kotlin.wasm.test +import org.jetbrains.kotlin.platform.wasm.WasmPlatforms import org.jetbrains.kotlin.test.Constructor import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.backend.ir.IrBackendInput -import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2IrConverter import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact @@ -24,7 +24,7 @@ pathToTestDir: String, testGroupOutputDirPrefix: String, ) : AbstractWasmBlackBoxCodegenTestBase<ClassicFrontendOutputArtifact, IrBackendInput, BinaryArtifacts.KLib>( - FrontendKinds.ClassicFrontend, TargetBackend.WASM, pathToTestDir, testGroupOutputDirPrefix + FrontendKinds.ClassicFrontend, TargetBackend.WASM, WasmPlatforms.wasmWasi, pathToTestDir, testGroupOutputDirPrefix ) { override val frontendFacade: Constructor<FrontendFacade<ClassicFrontendOutputArtifact>> get() = ::ClassicFrontendFacade
diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractWasmBlackBoxCodegenTestBase.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractWasmBlackBoxCodegenTestBase.kt index 4b9e9ad..606e023 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractWasmBlackBoxCodegenTestBase.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractWasmBlackBoxCodegenTestBase.kt
@@ -5,7 +5,7 @@ package org.jetbrains.kotlin.wasm.test -import org.jetbrains.kotlin.platform.wasm.WasmPlatforms +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.test.Constructor import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor @@ -30,6 +30,7 @@ abstract class AbstractWasmBlackBoxCodegenTestBase<R : ResultingArtifact.FrontendOutput<R>, I : ResultingArtifact.BackendInput<I>, A : ResultingArtifact.Binary<A>>( private val targetFrontend: FrontendKind<R>, targetBackend: TargetBackend, + private val targetPlatform: TargetPlatform, private val pathToTestDir: String, private val testGroupOutputDirPrefix: String, ) : AbstractKotlinCompilerWithTargetBackendTest(targetBackend) { @@ -44,7 +45,7 @@ protected fun TestConfigurationBuilder.commonConfigurationForWasmBlackBoxCodegenTest() { globalDefaults { frontend = targetFrontend - targetPlatform = WasmPlatforms.Default + targetPlatform = this@AbstractWasmBlackBoxCodegenTestBase.targetPlatform dependencyKind = DependencyKind.Binary }
diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/FirWasmKlibBackendFacade.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/FirWasmKlibBackendFacade.kt index 24b4ab5..9ebd5ef 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/FirWasmKlibBackendFacade.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/FirWasmKlibBackendFacade.kt
@@ -13,9 +13,8 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.ir.backend.js.JsFactories import org.jetbrains.kotlin.ir.backend.js.serializeModuleIntoKlib -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.library.KotlinAbiVersion +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.test.backend.ir.IrBackendFacade import org.jetbrains.kotlin.test.backend.ir.IrBackendInput @@ -28,6 +27,7 @@ import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.* import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys class FirWasmKlibBackendFacade( testServices: TestServices, @@ -52,7 +52,7 @@ val outputFile = WasmEnvironmentConfigurator.getKlibArtifactFile(testServices, module.name) // TODO: consider avoiding repeated libraries resolution - val target = configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) + val target = configuration.get(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS) val libraries = resolveLibraries(configuration, getAllWasmDependenciesPaths(module, testServices, target)) if (firstTimeCompilation) {
diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/WasmBackendFacade.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/WasmBackendFacade.kt index bf08e7e..d9a148b 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/WasmBackendFacade.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/converters/WasmBackendFacade.kt
@@ -21,9 +21,8 @@ import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageLogLevel import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageMode import org.jetbrains.kotlin.ir.linkage.partial.setupPartialLinkageConfig -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.WasmTarget import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.platform.wasm.WasmTarget import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.test.DebugMode import org.jetbrains.kotlin.test.directives.WasmEnvironmentConfigurationDirectives @@ -34,6 +33,7 @@ import org.jetbrains.kotlin.test.services.* import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator import org.jetbrains.kotlin.utils.addToStdlib.runIf +import org.jetbrains.kotlin.wasm.config.WasmConfigurationKeys import org.jetbrains.kotlin.wasm.test.handlers.getWasmTestOutputDirectory import org.jetbrains.kotlin.wasm.test.tools.WasmOptimizer import java.io.File @@ -71,7 +71,7 @@ PhaseConfig(wasmPhases) } - val suffix = when (configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS)) { + val suffix = when (configuration.get(WasmConfigurationKeys.WASM_TARGET, WasmTarget.JS)) { WasmTarget.JS -> "-js" WasmTarget.WASI -> "-wasi" else -> error("Unexpected wasi target") @@ -102,7 +102,7 @@ propertyLazyInitialization = true, generateTypeScriptFragment = generateDts ) - val generateWat = debugMode >= DebugMode.DEBUG || configuration.getBoolean(JSConfigurationKeys.WASM_GENERATE_WAT) + val generateWat = debugMode >= DebugMode.DEBUG || configuration.getBoolean(WasmConfigurationKeys.WASM_GENERATE_WAT) val baseFileName = "index" val compilerResult = compileWasm(
diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/diagnostics/AbstractDiagnosticsFirWasmTest.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/diagnostics/AbstractDiagnosticsFirWasmTest.kt index 9da646c..b0d4048 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/diagnostics/AbstractDiagnosticsFirWasmTest.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/diagnostics/AbstractDiagnosticsFirWasmTest.kt
@@ -5,6 +5,7 @@ package org.jetbrains.kotlin.wasm.test.diagnostics +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.wasm.WasmPlatforms import org.jetbrains.kotlin.test.Constructor import org.jetbrains.kotlin.test.FirParser @@ -28,12 +29,13 @@ abstract class AbstractFirWasmDiagnosticTestBase( val parser: FirParser, + private val targetPlatform: TargetPlatform, private val wasmEnvironmentConfigurator: Constructor<AbstractEnvironmentConfigurator>, ) : AbstractKotlinCompilerTest() { override fun TestConfigurationBuilder.configuration() { globalDefaults { frontend = FrontendKinds.FIR - targetPlatform = WasmPlatforms.Default + targetPlatform = this@AbstractFirWasmDiagnosticTestBase.targetPlatform dependencyKind = DependencyKind.Source } @@ -74,5 +76,14 @@ } } -abstract class AbstractDiagnosticsFirWasmTest : AbstractFirWasmDiagnosticTestBase(FirParser.Psi, ::WasmEnvironmentConfiguratorJs) -abstract class AbstractDiagnosticsFirWasmWasiTest : AbstractFirWasmDiagnosticTestBase(FirParser.Psi, ::WasmEnvironmentConfiguratorWasi) +abstract class AbstractDiagnosticsFirWasmTest : AbstractFirWasmDiagnosticTestBase( + FirParser.Psi, + WasmPlatforms.wasmJs, + ::WasmEnvironmentConfiguratorJs +) + +abstract class AbstractDiagnosticsFirWasmWasiTest : AbstractFirWasmDiagnosticTestBase( + FirParser.Psi, + WasmPlatforms.wasmWasi, + ::WasmEnvironmentConfiguratorWasi +)
diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/diagnostics/AbstractDiagnosticsWasmTest.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/diagnostics/AbstractDiagnosticsWasmTest.kt index 5a665c2..27e8b75 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/diagnostics/AbstractDiagnosticsWasmTest.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/diagnostics/AbstractDiagnosticsWasmTest.kt
@@ -5,6 +5,7 @@ package org.jetbrains.kotlin.wasm.test.diagnostics +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.wasm.WasmPlatforms import org.jetbrains.kotlin.test.Constructor import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder @@ -26,12 +27,13 @@ import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider abstract class AbstractDiagnosticsWasmTestBase( + private val targetPlatform: TargetPlatform, private val wasmEnvironmentConfigurator: Constructor<AbstractEnvironmentConfigurator>, ) : AbstractKotlinCompilerTest() { override fun TestConfigurationBuilder.configuration() { globalDefaults { frontend = FrontendKinds.ClassicFrontend - targetPlatform = WasmPlatforms.Default + targetPlatform = this@AbstractDiagnosticsWasmTestBase.targetPlatform dependencyKind = DependencyKind.Source } @@ -68,5 +70,12 @@ } } -abstract class AbstractDiagnosticsWasmTest : AbstractDiagnosticsWasmTestBase(::WasmEnvironmentConfiguratorJs) -abstract class AbstractDiagnosticsWasmWasiTest : AbstractDiagnosticsWasmTestBase(::WasmEnvironmentConfiguratorWasi) +abstract class AbstractDiagnosticsWasmTest : AbstractDiagnosticsWasmTestBase( + WasmPlatforms.wasmJs, + ::WasmEnvironmentConfiguratorJs +) + +abstract class AbstractDiagnosticsWasmWasiTest : AbstractDiagnosticsWasmTestBase( + WasmPlatforms.wasmWasi, + ::WasmEnvironmentConfiguratorWasi +)