| // Copyright 2017 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: --allow-natives-syntax |
| |
| load("test/mjsunit/wasm/wasm-constants.js"); |
| load("test/mjsunit/wasm/wasm-module-builder.js"); |
| |
| %SetWasmCompileControls(100000, true); |
| %SetWasmCompileControls(100000, false); |
| |
| let buffer = (() => { |
| let builder = new WasmModuleBuilder(); |
| builder.addFunction("f", kSig_i_v) |
| .addBody([kExprI32Const, 42]) |
| .exportAs("f"); |
| return builder.toBuffer(); |
| })(); |
| |
| let ok_module = new WebAssembly.Module(buffer); |
| assertTrue(ok_module instanceof WebAssembly.Module); |
| assertEquals(42, new WebAssembly.Instance(ok_module).exports.f()); |
| |
| failWithMessage = msg => %AbortJS(msg); |
| |
| async function SuccessfulTest() { |
| print("SuccessfulTest..."); |
| %SetWasmCompileControls(buffer.byteLength, true); |
| %SetWasmInstantiateControls(); |
| let m = new WebAssembly.Module(buffer); |
| let i = new WebAssembly.Instance(m); |
| assertEquals(i.exports.f(), 42); |
| } |
| |
| async function FailSyncCompile() { |
| print("FailSyncCompile..."); |
| %SetWasmCompileControls(buffer.byteLength - 1, true); |
| assertThrows(() => new WebAssembly.Module(buffer), RangeError); |
| |
| print(" wait"); |
| try { |
| let m = await WebAssembly.compile(buffer); |
| print(" cont"); |
| assertTrue(m instanceof WebAssembly.Module); |
| } catch (e) { |
| print(" catch"); |
| assertUnreachable(); |
| } |
| } |
| |
| async function FailSyncInstantiate() { |
| print("FailSyncInstantiate..."); |
| %SetWasmCompileControls(buffer.byteLength - 1, true); |
| assertThrows(() => new WebAssembly.Instance(ok_module), RangeError); |
| |
| print(" wait"); |
| try { |
| let i = await WebAssembly.instantiate(ok_module); |
| print(" cont"); |
| assertTrue(i instanceof WebAssembly.Instance); |
| } catch (e) { |
| print(" catch: " + e); |
| assertUnreachable(); |
| } |
| } |
| |
| async function TestAll() { |
| await SuccessfulTest(); |
| await FailSyncCompile(); |
| await FailSyncInstantiate(); |
| } |
| |
| assertPromiseResult(TestAll()); |