// 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: --allow-natives-syntax (function TestUnalignedMemory() { // Test that a buffer whose length is not a multiple of the element size of a // heap view throws the proper {RangeError} during instantiation. function Module(stdlib, foreign, heap) { "use asm"; var a = new stdlib.Int32Array(heap); function f() {} return { f:f }; } assertThrows(() => Module(this, {}, new ArrayBuffer(2)), RangeError); assertThrows(() => Module(this, {}, new ArrayBuffer(10)), RangeError); assertDoesNotThrow(() => Module(this, {}, new ArrayBuffer(4))); assertDoesNotThrow(() => Module(this, {}, new ArrayBuffer(16))); assertFalse(%IsAsmWasmCode(Module)); })(); (function TestMissingMemory() { // Test that a buffer is required for instantiation of modules containing any // heap views. JavaScript needs to create individual buffers for each view. function Module(stdlib, foreign, heap) { "use asm"; var a = new stdlib.Int16Array(heap); var b = new stdlib.Int32Array(heap); function f() { a[0] = 0x1234; return b[0] | 0; } return { f:f }; } var m = Module(this, {}, undefined); assertFalse(%IsAsmWasmCode(Module)); assertEquals(0, m.f()); })(); (function TestNonBufferMemory() { // Test that a buffer has to be an instance of {ArrayBuffer} in order to be // valid. JavaScript will also accept any other array-like object. function Module(stdlib, foreign, heap) { "use asm"; var a = new stdlib.Int32Array(heap); function f() { return a[0] | 0; } return { f:f }; } var m = Module(this, {}, [ 23, 42 ]); assertFalse(%IsAsmWasmCode(Module)); assertEquals(23, m.f()); })();