| // Copyright 2015 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 testCallFFI(ffi) { |
| var builder = new WasmModuleBuilder(); |
| |
| var sig_index = [kAstI32, kAstF64, kAstF64]; |
| builder.addImport("fun", sig_index); |
| builder.addFunction("main", sig_index) |
| .addBody([ |
| kExprCallImport, 0, // -- |
| kExprGetLocal, 0, // -- |
| kExprGetLocal, 1]) // -- |
| .exportFunc(); |
| |
| var module = builder.instantiate(ffi); |
| } |
| |
| // everything is good. |
| (function() { |
| var ffi = new Object(); |
| ffi.fun = function(a, b) { print(a, b); } |
| testCallFFI(ffi); |
| })(); |
| |
| |
| // FFI object should be an object. |
| assertThrows(function() { |
| var ffi = 0; |
| testCallFFI(ffi); |
| }); |
| |
| |
| // FFI object should have a "fun" property. |
| assertThrows(function() { |
| var ffi = new Object(); |
| testCallFFI(ffi); |
| }); |
| |
| |
| // "fun" should be a JS function. |
| assertThrows(function() { |
| var ffi = new Object(); |
| ffi.fun = new Object(); |
| testCallFFI(ffi); |
| }); |
| |
| |
| // "fun" should be a JS function. |
| assertThrows(function() { |
| var ffi = new Object(); |
| ffi.fun = 0; |
| testCallFFI(ffi); |
| }); |