diff options
author | Ujjwal Sharma <usharma1998@gmail.com> | 2019-03-15 18:35:06 +0530 |
---|---|---|
committer | Refael Ackermann <refack@gmail.com> | 2019-03-28 16:36:18 -0400 |
commit | f579e1194046c50f2e6bb54348d48c8e7d1a53cf (patch) | |
tree | 9125787c758358365f74f9fd9673c14f57e67870 /deps/v8/test/mjsunit/wasm/anyfunc.js | |
parent | 2c73868b0471fbd4038f500d076df056cbf697fe (diff) | |
download | node-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.js | 162 |
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()); +})(); |