summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/wasm/ffi.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/ffi.js')
-rw-r--r--deps/v8/test/mjsunit/wasm/ffi.js136
1 files changed, 103 insertions, 33 deletions
diff --git a/deps/v8/test/mjsunit/wasm/ffi.js b/deps/v8/test/mjsunit/wasm/ffi.js
index 4b503efce4..9451c875d6 100644
--- a/deps/v8/test/mjsunit/wasm/ffi.js
+++ b/deps/v8/test/mjsunit/wasm/ffi.js
@@ -11,7 +11,7 @@ function testCallFFI(func, check) {
var builder = new WasmModuleBuilder();
var sig_index = builder.addType(kSig_i_dd);
- builder.addImport("func", sig_index);
+ builder.addImport("", "func", sig_index);
builder.addFunction("main", sig_index)
.addBody([
kExprGetLocal, 0, // --
@@ -20,7 +20,7 @@ function testCallFFI(func, check) {
]) // --
.exportFunc();
- var main = builder.instantiate({func: func}).exports.main;
+ var main = builder.instantiate({"": {func: func}}).exports.main;
for (var i = 0; i < 100000; i += 10003) {
var a = 22.5 + i, b = 10.5 + i;
@@ -37,7 +37,7 @@ var was_called = false;
var length = -1;
function FOREIGN_SUB(a, b) {
- print("FOREIGN_SUB(" + a + ", " + b + ")");
+// print("FOREIGN_SUB(" + a + ", " + b + ")");
was_called = true;
params[0] = this;
params[1] = a;
@@ -75,7 +75,7 @@ print("Constructor");
var builder = new WasmModuleBuilder();
var sig_index = builder.addType(kSig_i_dd);
- builder.addImport("func", sig_index);
+ builder.addImport("", "func", sig_index);
builder.addFunction("main", sig_index)
.addBody([
kExprGetLocal, 0, // --
@@ -84,7 +84,7 @@ print("Constructor");
]) // --
.exportFunc();
- main_for_constructor_test = builder.instantiate({func: C}).exports.main;
+ main_for_constructor_test = builder.instantiate({"": {func: C}}).exports.main;
assertThrows("main_for_constructor_test(12, 43)", TypeError);
}) ();
@@ -95,14 +95,14 @@ print("Native function");
var builder = new WasmModuleBuilder();
var sig_index = builder.addType(kSig_d_v);
- builder.addImport("func", sig_index);
+ builder.addImport("", "func", sig_index);
builder.addFunction("main", sig_index)
.addBody([
kExprCallFunction, 0 // --
]) // --
.exportFunc();
- var main = builder.instantiate({func: Object.prototype.toString}).exports.main;
+ 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.
@@ -113,7 +113,7 @@ 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 + ")");
+// print("FOREIGN_ABCD(" + a + ", " + b + ", " + c + ", " + d + ")");
was_called = true;
params[0] = this;
params[1] = a;
@@ -224,7 +224,6 @@ var objWithValueOf = {valueOf: function() { return 198; }}
testCallFFI(returnValue(objWithValueOf), checkReturn(198));
-
function testCallBinopVoid(type, func, check) {
var passed_length = -1;
var passed_a = -1;
@@ -232,23 +231,23 @@ function testCallBinopVoid(type, func, check) {
var args_a = -1;
var args_b = -1;
- ffi = {func: function(a, b) {
+ ffi = {"": {func: function(a, b) {
passed_length = arguments.length;
passed_a = a;
passed_b = b;
args_a = arguments[0];
args_b = arguments[1];
- }};
+ }}};
var builder = new WasmModuleBuilder();
- builder.addImport("func", makeSig_v_xx(type));
- builder.addFunction("main", makeSig_r_xx(kAstI32, type))
+ builder.addImport("", "func", makeSig_v_xx(type));
+ builder.addFunction("main", makeSig_r_xx(kWasmI32, type))
.addBody([
kExprGetLocal, 0, // --
kExprGetLocal, 1, // --
kExprCallFunction, 0, // --
- kExprI8Const, 99 // --
+ kExprI32Const, 33 // --
]) // --
.exportFunc()
@@ -259,21 +258,21 @@ function testCallBinopVoid(type, func, check) {
for (var i = 0; i < 100000; i += 10003.1) {
var a = 22.5 + i, b = 10.5 + i;
var r = main(a, b);
- assertEquals(99, r);
+ assertEquals(33, r);
assertEquals(2, passed_length);
var expected_a, expected_b;
switch (type) {
- case kAstI32: {
+ case kWasmI32: {
expected_a = a | 0;
expected_b = b | 0;
break;
}
- case kAstF32: {
+ case kWasmF32: {
expected_a = Math.fround(a);
expected_b = Math.fround(b);
break;
}
- case kAstF64: {
+ case kWasmF64: {
expected_a = a;
expected_b = b;
break;
@@ -288,30 +287,101 @@ function testCallBinopVoid(type, func, check) {
}
-testCallBinopVoid(kAstI32);
-// TODO testCallBinopVoid(kAstI64);
-testCallBinopVoid(kAstF32);
-testCallBinopVoid(kAstF64);
-
-
+testCallBinopVoid(kWasmI32);
+// TODO testCallBinopVoid(kWasmI64);
+testCallBinopVoid(kWasmF32);
+testCallBinopVoid(kWasmF64);
-function testCallPrint() {
+(function testCallPrint() {
var builder = new WasmModuleBuilder();
- builder.addImport("print", makeSig_v_x(kAstI32));
- builder.addImport("print", makeSig_v_x(kAstF64));
- builder.addFunction("main", makeSig_v_x(kAstF64))
+ builder.addImport("", "print", makeSig_v_x(kWasmI32));
+ builder.addImport("", "print", makeSig_v_x(kWasmF64));
+ builder.addFunction("main", makeSig_v_x(kWasmF64))
.addBody([
- kExprI8Const, 97, // --
+ kExprI32Const, 37, // --
kExprCallFunction, 0, // --
kExprGetLocal, 0, // --
kExprCallFunction, 1 // --
]) // --
.exportFunc()
- var main = builder.instantiate({print: print}).exports.main;
+ var main = builder.instantiate({"": {print: print}}).exports.main;
for (var i = -9; i < 900; i += 6.125) main(i);
-}
+})();
+
-testCallPrint();
-testCallPrint();
+(function testImportNumbers() {
+ print("TestImportNumbers...");
+ var builder = new WasmModuleBuilder();
+
+ builder.addImport("", '0', kSig_v_i);
+
+ builder.instantiate({"": {0: print}});
+})();
+
+(function testImportNumbers2() {
+ print("TestImportNumbers2...");
+ var builder = new WasmModuleBuilder();
+
+ builder.addImport('foo', '0', kSig_v_i);
+ builder.addImport('0', 'foo', kSig_v_i);
+ builder.addImport('0', '0', kSig_v_i);
+ builder.addImport('18', '-3', kSig_v_i);
+ builder.addImport('-3', '18', kSig_v_i);
+
+ builder.instantiate({
+ foo: {0: print},
+ 0: {0: print, foo: print},
+ 18: {'-3': print},
+ '-3': {18: print}
+ });
+})();
+
+(function ImportSymbolAsVoidDoesNotThrow() {
+ print("ImportSymbolAsVoidDoesNotThrow...");
+ var builder = new WasmModuleBuilder();
+ // Return type is void, so there should be no ToNumber conversion.
+ var index = builder.addImport("", "func", kSig_v_v);
+ builder.addFunction("main", kSig_v_v)
+ .addBody([kExprCallFunction, 0])
+ .exportFunc();
+ var func = () => Symbol();
+ var main = builder.instantiate({"": {func: func}}).exports.main;
+ main();
+})();
+
+(function ToNumberCalledOnImport() {
+ var builder = new WasmModuleBuilder();
+ // Return type is int, so there should be a ToNumber conversion.
+ var index = builder.addImport("", "func", kSig_i_v);
+ builder.addFunction("main", kSig_i_v)
+ .addBody([kExprCallFunction, 0])
+ .exportFunc();
+ var num_valueOf = 0;
+ function Foo() {}
+ Foo.prototype.valueOf = () => ++num_valueOf;
+ var func = () => new Foo();
+ var main = builder.instantiate({"": {func: func}}).exports.main;
+ main();
+ assertEquals(1, num_valueOf);
+ main();
+ assertEquals(2, num_valueOf);
+})();
+
+(function ToNumberNotCalledOnVoidImport() {
+ var builder = new WasmModuleBuilder();
+ // Return type is void, so there should be no ToNumber conversion.
+ var index = builder.addImport("", "func", kSig_v_v);
+ builder.addFunction("main", kSig_v_v)
+ .addBody([kExprCallFunction, 0])
+ .exportFunc();
+ var num_valueOf = 0;
+ function Foo() {}
+ Foo.prototype.valueOf = () => ++num_valueOf;
+ var func = () => new Foo();
+ var main = builder.instantiate({"": {func: func}}).exports.main;
+ main();
+ main();
+ assertEquals(0, num_valueOf);
+})();