d84109963d
This reverts commit 6227c95e5f
.
Reason for revert: Breaks Mac64 GC stress - https://logs.chromium.org/logs/v8/buildbucket/cr-buildbucket.appspot.com/8866365194967638384/+/steps/Check_-_d8/0/logs/call-ref/0
Original change's description:
> [wasm-gc] Implement call_ref on WasmJSFunction
>
> Changes:
> - Introduce turbofan builtin WasmAllocatePair.
> - Implement call_ref for WasmJSFunction in wasm-compiler.cc.
> - Remove WasmJSFunction trap.
> - Improve and extend call-ref.js test.
>
> Bug: v8:9495
> Change-Id: I8b4d1ab70cbbe9ae37887a6241d409eec638fd28
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2463226
> Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
> Reviewed-by: Clemens Backes <clemensb@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#70535}
TBR=clemensb@chromium.org,manoskouk@chromium.org
Change-Id: Ifad2cd8185df5e8d6766cefbcd3f28234a157dfb
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: v8:9495
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2475735
Reviewed-by: Maya Lekova <mslekova@chromium.org>
Commit-Queue: Maya Lekova <mslekova@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70539}
112 lines
4.0 KiB
JavaScript
112 lines
4.0 KiB
JavaScript
// Copyright 2020 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --experimental-wasm-type-reflection --experimental-wasm-gc
|
|
|
|
load("test/mjsunit/wasm/wasm-module-builder.js");
|
|
|
|
(function Test1() {
|
|
var exporting_instance = (function () {
|
|
var builder = new WasmModuleBuilder();
|
|
|
|
builder.addFunction("addition", kSig_i_ii)
|
|
.addBody([kExprLocalGet, 0, kExprLocalGet, 1, kExprI32Add])
|
|
.exportFunc();
|
|
|
|
return builder.instantiate({});
|
|
})();
|
|
|
|
var instance = (function () {
|
|
var builder = new WasmModuleBuilder();
|
|
|
|
var sig_index = builder.addType(kSig_i_ii);
|
|
|
|
var imported_type_reflection_function_index =
|
|
builder.addImport("imports", "mul", sig_index);
|
|
|
|
var imported_js_function_index =
|
|
builder.addImport("imports", "js_add", sig_index);
|
|
|
|
var imported_wasm_function_index =
|
|
builder.addImport("imports", "wasm_add", sig_index);
|
|
|
|
builder.addExport("unused", imported_wasm_function_index);
|
|
builder.addExport("reexported_js_function", imported_js_function_index);
|
|
builder.addExport("reexported_webassembly_function",
|
|
imported_type_reflection_function_index);
|
|
|
|
var locally_defined_function =
|
|
builder.addFunction("sub", sig_index)
|
|
.addBody([kExprLocalGet, 0, kExprLocalGet, 1, kExprI32Sub])
|
|
.exportFunc();
|
|
|
|
builder.addFunction("main", makeSig(
|
|
[wasmRefType(sig_index), kWasmI32, kWasmI32], [kWasmI32]))
|
|
.addBody([kExprLocalGet, 1, kExprLocalGet, 2, kExprLocalGet, 0,
|
|
kExprCallRef])
|
|
.exportFunc();
|
|
|
|
builder.addFunction("test_local", kSig_i_v)
|
|
.addBody([kExprI32Const, 55, kExprI32Const, 42,
|
|
kExprRefFunc, locally_defined_function.index, kExprCallRef])
|
|
.exportFunc();
|
|
|
|
builder.addFunction("test_js_import", kSig_i_v)
|
|
.addBody([kExprI32Const, 15, kExprI32Const, 42,
|
|
kExprRefFunc, imported_js_function_index, kExprCallRef])
|
|
.exportFunc();
|
|
|
|
builder.addFunction("test_wasm_import", kSig_i_v)
|
|
.addBody([kExprI32Const, 15, kExprI32Const, 42,
|
|
kExprRefFunc, imported_wasm_function_index, kExprCallRef])
|
|
.exportFunc();
|
|
|
|
/* Future use
|
|
builder.addFunction("test_webassembly_import", kSig_i_v)
|
|
.addBody([kExprI32Const, 3, kExprI32Const, 7,
|
|
kExprRefFunc, imported_type_reflection_function_index,
|
|
kExprCallRef])
|
|
.exportFunc();
|
|
*/
|
|
|
|
return builder.instantiate({imports: {
|
|
js_add: function(a, b) { return a + b; },
|
|
wasm_add: exporting_instance.exports.addition,
|
|
mul: new WebAssembly.Function({parameters:['i32', 'i32'],
|
|
results: ['i32']},
|
|
function(a, b) { return a * b; })
|
|
}});
|
|
})();
|
|
|
|
// Check the modules exist.
|
|
assertFalse(instance === undefined);
|
|
assertFalse(instance === null);
|
|
assertFalse(instance === 0);
|
|
assertEquals("object", typeof instance.exports);
|
|
assertEquals("function", typeof instance.exports.main);
|
|
|
|
print("--locally defined func--");
|
|
assertEquals(13, instance.exports.test_local());
|
|
print("--locally defined exported func--")
|
|
assertEquals(5, instance.exports.main(instance.exports.sub, 12, 7));
|
|
|
|
print("--imported js func--");
|
|
assertEquals(57, instance.exports.test_js_import());
|
|
print("--imported and reexported js func--")
|
|
assertEquals(19, instance.exports.main(
|
|
instance.exports.reexported_js_function, 12, 7));
|
|
|
|
print("--imported function from another module--");
|
|
assertEquals(57, instance.exports.test_wasm_import());
|
|
print("--not imported function defined in another module--");
|
|
assertEquals(19, instance.exports.main(
|
|
exporting_instance.exports.addition, 12, 7));
|
|
|
|
// TODO(7748): Make these work once we know how we interact
|
|
// with the 'type reflection' proposal.
|
|
//print("--imported WebAssembly.Function--")
|
|
//assertEquals(21, instance.exports.test_webassembly_import());
|
|
//print(" --not imported WebAssembly.Function--")
|
|
})();
|