| Index: test/mjsunit/wasm/ffi.js
|
| diff --git a/test/mjsunit/wasm/ffi.js b/test/mjsunit/wasm/ffi.js
|
| index 9db8ea6f5585425d728101351c66f741d4f5df57..e84f038e683e8c49eedf4eba0ec539c845a7afe2 100644
|
| --- a/test/mjsunit/wasm/ffi.js
|
| +++ b/test/mjsunit/wasm/ffi.js
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -// Flags: --expose-wasm
|
| +// Flags: --expose-wasm --allow-natives-syntax
|
|
|
| load("test/mjsunit/wasm/wasm-constants.js");
|
| load("test/mjsunit/wasm/wasm-module-builder.js");
|
| @@ -25,7 +25,9 @@ function testCallFFI(func, check) {
|
| for (var i = 0; i < 100000; i += 10003) {
|
| var a = 22.5 + i, b = 10.5 + i;
|
| var r = main(a, b);
|
| - check(r, a, b);
|
| + if (check) {
|
| + check(r, a, b);
|
| + }
|
| }
|
| }
|
|
|
| @@ -52,8 +54,63 @@ function check_FOREIGN_SUB(r, a, b) {
|
| was_called = false;
|
| }
|
|
|
| +// Test calling a normal JSFunction.
|
| +print("JSFunction");
|
| testCallFFI(FOREIGN_SUB, check_FOREIGN_SUB);
|
|
|
| +// Test calling a proxy.
|
| +print("Proxy");
|
| +var proxy_sub = new Proxy(FOREIGN_SUB, {});
|
| +testCallFFI(proxy_sub, check_FOREIGN_SUB);
|
| +
|
| +// Test calling a bind function.
|
| +print("Bind function");
|
| +var bind_sub = FOREIGN_SUB.bind();
|
| +testCallFFI(bind_sub, check_FOREIGN_SUB);
|
| +
|
| +var main_for_constructor_test;
|
| +print("Constructor");
|
| +(function testCallConstructor() {
|
| + class C {}
|
| + var builder = new WasmModuleBuilder();
|
| +
|
| + var sig_index = builder.addType(kSig_i_dd);
|
| + builder.addImport("func", sig_index);
|
| + builder.addFunction("main", sig_index)
|
| + .addBody([
|
| + kExprGetLocal, 0, // --
|
| + kExprGetLocal, 1, // --
|
| + kExprCallImport, kArity2, 0 // --
|
| + ]) // --
|
| + .exportFunc();
|
| +
|
| + main_for_constructor_test = builder.instantiate({func: C}).exports.main;
|
| +
|
| + assertThrows("main_for_constructor_test(12, 43)", TypeError);
|
| +}) ();
|
| +
|
| +print("Native function");
|
| +(function test_ffi_call_to_native() {
|
| +
|
| + var builder = new WasmModuleBuilder();
|
| +
|
| + var sig_index = builder.addType(kSig_d);
|
| + builder.addImport("func", sig_index);
|
| + builder.addFunction("main", sig_index)
|
| + .addBody([
|
| + kExprCallImport, kArity0, 0 // --
|
| + ]) // --
|
| + .exportFunc();
|
| +
|
| + var main = builder.instantiate({func: Object.prototype.toString}).exports.main;
|
| + // The result of the call to Object.prototype.toString should be
|
| + // [object Undefined]. However, we cannot test for this result because wasm
|
| + // cannot return objects but converts them to float64 in this test.
|
| + assertEquals(NaN, main());
|
| +})();
|
| +
|
| +print("Callable JSObject");
|
| +testCallFFI(%GetCallable(), function check(r, a, b) {assertEquals(a - b, r);});
|
|
|
| function FOREIGN_ABCD(a, b, c, d) {
|
| print("FOREIGN_ABCD(" + a + ", " + b + ", " + c + ", " + d + ")");
|
|
|