blob: 72a3425c906de342f569d108b40871c6fae6807b [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --expose-wasm
6
7load("test/mjsunit/wasm/wasm-constants.js");
Ben Murdochda12d292016-06-02 14:46:10 +01008load("test/mjsunit/wasm/wasm-module-builder.js");
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00009
Ben Murdoch61f157c2016-09-16 13:49:30 +010010let kReturnValue = 117;
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000011
Ben Murdoch61f157c2016-09-16 13:49:30 +010012let buffer = (() => {
13 let builder = new WasmModuleBuilder();
Ben Murdochda12d292016-06-02 14:46:10 +010014 builder.addMemory(1, 1, true);
Ben Murdochc5610432016-08-08 18:44:38 +010015 builder.addFunction("main", kSig_i)
Ben Murdochda12d292016-06-02 14:46:10 +010016 .addBody([kExprI8Const, kReturnValue])
17 .exportFunc();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000018
Ben Murdoch61f157c2016-09-16 13:49:30 +010019 return builder.toBuffer();
20})()
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000021
Ben Murdoch61f157c2016-09-16 13:49:30 +010022function CheckInstance(instance) {
23 assertFalse(instance === undefined);
24 assertFalse(instance === null);
25 assertFalse(instance === 0);
26 assertEquals("object", typeof instance);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000027
Ben Murdoch61f157c2016-09-16 13:49:30 +010028 // Check the memory is an ArrayBuffer.
29 var mem = instance.exports.memory;
30 assertFalse(mem === undefined);
31 assertFalse(mem === null);
32 assertFalse(mem === 0);
33 assertEquals("object", typeof mem);
34 assertTrue(mem instanceof ArrayBuffer);
35 for (let i = 0; i < 4; i++) {
36 instance.exports.memory = 0; // should be ignored
37 assertSame(mem, instance.exports.memory);
38 }
39
40 assertEquals(65536, instance.exports.memory.byteLength);
41
42 // Check the properties of the main function.
43 let main = instance.exports.main;
44 assertFalse(main === undefined);
45 assertFalse(main === null);
46 assertFalse(main === 0);
47 assertEquals("function", typeof main);
48
49 assertEquals(kReturnValue, main());
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000050}
51
Ben Murdoch61f157c2016-09-16 13:49:30 +010052// Deprecated experimental API.
53CheckInstance(Wasm.instantiateModule(buffer));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000054
Ben Murdoch61f157c2016-09-16 13:49:30 +010055// Official API
56let module = new WebAssembly.Module(buffer);
57CheckInstance(new WebAssembly.Instance(module));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000058
Ben Murdoch61f157c2016-09-16 13:49:30 +010059let promise = WebAssembly.compile(buffer);
60promise.then(module => CheckInstance(new WebAssembly.Instance(module)));