From 3d3526e3d084a6902b6f110afd3e439c91af4ada Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Tue, 3 May 2022 16:13:18 +0200 Subject: [PATCH] [WASM] Workaround for compiled wasm runs under node --- .../src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 1 + .../src/org/jetbrains/kotlin/backend/wasm/compiler.kt | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) 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 cbecf0a4041..6cd1f6dad9e 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 @@ -365,6 +365,7 @@ class K2JsIrCompiler : CLICompiler() { "esm" -> WasmLoaderKind.BROWSER "nodejs" -> WasmLoaderKind.NODE "d8" -> WasmLoaderKind.D8 + "d8NodeCompatible" -> WasmLoaderKind.D8NodeCompatible else -> throw IllegalArgumentException("Unrecognized flavor for the wasm launcher") } 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 fac4a0eb5d2..045c744730e 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 @@ -122,13 +122,18 @@ fun WasmCompiledModuleFragment.generateJs(): String { enum class WasmLoaderKind { D8, + D8NodeCompatible, NODE, BROWSER, } fun generateJsWasmLoader(kind: WasmLoaderKind, wasmFilePath: String, externalJs: String): String { + val nodeExitOnD8 = + if (kind == WasmLoaderKind.D8NodeCompatible) "if ((typeof process !== 'undefined') && (typeof process.versions.node !== 'undefined')) process.exit(0)\n" + else "" + val instantiation = when (kind) { - WasmLoaderKind.D8 -> + WasmLoaderKind.D8, WasmLoaderKind.D8NodeCompatible -> """ const wasmModule = new WebAssembly.Module(read('$wasmFilePath', 'binary')); const wasmInstance = new WebAssembly.Instance(wasmModule, { js_code }); @@ -164,9 +169,11 @@ fun generateJsWasmLoader(kind: WasmLoaderKind, wasmFilePath: String, externalJs: WasmLoaderKind.NODE -> "module.exports = wasmExports;\n" + + WasmLoaderKind.D8NodeCompatible -> "" } - return externalJs + instantiation + init + export + return nodeExitOnD8 + externalJs + instantiation + init + export } fun writeCompilationResult(