From c80854eb7c3dc26725f0c96c92e40faf859ffad9 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Wed, 3 Jan 2024 16:09:14 +0100 Subject: [PATCH] [Wasm/WASI] Extract js-wasi mode to context property --- .../org/jetbrains/kotlin/backend/wasm/WasmBackendContext.kt | 4 ++++ .../src/org/jetbrains/kotlin/backend/wasm/WasmSymbols.kt | 6 +----- .../src/org/jetbrains/kotlin/backend/wasm/compiler.kt | 2 +- .../jetbrains/kotlin/backend/wasm/lower/BuiltInsLowering.kt | 2 +- .../kotlin/backend/wasm/lower/JsCodeCallsLowering.kt | 2 +- .../kotlin/backend/wasm/lower/JsInteropFunctionsLowering.kt | 4 ++-- .../kotlin/backend/wasm/lower/UnhandledExceptionLowering.kt | 2 +- .../kotlin/backend/wasm/lower/WasmTypeOperatorLowering.kt | 4 ++-- .../wasm/lower/markAdditionalExportedDeclarations.kt | 6 +++--- 9 files changed, 16 insertions(+), 16 deletions(-) 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 dfce0ffd6ea..446f74c316d 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 @@ -29,6 +29,8 @@ import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.addChild import org.jetbrains.kotlin.ir.util.file +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 @@ -46,6 +48,8 @@ class WasmBackendContext( override val scriptMode = false override val irFactory: IrFactory = symbolTable.irFactory + val isWasmJsTarget: Boolean = configuration.wasmTarget == WasmTarget.JS + // Place to store declarations excluded from code generation private val excludedDeclarations = mutableMapOf() 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 0d8c632161f..e75943045ab 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 @@ -380,11 +380,7 @@ class WasmSymbols( private val wasmExportClass = getIrClass(FqName("kotlin.wasm.WasmExport")) val wasmExportConstructor by lazy { wasmExportClass.constructors.single() } - private val jsRelatedSymbolsIfNonWasi = - when (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.JS) { - true -> JsRelatedSymbols() - else -> null - } + private val jsRelatedSymbolsIfNonWasi = if (context.isWasmJsTarget) JsRelatedSymbols() else null val jsRelatedSymbols get() = jsRelatedSymbolsIfNonWasi ?: error("Cannot access to js related std in wasi mode") 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 66ecdfba8b7..d9fdef06025 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 @@ -149,7 +149,7 @@ fun compileWasm( val byteArray = os.toByteArray() val jsUninstantiatedWrapper: String? val jsWrapper: String - if (backendContext.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.JS) { + if (backendContext.isWasmJsTarget) { jsUninstantiatedWrapper = compiledWasmModule.generateAsyncJsWrapper( "./$baseFileName.wasm", backendContext.jsModuleAndQualifierReferences diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/BuiltInsLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/BuiltInsLowering.kt index 558a09ac5f5..3be8e539212 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/BuiltInsLowering.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/BuiltInsLowering.kt @@ -59,7 +59,7 @@ class BuiltInsLowering(val context: WasmBackendContext) : FileLoweringPass { irBuiltins.eqeqeqSymbol -> { fun callRefIsNull(expr: IrExpression): IrCall { if ( - context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI && + !context.isWasmJsTarget && expr.type.erasedUpperBound?.isExternal == true ) { error("Unexpected external refs in wasi mode") 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 5e940f1a849..e118dbca33c 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 @@ -23,7 +23,7 @@ class JsCodeCallsLowering(val context: WasmBackendContext) : FileLoweringPass { private val jsRelatedSymbols get() = context.wasmSymbols.jsRelatedSymbols override fun lower(irFile: IrFile) { - if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) return + if (!context.isWasmJsTarget) return irFile.transformDeclarationsFlat { declaration -> when (declaration) { is IrSimpleFunction -> transformFunction(declaration) diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsInteropFunctionsLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsInteropFunctionsLowering.kt index 8475034a6db..063e26b8d00 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsInteropFunctionsLowering.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/JsInteropFunctionsLowering.kt @@ -50,7 +50,7 @@ class JsInteropFunctionsLowering(val context: WasmBackendContext) : DeclarationT lateinit var currentParent: IrDeclarationParent override fun transformFlat(declaration: IrDeclaration): List? { - if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) return null + if (!context.isWasmJsTarget) return null if (declaration.isFakeOverride) return null if (declaration !is IrSimpleFunction) return null @@ -923,7 +923,7 @@ internal fun StringBuilder.appendParameterList(size: Int, name: String = "p", is */ class JsInteropFunctionCallsLowering(val context: WasmBackendContext) : BodyLoweringPass { override fun lower(irBody: IrBody, container: IrDeclaration) { - if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) return + if (!context.isWasmJsTarget) return irBody.transformChildrenVoid(object : IrElementTransformerVoid() { override fun visitCall(expression: IrCall): IrExpression { expression.transformChildrenVoid() 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 f1dcdb8a05a..d91925381d6 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 @@ -133,7 +133,7 @@ internal class UnhandledExceptionLowering(val context: WasmBackendContext) : Fil } override fun lower(irFile: IrFile) { - if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) return + if (!context.isWasmJsTarget) return for (declaration in irFile.declarations) { if (declaration is IrFunction && declaration.isExported()) { processExportFunction(declaration) 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 52d50be268e..fcb728999ef 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 @@ -215,7 +215,7 @@ class WasmBaseTypeOperatorTransformer(val context: WasmBackendContext) : IrEleme } if (fromClass.isExternal && !toClass.isExternal) { - if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) { + if (!context.isWasmJsTarget) { TODO("Implement externalize adapter for wasi mode") } val narrowingToAny = builder.irCall(jsToKotlinAnyAdapter).also { @@ -226,7 +226,7 @@ class WasmBaseTypeOperatorTransformer(val context: WasmBackendContext) : IrEleme } if (toClass.isExternal && !fromClass.isExternal) { - if (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS) == WasmTarget.WASI) { + if (!context.isWasmJsTarget) { TODO("Implement internalize adapter for wasi mode") } return builder.irCall(kotlinToJsAnyAdapter).also { 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 71b17dd7f87..8c598678b95 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 @@ -19,9 +19,9 @@ import org.jetbrains.kotlin.name.FqName * Mark declarations from [exportedFqNames] with @JsExport annotation */ fun markExportedDeclarations(context: WasmBackendContext, irFile: IrFile, exportedFqNames: Set) { - val exportConstructor = when (context.configuration.get(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS)) { - WasmTarget.WASI -> context.wasmSymbols.wasmExportConstructor - else -> context.wasmSymbols.jsRelatedSymbols.jsExportConstructor + val exportConstructor = when (context.isWasmJsTarget) { + true -> context.wasmSymbols.jsRelatedSymbols.jsExportConstructor + else -> context.wasmSymbols.wasmExportConstructor } for (declaration in irFile.declarations) {