| // 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" | |
| } |