blob: b6474c6fed5a8cc58605af315dd0f34a672095e9 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// 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
7load("test/mjsunit/wasm/wasm-constants.js");
Ben Murdochda12d292016-06-02 14:46:10 +01008load("test/mjsunit/wasm/wasm-module-builder.js");
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00009
10function testCallFFI(ffi) {
Ben Murdochda12d292016-06-02 14:46:10 +010011 var builder = new WasmModuleBuilder();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000012
Ben Murdochc5610432016-08-08 18:44:38 +010013 var sig_index = kSig_i_dd;
Ben Murdochda12d292016-06-02 14:46:10 +010014 builder.addImport("fun", sig_index);
15 builder.addFunction("main", sig_index)
16 .addBody([
Ben Murdochc5610432016-08-08 18:44:38 +010017 kExprGetLocal, 0, // --
18 kExprGetLocal, 1, // --
19 kExprCallFunction, kArity2, 0, // --
20 ]) // --
Ben Murdochda12d292016-06-02 14:46:10 +010021 .exportFunc();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000022
Ben Murdochda12d292016-06-02 14:46:10 +010023 var module = builder.instantiate(ffi);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000024}
25
26// everything is good.
27(function() {
28 var ffi = new Object();
29 ffi.fun = function(a, b) { print(a, b); }
30 testCallFFI(ffi);
31})();
32
33
34// FFI object should be an object.
35assertThrows(function() {
36 var ffi = 0;
37 testCallFFI(ffi);
38});
39
40
41// FFI object should have a "fun" property.
42assertThrows(function() {
43 var ffi = new Object();
44 testCallFFI(ffi);
45});
46
47
48// "fun" should be a JS function.
49assertThrows(function() {
50 var ffi = new Object();
51 ffi.fun = new Object();
52 testCallFFI(ffi);
53});
54
55
56// "fun" should be a JS function.
57assertThrows(function() {
58 var ffi = new Object();
59 ffi.fun = 0;
60 testCallFFI(ffi);
61});