blob: a7c6976af95be5a720f96800b9ba81e307a0ca0e [file]
// TARGET_BACKEND: WASM
// ^^ For JS_IR and JS_IR_ES6, we don't have and don't plan to have @WasmImport and @WasmExport annotations
// FILE: wasmModule.mjs
/*
(module
(func (export "addTwo") (param i32 i32) (result i32)
local.get 0
local.get 1
i32.add))
*/
let bytes = [0, 97, 115, 109, 1, 0, 0, 0, 1, 7, 1, 96, 2, 127, 127, 1, 127, 3,
2, 1, 0, 7, 10, 1, 6, 97, 100, 100, 84, 119, 111, 0, 0, 10, 9, 1,
7, 0, 32, 0, 32, 1, 106, 11, 0, 10, 4, 110, 97, 109, 101, 2, 3, 1, 0, 0];
let buffer = (new Int8Array(bytes)).buffer;
let module = new WebAssembly.Module(buffer);
let instance = new WebAssembly.Instance(module);
export let addTwo = instance.exports.addTwo;
// FILE: main.kt
import kotlin.wasm.WasmImport
/*
Here we pass export of another Wasm module to our import directly without JS layer.
This enables strict type check without JS conversons.
For instance, recursion groups of function types must fully match.
*/
@WasmImport("./wasmModule.mjs")
external fun addTwo(a: Int, b: Int): Int
fun box(): String {
if (addTwo(100, 200) != 300) return "Fail1"
return "OK"
}