| // Copyright 2016 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 --gc-interval=500 --stress-compaction --expose-gc |
| |
| load("test/mjsunit/wasm/wasm-constants.js"); |
| load("test/mjsunit/wasm/wasm-module-builder.js"); |
| |
| function run(f) { |
| // wrap the creation in a closure so that the only thing returned is |
| // the module (i.e. the underlying array buffer of wasm wire bytes dies). |
| var module = (() => { |
| var builder = new WasmModuleBuilder(); |
| builder.addImport("mod", "the_name_of_my_import", kSig_i_i); |
| builder.addFunction("main", kSig_i_i) |
| .addBody([ |
| kExprGetLocal, 0, |
| kExprCallFunction, 0]) |
| .exportAs("main"); |
| print("module"); |
| return new WebAssembly.Module(builder.toBuffer()); |
| })(); |
| |
| gc(); |
| for (var i = 0; i < 10; i++) { |
| print(" instance " + i); |
| var instance = new WebAssembly.Instance(module, {"mod": {the_name_of_my_import: f}}); |
| var g = instance.exports.main; |
| assertEquals("function", typeof g); |
| for (var j = 0; j < 10; j++) { |
| assertEquals(f(j), g(j)); |
| } |
| } |
| } |
| |
| (function test() { |
| for (var i = 0; i < 3; i++) { |
| run(x => (x + 19)); |
| run(x => (x - 18)); |
| } |
| })(); |