// Copyright 2015 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: --expose-wasm load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); let kReturnValue = 117; let buffer = (() => { let builder = new WasmModuleBuilder(); builder.addMemory(1, 1, true); builder.addFunction("main", kSig_i) .addBody([kExprI8Const, kReturnValue]) .exportFunc(); return builder.toBuffer(); })() function CheckInstance(instance) { assertFalse(instance === undefined); assertFalse(instance === null); assertFalse(instance === 0); assertEquals("object", typeof instance); // Check the memory is an ArrayBuffer. var mem = instance.exports.memory; assertFalse(mem === undefined); assertFalse(mem === null); assertFalse(mem === 0); assertEquals("object", typeof mem); assertTrue(mem instanceof ArrayBuffer); for (let i = 0; i < 4; i++) { instance.exports.memory = 0; // should be ignored assertSame(mem, instance.exports.memory); } assertEquals(65536, instance.exports.memory.byteLength); // Check the properties of the main function. let main = instance.exports.main; assertFalse(main === undefined); assertFalse(main === null); assertFalse(main === 0); assertEquals("function", typeof main); assertEquals(kReturnValue, main()); } // Deprecated experimental API. CheckInstance(Wasm.instantiateModule(buffer)); // Official API let module = new WebAssembly.Module(buffer); CheckInstance(new WebAssembly.Instance(module)); let promise = WebAssembly.compile(buffer); promise.then(module => CheckInstance(new WebAssembly.Instance(module)));