blob: 3359429055e94f1d28cde4076fd7e2d194e6848e [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");
8
9function 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.
53assertThrows(function() {
54 var ffi = 0;
55 testCallFFI(ffi);
56});
57
58
59// FFI object should have a "fun" property.
60assertThrows(function() {
61 var ffi = new Object();
62 testCallFFI(ffi);
63});
64
65
66// "fun" should be a JS function.
67assertThrows(function() {
68 var ffi = new Object();
69 ffi.fun = new Object();
70 testCallFFI(ffi);
71});
72
73
74// "fun" should be a JS function.
75assertThrows(function() {
76 var ffi = new Object();
77 ffi.fun = 0;
78 testCallFFI(ffi);
79});