summaryrefslogtreecommitdiffstats
path: root/vendor/wasm-bindgen/tests/wasm/closures.js
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/wasm-bindgen/tests/wasm/closures.js')
-rw-r--r--vendor/wasm-bindgen/tests/wasm/closures.js164
1 files changed, 164 insertions, 0 deletions
diff --git a/vendor/wasm-bindgen/tests/wasm/closures.js b/vendor/wasm-bindgen/tests/wasm/closures.js
new file mode 100644
index 000000000..dfc3d871e
--- /dev/null
+++ b/vendor/wasm-bindgen/tests/wasm/closures.js
@@ -0,0 +1,164 @@
+const assert = require('assert');
+const wasm = require('wasm-bindgen-test');
+
+exports.works_call = a => {
+ a();
+};
+
+exports.works_thread = a => a(2);
+
+let CANNOT_REUSE_CACHE = null;
+
+exports.cannot_reuse_call = a => {
+ CANNOT_REUSE_CACHE = a;
+};
+
+exports.cannot_reuse_call_again = () => {
+ CANNOT_REUSE_CACHE();
+};
+
+exports.long_lived_call1 = a => {
+ a();
+};
+
+exports.long_lived_call2 = a => a(2);
+
+exports.many_arity_call1 = a => {
+ a();
+};
+exports.many_arity_call2 = a => {
+ a(1);
+};
+exports.many_arity_call3 = a => {
+ a(1, 2);
+};
+exports.many_arity_call4 = a => {
+ a(1, 2, 3);
+};
+exports.many_arity_call5 = a => {
+ a(1, 2, 3, 4);
+};
+exports.many_arity_call6 = a => {
+ a(1, 2, 3, 4, 5);
+};
+exports.many_arity_call7 = a => {
+ a(1, 2, 3, 4, 5, 6);
+};
+exports.many_arity_call8 = a => {
+ a(1, 2, 3, 4, 5, 6, 7);
+};
+exports.many_arity_call9 = a => {
+ a(1, 2, 3, 4, 5, 6, 7, 8);
+};
+
+exports.option_call1 = a => {
+ if (a) {
+ a();
+ }
+};
+exports.option_call2 = a => {
+ if (a) {
+ return a(2);
+ }
+};
+exports.option_call3 = a => a == undefined;
+
+let LONG_LIVED_DROPPING_CACHE = null;
+
+exports.long_lived_dropping_cache = a => {
+ LONG_LIVED_DROPPING_CACHE = a;
+};
+exports.long_lived_dropping_call = () => {
+ LONG_LIVED_DROPPING_CACHE();
+};
+
+let LONG_LIVED_OPTION_DROPPING_CACHE = null;
+
+exports.long_lived_option_dropping_cache = a => {
+ if (a) {
+ LONG_LIVED_OPTION_DROPPING_CACHE = a;
+ return true;
+ } else {
+ return false;
+ }
+}
+exports.long_lived_option_dropping_call = () => {
+ LONG_LIVED_OPTION_DROPPING_CACHE();
+}
+
+let LONG_FNMUT_RECURSIVE_CACHE = null;
+
+exports.long_fnmut_recursive_cache = a => {
+ LONG_FNMUT_RECURSIVE_CACHE = a;
+};
+exports.long_fnmut_recursive_call = () => {
+ LONG_FNMUT_RECURSIVE_CACHE();
+};
+
+exports.fnmut_call = a => {
+ a();
+};
+
+exports.fnmut_thread = a => a(2);
+
+let FNMUT_BAD_F = null;
+
+exports.fnmut_bad_call = a => {
+ FNMUT_BAD_F = a;
+ a();
+};
+
+exports.fnmut_bad_again = x => {
+ if (x) {
+ FNMUT_BAD_F();
+ }
+};
+
+exports.string_arguments_call = a => {
+ a('foo');
+};
+
+exports.string_ret_call = a => {
+ assert.strictEqual(a('foo'), 'foobar');
+};
+
+let DROP_DURING_CALL = null;
+exports.drop_during_call_save = f => {
+ DROP_DURING_CALL = f;
+};
+exports.drop_during_call_call = () => DROP_DURING_CALL();
+
+exports.js_test_closure_returner = () => {
+ wasm.closure_returner().someKey();
+};
+
+exports.calling_it_throws = a => {
+ try {
+ a();
+ return false;
+ } catch(_) {
+ return true;
+ }
+};
+
+exports.call_val = f => f();
+
+exports.pass_reference_first_arg_twice = (a, b, c) => {
+ b(a);
+ c(a);
+ a.free();
+};
+
+exports.call_destroyed = f => {
+ assert.throws(f, /invoked recursively or destroyed/);
+};
+
+let FORGOTTEN_CLOSURE = null;
+
+exports.js_store_forgotten_closure = f => {
+ FORGOTTEN_CLOSURE = f;
+};
+
+exports.js_call_forgotten_closure = () => {
+ FORGOTTEN_CLOSURE();
+};