summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/wasm/anyfunc.js
diff options
context:
space:
mode:
authorUjjwal Sharma <usharma1998@gmail.com>2019-03-15 18:35:06 +0530
committerRefael Ackermann <refack@gmail.com>2019-03-28 16:36:18 -0400
commitf579e1194046c50f2e6bb54348d48c8e7d1a53cf (patch)
tree9125787c758358365f74f9fd9673c14f57e67870 /deps/v8/test/mjsunit/wasm/anyfunc.js
parent2c73868b0471fbd4038f500d076df056cbf697fe (diff)
downloadnode-new-f579e1194046c50f2e6bb54348d48c8e7d1a53cf.tar.gz
deps: update V8 to 7.4.288.13
PR-URL: https://github.com/nodejs/node/pull/26685 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Michaƫl Zasso <targos@protonmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com>
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/anyfunc.js')
-rw-r--r--deps/v8/test/mjsunit/wasm/anyfunc.js162
1 files changed, 159 insertions, 3 deletions
diff --git a/deps/v8/test/mjsunit/wasm/anyfunc.js b/deps/v8/test/mjsunit/wasm/anyfunc.js
index 30faef12a7..19415fe2b8 100644
--- a/deps/v8/test/mjsunit/wasm/anyfunc.js
+++ b/deps/v8/test/mjsunit/wasm/anyfunc.js
@@ -4,10 +4,9 @@
// Flags: --expose-wasm --experimental-wasm-anyref --expose-gc
-load("test/mjsunit/wasm/wasm-constants.js");
load("test/mjsunit/wasm/wasm-module-builder.js");
-(function testAnyRefIdentityFunction() {
+(function testAnyFuncIdentityFunction() {
print(arguments.callee.name);
const builder = new WasmModuleBuilder();
builder.addFunction('main', kSig_a_a)
@@ -23,7 +22,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
instance.exports.main, instance.exports.main(instance.exports.main));
})();
-(function testPassAnyRefToImportedFunction() {
+(function testPassAnyFuncToImportedFunction() {
print(arguments.callee.name);
const builder = new WasmModuleBuilder();
const sig_index = builder.addType(kSig_v_a);
@@ -41,3 +40,160 @@ load("test/mjsunit/wasm/wasm-module-builder.js");
main(main);
})();
+
+(function testPassAnyFuncWithGCWithLocals() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ const ref_sig = builder.addType(kSig_v_a);
+ const void_sig = builder.addType(kSig_v_v);
+ const imp_index = builder.addImport("q", "func", ref_sig);
+ const gc_index = builder.addImport("q", "gc", void_sig);
+ // First call the gc, then check if the object still exists.
+ builder.addFunction('main', ref_sig)
+ .addLocals({anyfunc_count: 10})
+ .addBody([
+ kExprGetLocal, 0, kExprSetLocal, 1, // Set local
+ kExprGetLocal, 0, kExprSetLocal, 2, // Set local
+ kExprGetLocal, 0, kExprSetLocal, 3, // Set local
+ kExprGetLocal, 0, kExprSetLocal, 4, // Set local
+ kExprGetLocal, 0, kExprSetLocal, 5, // Set local
+ kExprGetLocal, 0, kExprSetLocal, 6, // Set local
+ kExprGetLocal, 0, kExprSetLocal, 7, // Set local
+ kExprGetLocal, 0, kExprSetLocal, 8, // Set local
+ kExprGetLocal, 0, kExprSetLocal, 9, // Set local
+ kExprGetLocal, 0, kExprSetLocal, 10, // Set local
+ kExprCallFunction, gc_index, // call gc
+ kExprGetLocal, 9, kExprCallFunction, imp_index // call import
+ ])
+ .exportFunc();
+
+ const main =
+ builder.instantiate({q: {func: checkFunction, gc: gc}}).exports.main;
+
+ function checkFunction(value) {
+ assertSame(main, value);
+ }
+
+ main(main);
+})();
+
+(function testPassAnyFuncWithGC() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ const ref_sig = builder.addType(kSig_v_a);
+ const void_sig = builder.addType(kSig_v_v);
+ const imp_index = builder.addImport("q", "func", ref_sig);
+ const gc_index = builder.addImport("q", "gc", void_sig);
+ // First call the gc, then check if the object still exists.
+ builder.addFunction('main', ref_sig)
+ .addBody([
+ kExprCallFunction, gc_index, // call gc
+ kExprGetLocal, 0, kExprCallFunction, imp_index // call import
+ ])
+ .exportFunc();
+
+ function checkFunction(value) {
+ assertSame(main, value);
+ }
+
+ const main = builder.instantiate({q: {func: checkFunction, gc: gc}}).exports.main;
+
+ main(main);
+})();
+
+(function testPassAnyFuncWithGCInWrapper() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ const kSig_a_iai = makeSig([kWasmI32, kWasmAnyFunc, kWasmI32], [kWasmAnyFunc]);
+ const sig_index = builder.addType(kSig_a_iai);
+ builder.addFunction('main', sig_index)
+ .addBody([kExprGetLocal, 1])
+ .exportFunc();
+
+ const main = builder.instantiate().exports.main;
+
+ const triggerGCParam = {
+ valueOf: () => {
+ gc();
+ return 17;
+ }
+ };
+
+ const result = main(triggerGCParam, main, triggerGCParam);
+ assertSame(main, result);
+})();
+
+(function testAnyFuncDefaultValue() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ const sig_index = builder.addType(kSig_a_v);
+ builder.addFunction('main', sig_index)
+ .addLocals({anyfunc_count: 1})
+ .addBody([kExprGetLocal, 0])
+ .exportFunc();
+
+ const main = builder.instantiate().exports.main;
+ assertEquals(null, main());
+})();
+
+(function testAssignNullRefToAnyFuncLocal() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ const sig_index = builder.addType(kSig_a_a);
+ builder.addFunction('main', sig_index)
+ .addBody([kExprRefNull, kExprSetLocal, 0, kExprGetLocal, 0])
+ .exportFunc();
+
+ const main = builder.instantiate().exports.main;
+ assertEquals(null, main(main));
+})();
+
+(function testImplicitReturnNullRefAsAnyFunc() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ const sig_index = builder.addType(kSig_a_v);
+ builder.addFunction('main', sig_index)
+ .addBody([kExprRefNull])
+ .exportFunc();
+
+ const main = builder.instantiate().exports.main;
+ assertEquals(null, main());
+})();
+
+(function testExplicitReturnNullRefAsAnyFunc() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ const sig_index = builder.addType(kSig_a_v);
+ builder.addFunction('main', sig_index)
+ .addBody([kExprRefNull, kExprReturn])
+ .exportFunc();
+
+ const main = builder.instantiate().exports.main;
+ assertEquals(null, main());
+})();
+
+(function testImplicitReturnAnyFuncAsAnyRef() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ const sig_index = builder.addType(kSig_r_v);
+ builder.addFunction('main', sig_index)
+ .addLocals({anyfunc_count: 1})
+ .addBody([kExprGetLocal, 0])
+ .exportFunc();
+
+ const main = builder.instantiate().exports.main;
+ assertEquals(null, main());
+})();
+
+(function testExplicitReturnAnyFuncAsAnyRef() {
+ print(arguments.callee.name);
+ const builder = new WasmModuleBuilder();
+ const sig_index = builder.addType(kSig_r_v);
+ builder.addFunction('main', sig_index)
+ .addLocals({anyfunc_count: 1})
+ .addBody([kExprGetLocal, 0, kExprReturn])
+ .exportFunc();
+
+ const main = builder.instantiate().exports.main;
+ assertEquals(null, main());
+})();