764815811d
Remove the call to [[HasProperty]] for the shared property when threads feature is enabled. Bug: v8:8782 Change-Id: I492ed3726ea846a1a52dc3a0e0a183d9ee506e96 Reviewed-on: https://chromium-review.googlesource.com/c/1451826 Reviewed-by: Ben Smith <binji@chromium.org> Commit-Queue: Sven Sauleau <ssauleau@igalia.com> Cr-Commit-Position: refs/heads/master@{#59352}
146 lines
5.1 KiB
JavaScript
146 lines
5.1 KiB
JavaScript
// Copyright 2017 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-threads
|
|
|
|
load("test/mjsunit/wasm/wasm-module-builder.js");
|
|
|
|
function assertMemoryIsValid(memory, shared) {
|
|
assertSame(WebAssembly.Memory.prototype, memory.__proto__);
|
|
assertSame(WebAssembly.Memory, memory.constructor);
|
|
assertTrue(memory instanceof Object);
|
|
assertTrue(memory instanceof WebAssembly.Memory);
|
|
if (shared) {
|
|
assertTrue(memory.buffer instanceof SharedArrayBuffer);
|
|
// Assert that the buffer is frozen when memory is shared.
|
|
assertTrue(Object.isFrozen(memory.buffer));
|
|
}
|
|
}
|
|
|
|
(function TestConstructorWithShared() {
|
|
print("TestConstructorWithShared");
|
|
let memory = new WebAssembly.Memory({
|
|
initial: 0, maximum: 10, shared: true});
|
|
assertMemoryIsValid(memory, true);
|
|
})();
|
|
|
|
(function TestConstructorWithUndefinedShared() {
|
|
print("TestConstructorWithUndefinedShared");
|
|
// Maximum = undefined, shared = undefined.
|
|
let memory = new WebAssembly.Memory({
|
|
initial: 0, maximum: undefined, shared: undefined});
|
|
assertMemoryIsValid(memory);
|
|
})();
|
|
|
|
(function TestConstructorWithNumericShared() {
|
|
print("TestConstructorWithNumericShared");
|
|
// For numeric values, shared = true.
|
|
let memory = new WebAssembly.Memory({
|
|
initial: 0, maximum: 10, shared: 2098665});
|
|
assertMemoryIsValid(memory, true);
|
|
})();
|
|
|
|
(function TestConstructorWithEmptyStringShared() {
|
|
print("TestConstructorWithEmptyStringShared");
|
|
// Maximum = undefined, shared = false.
|
|
let memory = new WebAssembly.Memory({
|
|
initial: 0, maximum: undefined, shared: ""});
|
|
assertMemoryIsValid(memory);
|
|
})();
|
|
|
|
(function TestConstructorWithUndefinedMaxShared() {
|
|
print("TestConstructorWithUndefinedMaxShared");
|
|
// New memory with Maximum = undefined, shared = true => TypeError.
|
|
assertThrows(() => new WebAssembly.Memory({initial: 0, shared: true}),
|
|
TypeError);
|
|
})();
|
|
|
|
(function TestCompileWithUndefinedShared() {
|
|
print("TestCompileWithUndefinedShared");
|
|
let memory = new WebAssembly.Memory({
|
|
initial: 0, maximum: 10, shared: true});
|
|
let builder = new WasmModuleBuilder();
|
|
builder.addImportedMemory("m", "imported_mem", 0, undefined, "shared");
|
|
assertThrows(() => new WebAssembly.Module(builder.toBuffer()),
|
|
WebAssembly.CompileError);
|
|
})();
|
|
|
|
(function TestCompileAtomicOpUndefinedShared() {
|
|
print("TestCompileAtomicOpUndefinedShared");
|
|
let memory = new WebAssembly.Memory({
|
|
initial: 0, maximum: 10, shared: true});
|
|
let builder = new WasmModuleBuilder();
|
|
builder.addFunction("main", kSig_i_ii)
|
|
.addBody([
|
|
kExprGetLocal, 0,
|
|
kExprGetLocal, 1,
|
|
kAtomicPrefix,
|
|
kExprI32AtomicAdd]);
|
|
builder.addImportedMemory("m", "imported_mem");
|
|
assertThrows(() => new WebAssembly.Module(builder.toBuffer()),
|
|
WebAssembly.CompileError);
|
|
})();
|
|
|
|
(function TestInstantiateWithUndefinedShared() {
|
|
print("TestInstantiateWithUndefinedShared");
|
|
let memory = new WebAssembly.Memory({
|
|
initial: 0, maximum: 10, shared: true});
|
|
let builder = new WasmModuleBuilder();
|
|
builder.addImportedMemory("m", "imported_mem");
|
|
let module = new WebAssembly.Module(builder.toBuffer());
|
|
assertThrows(() => new WebAssembly.Instance(module,
|
|
{m: {imported_mem: memory}}), WebAssembly.LinkError);
|
|
})();
|
|
|
|
(function TestInstantiateWithImportNotSharedDefined() {
|
|
print("TestInstantiateWithImportNotSharedDefined");
|
|
let memory = new WebAssembly.Memory({
|
|
initial: 0, maximum: 10, shared: false});
|
|
let builder = new WasmModuleBuilder();
|
|
builder.addImportedMemory("m", "imported_mem", 0, 10, "shared");
|
|
let module = new WebAssembly.Module(builder.toBuffer());
|
|
assertThrows(() => new WebAssembly.Instance(module,
|
|
{m: {imported_mem: memory}}), WebAssembly.LinkError);
|
|
})();
|
|
|
|
(function TestInstantiateWithSharedDefined() {
|
|
print("TestInstantiateWithSharedDefined");
|
|
let builder = new WasmModuleBuilder();
|
|
builder.addMemory(2, 10, true, "shared");
|
|
let module = new WebAssembly.Module(builder.toBuffer());
|
|
let instance = new WebAssembly.Instance(module);
|
|
assertMemoryIsValid(instance.exports.memory, true);
|
|
})();
|
|
|
|
(function TestAtomicOpWithSharedMemoryDefined() {
|
|
print("TestAtomicOpWithSharedMemoryDefined");
|
|
let builder = new WasmModuleBuilder();
|
|
builder.addMemory(2, 10, false, "shared");
|
|
builder.addFunction("main", kSig_i_ii)
|
|
.addBody([
|
|
kExprGetLocal, 0,
|
|
kExprGetLocal, 1,
|
|
kAtomicPrefix,
|
|
kExprI32AtomicAdd, 2, 0])
|
|
.exportFunc();
|
|
let module = new WebAssembly.Module(builder.toBuffer());
|
|
let instance = new WebAssembly.Instance(module);
|
|
assertEquals(0, instance.exports.main(0, 0x11111111));
|
|
assertEquals(0x11111111, instance.exports.main(0, 0x11111111));
|
|
})();
|
|
|
|
(function TestMemoryConstructorShouldCallHasProperty() {
|
|
print("TestMemoryConstructorShouldCallHasProperty");
|
|
// from test/wasm-js/data/test/js-api/memory/constructor.any.js
|
|
const proxy = new Proxy({}, {
|
|
has(o, x) {
|
|
throw new Error(`Should not call [[HasProperty]] with ${x}`);
|
|
},
|
|
get(o, x) {
|
|
return 0;
|
|
},
|
|
});
|
|
new WebAssembly.Memory(proxy);
|
|
})();
|