HOME


Mini Shell 1.0
Redirecting to https://devs.lapieza.net/iniciar-sesion Redirecting to https://devs.lapieza.net/iniciar-sesion.
DIR: /proc/self/root/usr/share/node_modules/@webassemblyjs/wasm-text-gen/esm/printers/
Upload File :
Current File : //proc/self/root/usr/share/node_modules/@webassemblyjs/wasm-text-gen/esm/printers/javascript.js
var _require = require("@webassemblyjs/ast"),
    traverse = _require.traverse;

var template = require("@babel/template")["default"];

var generate = require("@babel/generator")["default"];

var t = require("@babel/types");

var globalInstanceIdentifier = t.identifier("instance");
var globalMemoryIdentifier = t.identifier("_memory0");
var globalTableIdentifier = t.identifier("_table0");
var exportFuncTemplate = template.program("\n  export function NAME(ARGS) {\n    if (typeof INSTANCE === \"undefined\") {\n      throw new Error(\"Can not call function \" + NAME.name + \", module not initialized.\");\n    }\n\n    return INSTANCE.exports.NAME(ARGS);\n  }\n");
var headerTemplate = template.program("\n  if (typeof WebAssembly === \"undefined\") {\n    throw new Error(\"WebAssembly not supported\");\n  }\n\n  let INSTANCE;\n\n  const MEMORY = new WebAssembly.Memory({initial: 100, limit: 1000});\n  const TABLE = new WebAssembly.Table({initial: 0, element: 'anyfunc'});\n");
var initFuncTemplate = template.program("\n  export const memory = MEMORY;\n  export const table = TABLE;\n\n  export default function(opts = {env:{}}) {\n\n    if (typeof opts.env.memory === \"undefined\") {\n      opts.env.memory = MEMORY;\n    }\n\n    if (typeof opts.env.table === \"undefined\") {\n      opts.env.table = TABLE;\n    }\n\n    const importObject = opts;\n\n    const getArrayBuffer = response => response.arrayBuffer();\n    const instantiate = bytes => WebAssembly.instantiate(bytes, importObject);\n    const getInstance = results => (instance = results.instance);\n\n    return window.fetch(URL)\n      .then(getArrayBuffer)\n      .then(instantiate)\n      .then(getInstance);\n  }\n");

function genTemplate(fn, opts) {
  var ast = fn(opts);
  return generate(ast).code;
}

function printExport(moduleExport, funcsTable) {
  if (moduleExport.descr.exportType === "Func") {
    var funcNode = funcsTable[moduleExport.descr.id.value];
    var params = funcNode.params.map(function (x) {
      return x.valtype;
    }).map(function (x, k) {
      return t.identifier("p" + k + "_" + x);
    });
    return genTemplate(exportFuncTemplate, {
      NAME: t.identifier(moduleExport.name),
      ARGS: params,
      INSTANCE: globalInstanceIdentifier
    }) + "\n\n";
  }

  return "";
}

function print(ast, _ref) {
  var url = _ref.url;

  if (typeof url === "undefined") {
    throw new Error("You need to provide --url [url]");
  }

  var out = "";
  var state = {
    moduleExports: [],
    moduleImports: [],
    funcsTable: {}
  };
  traverse(ast, {
    Func: function Func(_ref2) {
      var node = _ref2.node;
      state.funcsTable[node.name.value] = node;
    },
    ModuleExport: function ModuleExport(_ref3) {
      var node = _ref3.node;
      state.moduleExports.push(node);
    },
    ModuleImport: function ModuleImport(_ref4) {
      var node = _ref4.node;
      state.moduleImports.push(node);
    }
  }); // Add comment

  out += "/**\n";
  out += " * Autogenered by wasmgen -o js.\n";
  out += " *\n";
  out += " * DO NOT EDIT.\n";
  out += " */\n";
  out += "\n";
  out += genTemplate(headerTemplate, {
    INSTANCE: globalInstanceIdentifier,
    MEMORY: globalMemoryIdentifier,
    TABLE: globalTableIdentifier
  });
  out += "\n\n";
  out += genTemplate(initFuncTemplate, {
    URL: t.StringLiteral(url),
    MEMORY: globalMemoryIdentifier,
    TABLE: globalTableIdentifier
  });
  out += "\n\n";

  if (state.moduleExports.length > 0) {
    out += state.moduleExports.reduce(function (acc, e) {
      return acc + printExport(e, state.funcsTable);
    }, "");
  }

  return out;
}

module.exports = print;