Fix warnings in JS/WASM modules

This commit is contained in:
Alexander Udalov
2021-07-26 13:18:39 +02:00
parent e0643a4185
commit 376b420d1a
7 changed files with 46 additions and 28 deletions
@@ -49,13 +49,9 @@ import org.jetbrains.kotlin.ir.util.patchDeclarationParents
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
import org.jetbrains.kotlin.library.SerializedIrModule
import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.KotlinLibraryOnlyIrWriter
import org.jetbrains.kotlin.library.impl.createKotlinLibrary
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
@@ -78,7 +74,7 @@ import org.jetbrains.kotlin.konan.file.File as KonanFile
@OptIn(ExperimentalPathApi::class)
@Ignore
class GenerateIrRuntime {
fun loadKlib(klibPath: String, isPacked: Boolean) = createKotlinLibrary(KonanFile("$klibPath${if (isPacked) ".klib" else ""}"))
fun loadKlib(klibPath: String, isPacked: Boolean) = resolveSingleFileKlib(KonanFile("$klibPath${if (isPacked) ".klib" else ""}"))
private fun buildConfiguration(environment: KotlinCoreEnvironment): CompilerConfiguration {
val runtimeConfiguration = environment.configuration.copy()
@@ -92,13 +88,18 @@ class GenerateIrRuntime {
LanguageFeature.MultiPlatformProjects to LanguageFeature.State.ENABLED
),
analysisFlags = mapOf(
AnalysisFlags.useExperimental to listOf("kotlin.contracts.ExperimentalContracts", "kotlin.Experimental", "kotlin.ExperimentalMultiplatform"),
AnalysisFlags.useExperimental to listOf(
"kotlin.contracts.ExperimentalContracts",
"kotlin.Experimental",
"kotlin.ExperimentalMultiplatform"
),
AnalysisFlags.allowResultReturnType to true
)
)
return runtimeConfiguration
}
private val CompilerConfiguration.metadataVersion
get() = get(CommonConfigurationKeys.METADATA_VERSION) as? KlibMetadataVersion ?: KlibMetadataVersion.INSTANCE
@@ -173,7 +174,7 @@ class GenerateIrRuntime {
val (module, symbolTable, irBuiltIns, linker) = doDeserializeModule(modulePath)
val jsProgram = doBackEnd(module, symbolTable, irBuiltIns, linker)
doBackEnd(module, symbolTable, irBuiltIns, linker)
}
}
@@ -377,7 +378,16 @@ class GenerateIrRuntime {
println("Fastest re-compilation takes ${MeasureUnits.MILLISECONDS.convert(minResult.time)} (${minResult.file})")
}
private fun runBenchWithWarmup(name: String, W: Int, N: Int, measurer: MeasureUnits, wmpDone: () -> Unit = {}, bnhDone: (Long) -> Unit = {}, pre: () -> Unit = {}, bench: () -> Unit) {
private fun runBenchWithWarmup(
name: String,
W: Int,
N: Int,
measurer: MeasureUnits,
wmpDone: () -> Unit = {},
bnhDone: (Long) -> Unit = {},
pre: () -> Unit = {},
bench: () -> Unit
) {
println("Run $name benchmark")
@@ -473,7 +483,12 @@ class GenerateIrRuntime {
}
@OptIn(ExperimentalPathApi::class)
private fun doSerializeModule(moduleFragment: IrModuleFragment, bindingContext: BindingContext, files: List<KtFile>, perFile: Boolean = false): String {
private fun doSerializeModule(
moduleFragment: IrModuleFragment,
bindingContext: BindingContext,
files: List<KtFile>,
perFile: Boolean = false
): String {
val tmpKlibDir = createTempDirectory().also { it.toFile().deleteOnExit() }.toString()
serializeModuleIntoKlib(
moduleName,
@@ -500,11 +515,22 @@ class GenerateIrRuntime {
return getModuleDescriptorByLibrary(moduleRef, emptyMap())
}
private data class DeserializedModuleInfo(val module: IrModuleFragment, val symbolTable: SymbolTable, val irBuiltIns: IrBuiltIns, val linker: JsIrLinker)
private data class DeserializedModuleInfo(
val module: IrModuleFragment,
val symbolTable: SymbolTable,
val irBuiltIns: IrBuiltIns,
val linker: JsIrLinker
)
private fun doSerializeIrModule(module: IrModuleFragment): SerializedIrModule {
val serializedIr = JsIrModuleSerializer(IrMessageLogger.None, module.irBuiltins, mutableMapOf(), CompatibilityMode.CURRENT, true).serializedIrModule(module)
val serializedIr = JsIrModuleSerializer(
IrMessageLogger.None,
module.irBuiltins,
mutableMapOf(),
CompatibilityMode.CURRENT,
true
).serializedIrModule(module)
return serializedIr
}
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.test.TestFiles
import org.jetbrains.kotlin.test.util.KtTestUtil
import java.io.Closeable
import java.io.File
import java.lang.Boolean.getBoolean
private val wasmRuntimeKlib =
loadKlib(System.getProperty("kotlin.wasm.stdlib.path"))
@@ -46,6 +45,7 @@ abstract class BasicWasmBoxTest(
private val spiderMonkey by lazy { SpiderMonkeyEngine() }
@Suppress("UNUSED_PARAMETER")
fun doTestWithCoroutinesPackageReplacement(filePath: String, coroutinesPackage: String) {
TODO("TestWithCoroutinesPackageReplacement are not supported")
}
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.js.test.semantics
import org.jetbrains.kotlin.js.test.BasicBoxTest
import java.io.File
import javax.script.ScriptException
private val testGroupDir = "multiModuleOrder/"
private val pathToTestGroupDir = BasicBoxTest.TEST_DATA_DIR_PATH + testGroupDir
@@ -33,9 +32,8 @@ class MultiModuleOrderTest : BasicBoxTest(pathToTestGroupDir, testGroupDir) {
val libJsFile = File(parentDir, "$name-lib_v5.js").path
try {
testChecker.run(listOf(mainJsFile, libJsFile))
}
catch (e: RuntimeException) {
assertTrue(e is ScriptException || e is IllegalStateException)
} catch (e: RuntimeException) {
assertTrue(e is IllegalStateException)
val message = e.message!!
assertTrue("Exception message should contain reference to dependency (lib)", "'lib'" in message)
assertTrue("Exception message should contain reference to module that failed to load (main)", "'main'" in message)
@@ -43,4 +41,4 @@ class MultiModuleOrderTest : BasicBoxTest(pathToTestGroupDir, testGroupDir) {
}
fail("Exception should have been thrown due to wrong order of modules")
}
}
}