1 // Copyright 2015 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Flags: --expose-wasm 6 7 load("test/mjsunit/wasm/wasm-constants.js"); 8 9 function testCallFFI(ffi) { 10 var kBodySize = 6; 11 var kNameAddOffset = 28 + kBodySize + 1; 12 var kNameMainOffset = kNameAddOffset + 4; 13 14 var data = bytes( 15 kDeclMemory, 16 12, 12, 1, // memory 17 // -- signatures 18 kDeclSignatures, 1, 19 2, kAstI32, kAstF64, kAstF64, // (f64,f64)->int 20 // -- foreign function 21 kDeclFunctions, 2, 22 kDeclFunctionName | kDeclFunctionImport, 23 0, 0, // signature index 24 kNameAddOffset, 0, 0, 0, // name offset 25 // -- main function 26 kDeclFunctionName | kDeclFunctionExport, 27 0, 0, // signature index 28 kNameMainOffset, 0, 0, 0, // name offset 29 kBodySize, 0, 30 // main body 31 kExprCallFunction, 0, // -- 32 kExprGetLocal, 0, // -- 33 kExprGetLocal, 1, // -- 34 // names 35 kDeclEnd, 36 'f', 'u', 'n', 0, // -- 37 'm', 'a', 'i', 'n', 0 // -- 38 ); 39 40 print("instantiate FFI"); 41 var module = _WASMEXP_.instantiateModule(data, ffi); 42 } 43 44 // everything is good. 45 (function() { 46 var ffi = new Object(); 47 ffi.fun = function(a, b) { print(a, b); } 48 testCallFFI(ffi); 49 })(); 50 51 52 // FFI object should be an object. 53 assertThrows(function() { 54 var ffi = 0; 55 testCallFFI(ffi); 56 }); 57 58 59 // FFI object should have a "fun" property. 60 assertThrows(function() { 61 var ffi = new Object(); 62 testCallFFI(ffi); 63 }); 64 65 66 // "fun" should be a JS function. 67 assertThrows(function() { 68 var ffi = new Object(); 69 ffi.fun = new Object(); 70 testCallFFI(ffi); 71 }); 72 73 74 // "fun" should be a JS function. 75 assertThrows(function() { 76 var ffi = new Object(); 77 ffi.fun = 0; 78 testCallFFI(ffi); 79 }); 80