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

View File

@@ -302,9 +302,6 @@ fun createKotlinLibraryComponents(
} }
} }
@Deprecated("Use resolveSingleFileKlib() instead", replaceWith = ReplaceWith("resolveSingleFileKlib()"))
fun createKotlinLibrary(libraryFile: File): KotlinLibrary = resolveSingleFileKlib(libraryFile)
fun isKotlinLibrary(libraryFile: File): Boolean = try { fun isKotlinLibrary(libraryFile: File): Boolean = try {
resolveSingleFileKlib(libraryFile) resolveSingleFileKlib(libraryFile)
true true
@@ -320,4 +317,4 @@ val File.isPre_1_4_Library: Boolean
val baseAccess = BaseLibraryAccess<KotlinLibraryLayout>(this, null) val baseAccess = BaseLibraryAccess<KotlinLibraryLayout>(this, null)
val base = BaseKotlinLibraryImpl(baseAccess, false) val base = BaseKotlinLibraryImpl(baseAccess, false)
return base.has_pre_1_4_manifest return base.has_pre_1_4_manifest
} }

View File

@@ -6,12 +6,10 @@
package org.jetbrains.kotlin.serialization.js package org.jetbrains.kotlin.serialization.js
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.config.AnalysisFlags
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
import org.jetbrains.kotlin.metadata.js.JsProtoBuf import org.jetbrains.kotlin.metadata.js.JsProtoBuf
@@ -24,7 +22,6 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.resolve.multiplatform.OptionalAnnotationUtil import org.jetbrains.kotlin.resolve.multiplatform.OptionalAnnotationUtil
import org.jetbrains.kotlin.serialization.AnnotationSerializer import org.jetbrains.kotlin.serialization.AnnotationSerializer
import org.jetbrains.kotlin.serialization.DescriptorSerializer import org.jetbrains.kotlin.serialization.DescriptorSerializer
import org.jetbrains.kotlin.serialization.StringTableImpl
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor
@@ -238,7 +235,7 @@ object KotlinJavascriptSerializationUtil {
} }
fun serializeHeader( fun serializeHeader(
module: ModuleDescriptor, packageFqName: FqName?, languageVersionSettings: LanguageVersionSettings @Suppress("UNUSED_PARAMETER") module: ModuleDescriptor, packageFqName: FqName?, languageVersionSettings: LanguageVersionSettings
): JsProtoBuf.Header { ): JsProtoBuf.Header {
val header = JsProtoBuf.Header.newBuilder() val header = JsProtoBuf.Header.newBuilder()

View File

@@ -49,13 +49,9 @@ import org.jetbrains.kotlin.ir.util.patchDeclarationParents
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.library.KotlinAbiVersion import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
import org.jetbrains.kotlin.library.SerializedIrModule
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.KotlinLibraryOnlyIrWriter import org.jetbrains.kotlin.library.impl.KotlinLibraryOnlyIrWriter
import org.jetbrains.kotlin.library.impl.createKotlinLibrary
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
@@ -78,7 +74,7 @@ import org.jetbrains.kotlin.konan.file.File as KonanFile
@OptIn(ExperimentalPathApi::class) @OptIn(ExperimentalPathApi::class)
@Ignore @Ignore
class GenerateIrRuntime { 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 { private fun buildConfiguration(environment: KotlinCoreEnvironment): CompilerConfiguration {
val runtimeConfiguration = environment.configuration.copy() val runtimeConfiguration = environment.configuration.copy()
@@ -92,13 +88,18 @@ class GenerateIrRuntime {
LanguageFeature.MultiPlatformProjects to LanguageFeature.State.ENABLED LanguageFeature.MultiPlatformProjects to LanguageFeature.State.ENABLED
), ),
analysisFlags = mapOf( 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 AnalysisFlags.allowResultReturnType to true
) )
) )
return runtimeConfiguration return runtimeConfiguration
} }
private val CompilerConfiguration.metadataVersion private val CompilerConfiguration.metadataVersion
get() = get(CommonConfigurationKeys.METADATA_VERSION) as? KlibMetadataVersion ?: KlibMetadataVersion.INSTANCE get() = get(CommonConfigurationKeys.METADATA_VERSION) as? KlibMetadataVersion ?: KlibMetadataVersion.INSTANCE
@@ -173,7 +174,7 @@ class GenerateIrRuntime {
val (module, symbolTable, irBuiltIns, linker) = doDeserializeModule(modulePath) 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})") 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") println("Run $name benchmark")
@@ -473,7 +483,12 @@ class GenerateIrRuntime {
} }
@OptIn(ExperimentalPathApi::class) @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() val tmpKlibDir = createTempDirectory().also { it.toFile().deleteOnExit() }.toString()
serializeModuleIntoKlib( serializeModuleIntoKlib(
moduleName, moduleName,
@@ -500,11 +515,22 @@ class GenerateIrRuntime {
return getModuleDescriptorByLibrary(moduleRef, emptyMap()) 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 { 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 return serializedIr
} }

View File

@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.test.TestFiles
import org.jetbrains.kotlin.test.util.KtTestUtil import org.jetbrains.kotlin.test.util.KtTestUtil
import java.io.Closeable import java.io.Closeable
import java.io.File import java.io.File
import java.lang.Boolean.getBoolean
private val wasmRuntimeKlib = private val wasmRuntimeKlib =
loadKlib(System.getProperty("kotlin.wasm.stdlib.path")) loadKlib(System.getProperty("kotlin.wasm.stdlib.path"))
@@ -46,6 +45,7 @@ abstract class BasicWasmBoxTest(
private val spiderMonkey by lazy { SpiderMonkeyEngine() } private val spiderMonkey by lazy { SpiderMonkeyEngine() }
@Suppress("UNUSED_PARAMETER")
fun doTestWithCoroutinesPackageReplacement(filePath: String, coroutinesPackage: String) { fun doTestWithCoroutinesPackageReplacement(filePath: String, coroutinesPackage: String) {
TODO("TestWithCoroutinesPackageReplacement are not supported") TODO("TestWithCoroutinesPackageReplacement are not supported")
} }

View File

@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.js.test.semantics
import org.jetbrains.kotlin.js.test.BasicBoxTest import org.jetbrains.kotlin.js.test.BasicBoxTest
import java.io.File import java.io.File
import javax.script.ScriptException
private val testGroupDir = "multiModuleOrder/" private val testGroupDir = "multiModuleOrder/"
private val pathToTestGroupDir = BasicBoxTest.TEST_DATA_DIR_PATH + testGroupDir 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 val libJsFile = File(parentDir, "$name-lib_v5.js").path
try { try {
testChecker.run(listOf(mainJsFile, libJsFile)) testChecker.run(listOf(mainJsFile, libJsFile))
} } catch (e: RuntimeException) {
catch (e: RuntimeException) { assertTrue(e is IllegalStateException)
assertTrue(e is ScriptException || e is IllegalStateException)
val message = e.message!! val message = e.message!!
assertTrue("Exception message should contain reference to dependency (lib)", "'lib'" in 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) 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") fail("Exception should have been thrown due to wrong order of modules")
} }
} }

View File

@@ -7,7 +7,6 @@ import org.jetbrains.kotlin.konan.library.impl.createKonanLibraryComponents
import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.Distribution
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.library.* import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.impl.createKotlinLibrary
import org.jetbrains.kotlin.util.DummyLogger import org.jetbrains.kotlin.util.DummyLogger
import org.jetbrains.kotlin.util.Logger import org.jetbrains.kotlin.util.Logger

View File

@@ -11,8 +11,8 @@ import kotlinx.serialization.json.Json
import org.jetbrains.kotlin.test.KotlinTestUtils.assertEqualsToFile import org.jetbrains.kotlin.test.KotlinTestUtils.assertEqualsToFile
import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull
import org.jetbrains.kotlin.wasm.ir.convertors.MyByteReader import org.jetbrains.kotlin.wasm.ir.convertors.MyByteReader
import org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToBinary
import org.jetbrains.kotlin.wasm.ir.convertors.WasmBinaryToIR import org.jetbrains.kotlin.wasm.ir.convertors.WasmBinaryToIR
import org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToBinary
import org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToText import org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToText
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
@@ -128,6 +128,7 @@ data class SpecTest(
) )
} }
@Suppress("UNUSED_PARAMETER")
private fun runSpecTest(specTest: SpecTest, testDir: File, wastFile: File, wabtOptions: List<String>) { private fun runSpecTest(specTest: SpecTest, testDir: File, wastFile: File, wabtOptions: List<String>) {
for (command in specTest.commands) { for (command in specTest.commands) {
if (command is SpecTest.Command.Module) { if (command is SpecTest.Command.Module) {