Home | History | Annotate | Download | only in wasm
      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