summaryrefslogtreecommitdiff
path: root/core/libdeno/libdeno_test.js
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-06-20 09:04:34 -0700
committerGitHub <noreply@github.com>2019-06-20 09:04:34 -0700
commitf2c50fae844b34cf6d8488ab1fbc599eb935a919 (patch)
tree14bbf737b249afa2f82f86bea67d17d8f624484a /core/libdeno/libdeno_test.js
parent6a5177dc11936687e6da95c3c45e3e41a7856d79 (diff)
Fix silent failure of WebAssembly.instantiate() (#2548)
By making WASM compilation synchronous. We'll have to do more work to make it properly async.
Diffstat (limited to 'core/libdeno/libdeno_test.js')
-rw-r--r--core/libdeno/libdeno_test.js34
1 files changed, 34 insertions, 0 deletions
diff --git a/core/libdeno/libdeno_test.js b/core/libdeno/libdeno_test.js
index 17a6343cf..006c71666 100644
--- a/core/libdeno/libdeno_test.js
+++ b/core/libdeno/libdeno_test.js
@@ -219,3 +219,37 @@ global.LibDenoPrintInvalidArgument = () => {
assert(e.message === "Invalid Argument");
}
};
+
+global.WasmInstantiate = () => {
+ // The following blob can be created by taking the following s-expr and pass
+ // it through wat2wasm.
+ // (module
+ // (func $add (param $a i32) (param $b i32) (result i32)
+ // local.get $a
+ // local.get $b
+ // i32.add)
+ // (export "add" (func $add))
+ // )
+ // prettier-ignore
+ const bytes = new Uint8Array([
+ 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x07, 0x01, 0x60,
+ 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x03, 0x02, 0x01, 0x00, 0x07, 0x07, 0x01,
+ 0x03, 0x61, 0x64, 0x64, 0x00, 0x00, 0x0a, 0x09, 0x01, 0x07, 0x00, 0x20,
+ 0x00, 0x20, 0x01, 0x6a, 0x0b
+ ]);
+
+ (async () => {
+ Deno.core.send(new Uint8Array([42]));
+
+ const wasm = await WebAssembly.instantiate(bytes);
+
+ Deno.core.send(new Uint8Array([42]));
+
+ const result = wasm.instance.exports.add(1, 3);
+ if (result != 4) {
+ throw Error("bad");
+ }
+ // To signal success, we send back a fixed buffer.
+ Deno.core.send(new Uint8Array([42]));
+ })();
+};