| // TARGET_BACKEND: WASM |
| |
| // FILE: wasmImport.kt |
| import kotlin.wasm.WasmImport |
| |
| @WasmImport("foo") |
| external fun inc1(x: Int): Int |
| |
| @WasmImport("~!@#\$%^&*()_+`-={}|[]\\\\:\\\";'<>?,./", "inc2") |
| external fun inc2(x: Int): Int |
| |
| @WasmImport("./bar.mjs", "inc3") |
| external fun inc3(x: Int): Int |
| |
| @WasmImport("./bar.mjs", "giveMeNumber") |
| external fun giveMeNumber(x: Boolean) |
| |
| @JsExport |
| fun myBox(): String { |
| if (inc1(5) != 6) return "KFail1" |
| if (inc2(5) != 6) return "KFail2" |
| if (inc3(5) != 6) return "KFail3" |
| |
| // Test that booleans are translated as i32 |
| giveMeNumber(true) |
| giveMeNumber(false) |
| |
| return "OK" |
| } |
| |
| var initialized: Int = 0 |
| |
| @JsExport |
| fun getInitialized(): Int = initialized |
| |
| fun main() { |
| initialized = 100 |
| } |
| |
| // FILE: entry.mjs |
| import { instantiate } from "./index.uninstantiated.mjs"; |
| |
| let inc = x => x + 1; |
| |
| let imports = { |
| "foo": { inc1 : inc }, |
| "~!@#\$%^&*()_+\`-={}|[]\\\\:\\\";'<>?,./" : { inc2 : inc }, |
| "./bar.mjs" : { |
| inc3 : inc, |
| giveMeNumber(x) { |
| if (typeof x !== 'number') { |
| throw "Not a number!"; |
| } |
| }, |
| }, |
| } |
| |
| let { exports } = await instantiate(imports); |
| |
| if (exports.getInitialized() !== 100) { |
| throw "Fail1" |
| } |
| |
| if (exports.myBox() != "OK") { |
| throw "Fail2" |
| } |