// 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 load("test/mjsunit/wasm/wasm-constants.js"); load("test/mjsunit/wasm/wasm-module-builder.js"); function instantiate(sig, body) { var builder = new WasmModuleBuilder(); var func = builder.addFunction("", sig) .addBody(body); builder.addStart(func.index); return builder.instantiate(); } function assertFails(sig, body) { try { var module = instantiate(sig, body); print("expected failure, but passes"); assertFalse(true); } catch (expected) { print("ok: " + expected); } } function assertVerifies(sig, body) { var module = instantiate(sig, body); assertFalse(module === undefined); assertFalse(module === null); assertFalse(module === 0); assertEquals("object", typeof module); return module; } assertVerifies([kAstStmt], [kExprNop]); assertVerifies([kAstI32], [kExprI8Const, 0]); // Arguments aren't allow to start functions. assertFails([kAstI32, kAstI32], [kExprGetLocal, 0]); assertFails([kAstI32, kAstI32, kAstF32], [kExprGetLocal, 0]); assertFails([kAstI32, kAstI32, kAstF32, kAstF64], [kExprGetLocal, 0]); (function testInvalidIndex() { print("testInvalidIndex"); var builder = new WasmModuleBuilder(); var func = builder.addFunction("", [kAstStmt]) .addBody([kExprNop]); builder.addStart(func.index + 1); assertThrows(builder.instantiate); })(); (function testTwoStartFuncs() { print("testTwoStartFuncs"); var builder = new WasmModuleBuilder(); var func = builder.addFunction("", [kAstStmt]) .addBody([kExprNop]); builder.addExplicitSection([kDeclStartFunction, 0]); builder.addExplicitSection([kDeclStartFunction, 0]); assertThrows(builder.instantiate); })(); (function testRun() { print("testRun"); var builder = new WasmModuleBuilder(); builder.addMemory(12, 12, true); var func = builder.addFunction("", [kAstStmt]) .addBody([kExprI32StoreMem, 0, kExprI8Const, 0, kExprI8Const, 77]); builder.addStart(func.index); var module = builder.instantiate(); var memory = module.memory; var view = new Int8Array(memory); assertEquals(77, view[0]); })(); (function testStartFFI() { print("testStartFFI"); var ranned = false; var ffi = { foo : function() { print("we ranned at stert!"); ranned = true; }}; var builder = new WasmModuleBuilder(); var sig_index = builder.addSignature([kAstStmt]); builder.addImport("foo", sig_index); var func = builder.addFunction("", sig_index) .addBody([kExprCallImport, 0]); builder.addStart(func.index); var module = builder.instantiate(ffi); assertTrue(ranned); })();