• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// 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
14  builder.addFunction("main", kSig_i)
15    .addBody([
16      kExprI8Const,
17      kReturnValue,
18      kExprReturn, kArity1
19    ])
20    .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
35  builder.addFunction("main", kSig_i)
36    .addBody([
37      kExprI8Const,
38      kReturnValue,
39      kExprReturn, kArity1
40    ])
41    .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})();
53
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})();
75
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})();
90