| // 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)); | 
 |   } | 
 | })(); |