webassembly-interpreter
Version: 
WebAssembly interpreter
70 lines (59 loc) • 2.63 kB
JavaScript
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var _require = require("./compiler/parsing/watf"),
    parseSource = _require.parseSource;
var _require2 = require("./compiler/parsing/wasm"),
    parseBinary = _require2.parseBinary;
var _require3 = require("./interpreter"),
    Instance = _require3.Instance;
var _require4 = require("./errors"),
    RuntimeError = _require4.RuntimeError,
    CompileError = _require4.CompileError,
    LinkError = _require4.LinkError;
var _require5 = require("./compiler/compile/module"),
    createCompiledModule = _require5.createCompiledModule,
    Module = _require5.Module;
var _require6 = require("./interpreter/runtime/values/memory"),
    Memory = _require6.Memory;
var _require7 = require("./interpreter/runtime/values/table"),
    Table = _require7.Table;
var _require8 = require("./check-endianness"),
    checkEndianness = _require8.checkEndianness;
var WebAssembly = {
  instantiate: function instantiate(buff) {
    var importObject = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    return new Promise(function (resolve, reject) {
      if (checkEndianness() === false) {
        return reject(new RuntimeError("expected the system to be little-endian"));
      }
      if (buff instanceof ArrayBuffer === false && buff instanceof Uint8Array === false) {
        return reject("Module must be either an ArrayBuffer or an Uint8Array (BufferSource), " + _typeof(buff) + " given.");
      }
      var ast = parseBinary(buff);
      var module = createCompiledModule(ast);
      resolve({
        instance: new Instance(module, importObject),
        module: module
      });
    });
  },
  compile: function compile(buff) {
    return new Promise(function (resolve) {
      var ast = parseBinary(buff);
      resolve(createCompiledModule(ast));
    });
  },
  instantiateFromSource: function instantiateFromSource(content) {
    var importObject = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var ast = parseSource(content);
    var module = createCompiledModule(ast);
    return new Instance(module, importObject);
  },
  Instance: Instance,
  Module: Module,
  Memory: Memory,
  Table: Table,
  RuntimeError: RuntimeError,
  LinkError: LinkError,
  CompileError: CompileError
};
module.exports = WebAssembly;