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