Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| skip-if: !wasmThreadsEnabled() || !('toResizableBuffer' in WebAssembly.Memory.prototype)
// Structured cloning a shared WebAssembly.Memory must round-trip whether its
// buffer is a fixed-length SharedArrayBuffer or a growable one obtained via
// toResizableBuffer(). This mirrors postMessage of a shared memory to a Worker.
function roundTrip(memory) {
let clone = serialize(memory, [], {SharedArrayBuffer: 'allow'});
return deserialize(clone, {SharedArrayBuffer: 'allow'});
}
// Fixed-length backing buffer.
{
let memory = new WebAssembly.Memory({initial: 1, maximum: 10, shared: true});
let out = roundTrip(memory);
assertEq(out instanceof WebAssembly.Memory, true);
assertEq(out.buffer.byteLength, memory.buffer.byteLength);
}
// Growable backing buffer (toResizableBuffer was called before cloning).
{
let memory = new WebAssembly.Memory({initial: 1, maximum: 10, shared: true});
let rb = memory.toResizableBuffer();
assertEq(rb.growable, true);
let out = roundTrip(memory);
assertEq(out instanceof WebAssembly.Memory, true);
assertEq(out.buffer.byteLength, memory.buffer.byteLength);
}