diff --git a/test/message/wasm-finish-compilation.js b/test/message/wasm-finish-compilation.js new file mode 100644 index 0000000000..ca0f952bc1 --- /dev/null +++ b/test/message/wasm-finish-compilation.js @@ -0,0 +1,22 @@ +// Copyright 2018 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: --no-stress-opt + +load('test/mjsunit/wasm/wasm-constants.js'); +load('test/mjsunit/wasm/wasm-module-builder.js'); + +// Test that d8 does not terminate until wasm compilation has finished and the +// promise was resolved. + +var builder = new WasmModuleBuilder(); +// Add a few functions so it takes some time to compile. +for (var i = 0; i < 2000; ++i) { + builder.addFunction('fun' + i, kSig_i_v) + .addBody([...wasmI32Const(i)]) + .exportFunc(); +} +builder.asyncInstantiate() + .then(instance => instance.exports.fun1155()) + .then(res => print('Result of executing fun1155: ' + res)); diff --git a/test/message/wasm-finish-compilation.out b/test/message/wasm-finish-compilation.out new file mode 100644 index 0000000000..80c0cafae0 --- /dev/null +++ b/test/message/wasm-finish-compilation.out @@ -0,0 +1 @@ +Result of executing fun1155: 1155 diff --git a/test/mjsunit/wasm/wasm-module-builder.js b/test/mjsunit/wasm/wasm-module-builder.js index c00c2c8226..b9a85e7831 100644 --- a/test/mjsunit/wasm/wasm-module-builder.js +++ b/test/mjsunit/wasm/wasm-module-builder.js @@ -683,6 +683,11 @@ class WasmModuleBuilder { return instance; } + asyncInstantiate(ffi) { + return WebAssembly.instantiate(this.toBuffer(), ffi) + .then(({module, instance}) => instance); + } + toModule(debug = false) { return new WebAssembly.Module(this.toBuffer(debug)); }