blob: 2084ddfc0aa8a5a0dff0b5e9b10a4fbb9a3ab444 [file] [log] [blame]
Ben Murdochda12d292016-06-02 14:46:10 +01001// Copyright 2016 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");
8load("test/mjsunit/wasm/wasm-module-builder.js");
9
10(function testExportedMain() {
11 var kReturnValue = 88;
12 var builder = new WasmModuleBuilder();
13
Ben Murdochc5610432016-08-08 18:44:38 +010014 builder.addFunction("main", kSig_i)
Ben Murdochda12d292016-06-02 14:46:10 +010015 .addBody([
Ben Murdochda12d292016-06-02 14:46:10 +010016 kExprI8Const,
Ben Murdochc5610432016-08-08 18:44:38 +010017 kReturnValue,
18 kExprReturn, kArity1
19 ])
Ben Murdochda12d292016-06-02 14:46:10 +010020 .exportFunc();
21
22 var module = builder.instantiate();
23
24 assertEquals("object", typeof module.exports);
25 assertEquals("function", typeof module.exports.main);
26
27 assertEquals(kReturnValue, module.exports.main());
28})();
29
30(function testExportedTwice() {
31 var kReturnValue = 99;
32
33 var builder = new WasmModuleBuilder();
34
Ben Murdochc5610432016-08-08 18:44:38 +010035 builder.addFunction("main", kSig_i)
Ben Murdochda12d292016-06-02 14:46:10 +010036 .addBody([
Ben Murdochda12d292016-06-02 14:46:10 +010037 kExprI8Const,
Ben Murdochc5610432016-08-08 18:44:38 +010038 kReturnValue,
39 kExprReturn, kArity1
40 ])
Ben Murdochda12d292016-06-02 14:46:10 +010041 .exportAs("blah")
42 .exportAs("foo");
43
44 var module = builder.instantiate();
45
46 assertEquals("object", typeof module.exports);
47 assertEquals("function", typeof module.exports.blah);
48 assertEquals("function", typeof module.exports.foo);
49
50 assertEquals(kReturnValue, module.exports.foo());
51 assertEquals(kReturnValue, module.exports.blah());
52})();
Ben Murdochc5610432016-08-08 18:44:38 +010053
54
55(function testNumericName() {
56 var kReturnValue = 93;
57
58 var builder = new WasmModuleBuilder();
59
60 builder.addFunction("main", kSig_i)
61 .addBody([
62 kExprI8Const,
63 kReturnValue,
64 kExprReturn, kArity1
65 ])
66 .exportAs("0");
67
68 var module = builder.instantiate();
69
70 assertEquals("object", typeof module.exports);
71 assertEquals("function", typeof module.exports["0"]);
72
73 assertEquals(kReturnValue, module.exports["0"]());
74})();
Ben Murdoch61f157c2016-09-16 13:49:30 +010075
76(function testExportNameClash() {
77 var builder = new WasmModuleBuilder();
78
79 builder.addFunction("one", kSig_v_v).addBody([kExprNop]).exportAs("main");
80 builder.addFunction("two", kSig_v_v).addBody([kExprNop]).exportAs("other");
81 builder.addFunction("three", kSig_v_v).addBody([kExprNop]).exportAs("main");
82
83 try {
84 builder.instantiate();
85 assertUnreachable("should have thrown an exception");
86 } catch (e) {
87 assertContains("Duplicate export", e.toString());
88 }
89})();