summaryrefslogtreecommitdiffstats
path: root/node_modules/@webassemblyjs/wast-printer
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@webassemblyjs/wast-printer')
-rw-r--r--node_modules/@webassemblyjs/wast-printer/LICENSE21
-rw-r--r--node_modules/@webassemblyjs/wast-printer/README.md17
-rw-r--r--node_modules/@webassemblyjs/wast-printer/esm/index.js900
-rw-r--r--node_modules/@webassemblyjs/wast-printer/lib/index.js911
-rw-r--r--node_modules/@webassemblyjs/wast-printer/package.json69
5 files changed, 1918 insertions, 0 deletions
diff --git a/node_modules/@webassemblyjs/wast-printer/LICENSE b/node_modules/@webassemblyjs/wast-printer/LICENSE
new file mode 100644
index 0000000..87e7e1f
--- /dev/null
+++ b/node_modules/@webassemblyjs/wast-printer/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@webassemblyjs/wast-printer/README.md b/node_modules/@webassemblyjs/wast-printer/README.md
new file mode 100644
index 0000000..ed4cd4e
--- /dev/null
+++ b/node_modules/@webassemblyjs/wast-printer/README.md
@@ -0,0 +1,17 @@
+# @webassemblyjs/wast-parser
+
+> WebAssembly text format printer
+
+## Installation
+
+```sh
+yarn add @webassemblyjs/wast-printer
+```
+
+## Usage
+
+```js
+import { print } from "@webassemblyjs/wast-printer"
+
+console.log(print(ast));
+```
diff --git a/node_modules/@webassemblyjs/wast-printer/esm/index.js b/node_modules/@webassemblyjs/wast-printer/esm/index.js
new file mode 100644
index 0000000..398e86f
--- /dev/null
+++ b/node_modules/@webassemblyjs/wast-printer/esm/index.js
@@ -0,0 +1,900 @@
+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); }
+
+function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }
+
+import { isAnonymous, isInstruction } from "@webassemblyjs/ast";
+import Long from "@xtuc/long";
+var compact = false;
+var space = " ";
+
+var quote = function quote(str) {
+ return "\"".concat(str, "\"");
+};
+
+function indent(nb) {
+ return Array(nb).fill(space + space).join("");
+} // TODO(sven): allow arbitrary ast nodes
+
+
+export function print(n) {
+ if (n.type === "Program") {
+ return printProgram(n, 0);
+ } else {
+ throw new Error("Unsupported node in print of type: " + String(n.type));
+ }
+}
+
+function printProgram(n, depth) {
+ return n.body.reduce(function (acc, child) {
+ if (child.type === "Module") {
+ acc += printModule(child, depth + 1);
+ }
+
+ if (child.type === "Func") {
+ acc += printFunc(child, depth + 1);
+ }
+
+ if (child.type === "BlockComment") {
+ acc += printBlockComment(child);
+ }
+
+ if (child.type === "LeadingComment") {
+ acc += printLeadingComment(child);
+ }
+
+ if (compact === false) {
+ acc += "\n";
+ }
+
+ return acc;
+ }, "");
+}
+
+function printTypeInstruction(n) {
+ var out = "";
+ out += "(";
+ out += "type";
+ out += space;
+
+ if (n.id != null) {
+ out += printIndex(n.id);
+ out += space;
+ }
+
+ out += "(";
+ out += "func";
+ n.functype.params.forEach(function (param) {
+ out += space;
+ out += "(";
+ out += "param";
+ out += space;
+ out += printFuncParam(param);
+ out += ")";
+ });
+ n.functype.results.forEach(function (result) {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += result;
+ out += ")";
+ });
+ out += ")"; // func
+
+ out += ")";
+ return out;
+}
+
+function printModule(n, depth) {
+ var out = "(";
+ out += "module";
+
+ if (typeof n.id === "string") {
+ out += space;
+ out += n.id;
+ }
+
+ if (compact === false) {
+ out += "\n";
+ } else {
+ out += space;
+ }
+
+ n.fields.forEach(function (field) {
+ if (compact === false) {
+ out += indent(depth);
+ }
+
+ switch (field.type) {
+ case "Func":
+ {
+ out += printFunc(field, depth + 1);
+ break;
+ }
+
+ case "TypeInstruction":
+ {
+ out += printTypeInstruction(field);
+ break;
+ }
+
+ case "Table":
+ {
+ out += printTable(field);
+ break;
+ }
+
+ case "Global":
+ {
+ out += printGlobal(field, depth + 1);
+ break;
+ }
+
+ case "ModuleExport":
+ {
+ out += printModuleExport(field);
+ break;
+ }
+
+ case "ModuleImport":
+ {
+ out += printModuleImport(field);
+ break;
+ }
+
+ case "Memory":
+ {
+ out += printMemory(field);
+ break;
+ }
+
+ case "BlockComment":
+ {
+ out += printBlockComment(field);
+ break;
+ }
+
+ case "LeadingComment":
+ {
+ out += printLeadingComment(field);
+ break;
+ }
+
+ case "Start":
+ {
+ out += printStart(field);
+ break;
+ }
+
+ case "Elem":
+ {
+ out += printElem(field, depth);
+ break;
+ }
+
+ case "Data":
+ {
+ out += printData(field, depth);
+ break;
+ }
+
+ default:
+ throw new Error("Unsupported node in printModule: " + String(field.type));
+ }
+
+ if (compact === false) {
+ out += "\n";
+ }
+ });
+ out += ")";
+ return out;
+}
+
+function printData(n, depth) {
+ var out = "";
+ out += "(";
+ out += "data";
+ out += space;
+ out += printIndex(n.memoryIndex);
+ out += space;
+ out += printInstruction(n.offset, depth);
+ out += space;
+ out += '"';
+ n.init.values.forEach(function (byte) {
+ // Avoid non-displayable characters
+ if (byte <= 31 || byte == 34 || byte == 92 || byte >= 127) {
+ out += "\\";
+ out += ("00" + byte.toString(16)).substr(-2);
+ } else if (byte > 255) {
+ throw new Error("Unsupported byte in data segment: " + byte);
+ } else {
+ out += String.fromCharCode(byte);
+ }
+ });
+ out += '"';
+ out += ")";
+ return out;
+}
+
+function printElem(n, depth) {
+ var out = "";
+ out += "(";
+ out += "elem";
+ out += space;
+ out += printIndex(n.table);
+
+ var _n$offset = _slicedToArray(n.offset, 1),
+ firstOffset = _n$offset[0];
+
+ out += space;
+ out += "(";
+ out += "offset";
+ out += space;
+ out += printInstruction(firstOffset, depth);
+ out += ")";
+ n.funcs.forEach(function (func) {
+ out += space;
+ out += printIndex(func);
+ });
+ out += ")";
+ return out;
+}
+
+function printStart(n) {
+ var out = "";
+ out += "(";
+ out += "start";
+ out += space;
+ out += printIndex(n.index);
+ out += ")";
+ return out;
+}
+
+function printLeadingComment(n) {
+ // Don't print leading comments in compact mode
+ if (compact === true) {
+ return "";
+ }
+
+ var out = "";
+ out += ";;";
+ out += n.value;
+ out += "\n";
+ return out;
+}
+
+function printBlockComment(n) {
+ // Don't print block comments in compact mode
+ if (compact === true) {
+ return "";
+ }
+
+ var out = "";
+ out += "(;";
+ out += n.value;
+ out += ";)";
+ out += "\n";
+ return out;
+}
+
+function printSignature(n) {
+ var out = "";
+ n.params.forEach(function (param) {
+ out += space;
+ out += "(";
+ out += "param";
+ out += space;
+ out += printFuncParam(param);
+ out += ")";
+ });
+ n.results.forEach(function (result) {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += result;
+ out += ")";
+ });
+ return out;
+}
+
+function printModuleImportDescr(n) {
+ var out = "";
+
+ if (n.type === "FuncImportDescr") {
+ out += "(";
+ out += "func";
+
+ if (isAnonymous(n.id) === false) {
+ out += space;
+ out += printIdentifier(n.id);
+ }
+
+ out += printSignature(n.signature);
+ out += ")";
+ }
+
+ if (n.type === "GlobalType") {
+ out += "(";
+ out += "global";
+ out += space;
+ out += printGlobalType(n);
+ out += ")";
+ }
+
+ if (n.type === "Table") {
+ out += printTable(n);
+ }
+
+ return out;
+}
+
+function printModuleImport(n) {
+ var out = "";
+ out += "(";
+ out += "import";
+ out += space;
+ out += quote(n.module);
+ out += space;
+ out += quote(n.name);
+ out += space;
+ out += printModuleImportDescr(n.descr);
+ out += ")";
+ return out;
+}
+
+function printGlobalType(n) {
+ var out = "";
+
+ if (n.mutability === "var") {
+ out += "(";
+ out += "mut";
+ out += space;
+ out += n.valtype;
+ out += ")";
+ } else {
+ out += n.valtype;
+ }
+
+ return out;
+}
+
+function printGlobal(n, depth) {
+ var out = "";
+ out += "(";
+ out += "global";
+ out += space;
+
+ if (n.name != null && isAnonymous(n.name) === false) {
+ out += printIdentifier(n.name);
+ out += space;
+ }
+
+ out += printGlobalType(n.globalType);
+ out += space;
+ n.init.forEach(function (i) {
+ out += printInstruction(i, depth + 1);
+ });
+ out += ")";
+ return out;
+}
+
+function printTable(n) {
+ var out = "";
+ out += "(";
+ out += "table";
+ out += space;
+
+ if (n.name != null && isAnonymous(n.name) === false) {
+ out += printIdentifier(n.name);
+ out += space;
+ }
+
+ out += printLimit(n.limits);
+ out += space;
+ out += n.elementType;
+ out += ")";
+ return out;
+}
+
+function printFuncParam(n) {
+ var out = "";
+
+ if (typeof n.id === "string") {
+ out += "$" + n.id;
+ out += space;
+ }
+
+ out += n.valtype;
+ return out;
+}
+
+function printFunc(n, depth) {
+ var out = "";
+ out += "(";
+ out += "func";
+
+ if (n.name != null) {
+ if (n.name.type === "Identifier" && isAnonymous(n.name) === false) {
+ out += space;
+ out += printIdentifier(n.name);
+ }
+ }
+
+ if (n.signature.type === "Signature") {
+ out += printSignature(n.signature);
+ } else {
+ var index = n.signature;
+ out += space;
+ out += "(";
+ out += "type";
+ out += space;
+ out += printIndex(index);
+ out += ")";
+ }
+
+ if (n.body.length > 0) {
+ // func is empty since we ignore the default end instruction
+ if (n.body.length === 1 && n.body[0].id === "end") {
+ out += ")";
+ return out;
+ }
+
+ if (compact === false) {
+ out += "\n";
+ }
+
+ n.body.forEach(function (i) {
+ if (i.id !== "end") {
+ out += indent(depth);
+ out += printInstruction(i, depth);
+
+ if (compact === false) {
+ out += "\n";
+ }
+ }
+ });
+ out += indent(depth - 1) + ")";
+ } else {
+ out += ")";
+ }
+
+ return out;
+}
+
+function printInstruction(n, depth) {
+ switch (n.type) {
+ case "Instr":
+ // $FlowIgnore
+ return printGenericInstruction(n, depth + 1);
+
+ case "BlockInstruction":
+ // $FlowIgnore
+ return printBlockInstruction(n, depth + 1);
+
+ case "IfInstruction":
+ // $FlowIgnore
+ return printIfInstruction(n, depth + 1);
+
+ case "CallInstruction":
+ // $FlowIgnore
+ return printCallInstruction(n, depth + 1);
+
+ case "CallIndirectInstruction":
+ // $FlowIgnore
+ return printCallIndirectIntruction(n, depth + 1);
+
+ case "LoopInstruction":
+ // $FlowIgnore
+ return printLoopInstruction(n, depth + 1);
+
+ default:
+ throw new Error("Unsupported instruction: " + JSON.stringify(n.type));
+ }
+}
+
+function printCallIndirectIntruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "call_indirect";
+
+ if (n.signature.type === "Signature") {
+ out += printSignature(n.signature);
+ } else if (n.signature.type === "Identifier") {
+ out += space;
+ out += "(";
+ out += "type";
+ out += space;
+ out += printIdentifier(n.signature);
+ out += ")";
+ } else {
+ throw new Error("CallIndirectInstruction: unsupported signature " + JSON.stringify(n.signature.type));
+ }
+
+ out += space;
+
+ if (n.intrs != null) {
+ // $FlowIgnore
+ n.intrs.forEach(function (i, index) {
+ // $FlowIgnore
+ out += printInstruction(i, depth + 1); // $FlowIgnore
+
+ if (index !== n.intrs.length - 1) {
+ out += space;
+ }
+ });
+ }
+
+ out += ")";
+ return out;
+}
+
+function printLoopInstruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "loop";
+
+ if (n.label != null && isAnonymous(n.label) === false) {
+ out += space;
+ out += printIdentifier(n.label);
+ }
+
+ if (typeof n.resulttype === "string") {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += n.resulttype;
+ out += ")";
+ }
+
+ if (n.instr.length > 0) {
+ n.instr.forEach(function (e) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += printInstruction(e, depth + 1);
+ });
+
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth - 1);
+ }
+ }
+
+ out += ")";
+ return out;
+}
+
+function printCallInstruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "call";
+ out += space;
+ out += printIndex(n.index);
+
+ if (_typeof(n.instrArgs) === "object") {
+ // $FlowIgnore
+ n.instrArgs.forEach(function (arg) {
+ out += space;
+ out += printFuncInstructionArg(arg, depth + 1);
+ });
+ }
+
+ out += ")";
+ return out;
+}
+
+function printIfInstruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "if";
+
+ if (n.testLabel != null && isAnonymous(n.testLabel) === false) {
+ out += space;
+ out += printIdentifier(n.testLabel);
+ }
+
+ if (typeof n.result === "string") {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += n.result;
+ out += ")";
+ }
+
+ if (n.test.length > 0) {
+ out += space;
+ n.test.forEach(function (i) {
+ out += printInstruction(i, depth + 1);
+ });
+ }
+
+ if (n.consequent.length > 0) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += "(";
+ out += "then";
+ depth++;
+ n.consequent.forEach(function (i) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += printInstruction(i, depth + 1);
+ });
+ depth--;
+
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth);
+ }
+
+ out += ")";
+ } else {
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth);
+ }
+
+ out += "(";
+ out += "then";
+ out += ")";
+ }
+
+ if (n.alternate.length > 0) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += "(";
+ out += "else";
+ depth++;
+ n.alternate.forEach(function (i) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += printInstruction(i, depth + 1);
+ });
+ depth--;
+
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth);
+ }
+
+ out += ")";
+ } else {
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth);
+ }
+
+ out += "(";
+ out += "else";
+ out += ")";
+ }
+
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth - 1);
+ }
+
+ out += ")";
+ return out;
+}
+
+function printBlockInstruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "block";
+
+ if (n.label != null && isAnonymous(n.label) === false) {
+ out += space;
+ out += printIdentifier(n.label);
+ }
+
+ if (typeof n.result === "string") {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += n.result;
+ out += ")";
+ }
+
+ if (n.instr.length > 0) {
+ n.instr.forEach(function (i) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += printInstruction(i, depth + 1);
+ });
+
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth - 1);
+ out += ")";
+ } else {
+ out += ")";
+ }
+
+ return out;
+}
+
+function printGenericInstruction(n, depth) {
+ var out = "";
+ out += "(";
+
+ if (typeof n.object === "string") {
+ out += n.object;
+ out += ".";
+ }
+
+ out += n.id;
+ n.args.forEach(function (arg) {
+ out += space;
+ out += printFuncInstructionArg(arg, depth + 1);
+ });
+ out += ")";
+ return out;
+}
+
+function printLongNumberLiteral(n) {
+ if (typeof n.raw === "string") {
+ return n.raw;
+ }
+
+ var _n$value = n.value,
+ low = _n$value.low,
+ high = _n$value.high;
+ var v = new Long(low, high);
+ return v.toString();
+}
+
+function printFloatLiteral(n) {
+ if (typeof n.raw === "string") {
+ return n.raw;
+ }
+
+ return String(n.value);
+}
+
+function printFuncInstructionArg(n, depth) {
+ var out = "";
+
+ if (n.type === "NumberLiteral") {
+ out += printNumberLiteral(n);
+ }
+
+ if (n.type === "LongNumberLiteral") {
+ out += printLongNumberLiteral(n);
+ }
+
+ if (n.type === "Identifier" && isAnonymous(n) === false) {
+ out += printIdentifier(n);
+ }
+
+ if (n.type === "ValtypeLiteral") {
+ out += n.name;
+ }
+
+ if (n.type === "FloatLiteral") {
+ out += printFloatLiteral(n);
+ }
+
+ if (isInstruction(n)) {
+ out += printInstruction(n, depth + 1);
+ }
+
+ return out;
+}
+
+function printNumberLiteral(n) {
+ if (typeof n.raw === "string") {
+ return n.raw;
+ }
+
+ return String(n.value);
+}
+
+function printModuleExport(n) {
+ var out = "";
+ out += "(";
+ out += "export";
+ out += space;
+ out += quote(n.name);
+
+ if (n.descr.exportType === "Func") {
+ out += space;
+ out += "(";
+ out += "func";
+ out += space;
+ out += printIndex(n.descr.id);
+ out += ")";
+ } else if (n.descr.exportType === "Global") {
+ out += space;
+ out += "(";
+ out += "global";
+ out += space;
+ out += printIndex(n.descr.id);
+ out += ")";
+ } else if (n.descr.exportType === "Memory" || n.descr.exportType === "Mem") {
+ out += space;
+ out += "(";
+ out += "memory";
+ out += space;
+ out += printIndex(n.descr.id);
+ out += ")";
+ } else if (n.descr.exportType === "Table") {
+ out += space;
+ out += "(";
+ out += "table";
+ out += space;
+ out += printIndex(n.descr.id);
+ out += ")";
+ } else {
+ throw new Error("printModuleExport: unknown type: " + n.descr.exportType);
+ }
+
+ out += ")";
+ return out;
+}
+
+function printIdentifier(n) {
+ return "$" + n.value;
+}
+
+function printIndex(n) {
+ if (n.type === "Identifier") {
+ return printIdentifier(n);
+ } else if (n.type === "NumberLiteral") {
+ return printNumberLiteral(n);
+ } else {
+ throw new Error("Unsupported index: " + n.type);
+ }
+}
+
+function printMemory(n) {
+ var out = "";
+ out += "(";
+ out += "memory";
+
+ if (n.id != null) {
+ out += space;
+ out += printIndex(n.id);
+ out += space;
+ }
+
+ out += printLimit(n.limits);
+ out += ")";
+ return out;
+}
+
+function printLimit(n) {
+ var out = "";
+ out += n.min + "";
+
+ if (n.max != null) {
+ out += space;
+ out += String(n.max);
+ }
+
+ return out;
+} \ No newline at end of file
diff --git a/node_modules/@webassemblyjs/wast-printer/lib/index.js b/node_modules/@webassemblyjs/wast-printer/lib/index.js
new file mode 100644
index 0000000..03be8ca
--- /dev/null
+++ b/node_modules/@webassemblyjs/wast-printer/lib/index.js
@@ -0,0 +1,911 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.print = print;
+
+var _ast = require("@webassemblyjs/ast");
+
+var _long = _interopRequireDefault(require("@xtuc/long"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+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); }
+
+function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }
+
+var compact = false;
+var space = " ";
+
+var quote = function quote(str) {
+ return "\"".concat(str, "\"");
+};
+
+function indent(nb) {
+ return Array(nb).fill(space + space).join("");
+} // TODO(sven): allow arbitrary ast nodes
+
+
+function print(n) {
+ if (n.type === "Program") {
+ return printProgram(n, 0);
+ } else {
+ throw new Error("Unsupported node in print of type: " + String(n.type));
+ }
+}
+
+function printProgram(n, depth) {
+ return n.body.reduce(function (acc, child) {
+ if (child.type === "Module") {
+ acc += printModule(child, depth + 1);
+ }
+
+ if (child.type === "Func") {
+ acc += printFunc(child, depth + 1);
+ }
+
+ if (child.type === "BlockComment") {
+ acc += printBlockComment(child);
+ }
+
+ if (child.type === "LeadingComment") {
+ acc += printLeadingComment(child);
+ }
+
+ if (compact === false) {
+ acc += "\n";
+ }
+
+ return acc;
+ }, "");
+}
+
+function printTypeInstruction(n) {
+ var out = "";
+ out += "(";
+ out += "type";
+ out += space;
+
+ if (n.id != null) {
+ out += printIndex(n.id);
+ out += space;
+ }
+
+ out += "(";
+ out += "func";
+ n.functype.params.forEach(function (param) {
+ out += space;
+ out += "(";
+ out += "param";
+ out += space;
+ out += printFuncParam(param);
+ out += ")";
+ });
+ n.functype.results.forEach(function (result) {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += result;
+ out += ")";
+ });
+ out += ")"; // func
+
+ out += ")";
+ return out;
+}
+
+function printModule(n, depth) {
+ var out = "(";
+ out += "module";
+
+ if (typeof n.id === "string") {
+ out += space;
+ out += n.id;
+ }
+
+ if (compact === false) {
+ out += "\n";
+ } else {
+ out += space;
+ }
+
+ n.fields.forEach(function (field) {
+ if (compact === false) {
+ out += indent(depth);
+ }
+
+ switch (field.type) {
+ case "Func":
+ {
+ out += printFunc(field, depth + 1);
+ break;
+ }
+
+ case "TypeInstruction":
+ {
+ out += printTypeInstruction(field);
+ break;
+ }
+
+ case "Table":
+ {
+ out += printTable(field);
+ break;
+ }
+
+ case "Global":
+ {
+ out += printGlobal(field, depth + 1);
+ break;
+ }
+
+ case "ModuleExport":
+ {
+ out += printModuleExport(field);
+ break;
+ }
+
+ case "ModuleImport":
+ {
+ out += printModuleImport(field);
+ break;
+ }
+
+ case "Memory":
+ {
+ out += printMemory(field);
+ break;
+ }
+
+ case "BlockComment":
+ {
+ out += printBlockComment(field);
+ break;
+ }
+
+ case "LeadingComment":
+ {
+ out += printLeadingComment(field);
+ break;
+ }
+
+ case "Start":
+ {
+ out += printStart(field);
+ break;
+ }
+
+ case "Elem":
+ {
+ out += printElem(field, depth);
+ break;
+ }
+
+ case "Data":
+ {
+ out += printData(field, depth);
+ break;
+ }
+
+ default:
+ throw new Error("Unsupported node in printModule: " + String(field.type));
+ }
+
+ if (compact === false) {
+ out += "\n";
+ }
+ });
+ out += ")";
+ return out;
+}
+
+function printData(n, depth) {
+ var out = "";
+ out += "(";
+ out += "data";
+ out += space;
+ out += printIndex(n.memoryIndex);
+ out += space;
+ out += printInstruction(n.offset, depth);
+ out += space;
+ out += '"';
+ n.init.values.forEach(function (byte) {
+ // Avoid non-displayable characters
+ if (byte <= 31 || byte == 34 || byte == 92 || byte >= 127) {
+ out += "\\";
+ out += ("00" + byte.toString(16)).substr(-2);
+ } else if (byte > 255) {
+ throw new Error("Unsupported byte in data segment: " + byte);
+ } else {
+ out += String.fromCharCode(byte);
+ }
+ });
+ out += '"';
+ out += ")";
+ return out;
+}
+
+function printElem(n, depth) {
+ var out = "";
+ out += "(";
+ out += "elem";
+ out += space;
+ out += printIndex(n.table);
+
+ var _n$offset = _slicedToArray(n.offset, 1),
+ firstOffset = _n$offset[0];
+
+ out += space;
+ out += "(";
+ out += "offset";
+ out += space;
+ out += printInstruction(firstOffset, depth);
+ out += ")";
+ n.funcs.forEach(function (func) {
+ out += space;
+ out += printIndex(func);
+ });
+ out += ")";
+ return out;
+}
+
+function printStart(n) {
+ var out = "";
+ out += "(";
+ out += "start";
+ out += space;
+ out += printIndex(n.index);
+ out += ")";
+ return out;
+}
+
+function printLeadingComment(n) {
+ // Don't print leading comments in compact mode
+ if (compact === true) {
+ return "";
+ }
+
+ var out = "";
+ out += ";;";
+ out += n.value;
+ out += "\n";
+ return out;
+}
+
+function printBlockComment(n) {
+ // Don't print block comments in compact mode
+ if (compact === true) {
+ return "";
+ }
+
+ var out = "";
+ out += "(;";
+ out += n.value;
+ out += ";)";
+ out += "\n";
+ return out;
+}
+
+function printSignature(n) {
+ var out = "";
+ n.params.forEach(function (param) {
+ out += space;
+ out += "(";
+ out += "param";
+ out += space;
+ out += printFuncParam(param);
+ out += ")";
+ });
+ n.results.forEach(function (result) {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += result;
+ out += ")";
+ });
+ return out;
+}
+
+function printModuleImportDescr(n) {
+ var out = "";
+
+ if (n.type === "FuncImportDescr") {
+ out += "(";
+ out += "func";
+
+ if ((0, _ast.isAnonymous)(n.id) === false) {
+ out += space;
+ out += printIdentifier(n.id);
+ }
+
+ out += printSignature(n.signature);
+ out += ")";
+ }
+
+ if (n.type === "GlobalType") {
+ out += "(";
+ out += "global";
+ out += space;
+ out += printGlobalType(n);
+ out += ")";
+ }
+
+ if (n.type === "Table") {
+ out += printTable(n);
+ }
+
+ return out;
+}
+
+function printModuleImport(n) {
+ var out = "";
+ out += "(";
+ out += "import";
+ out += space;
+ out += quote(n.module);
+ out += space;
+ out += quote(n.name);
+ out += space;
+ out += printModuleImportDescr(n.descr);
+ out += ")";
+ return out;
+}
+
+function printGlobalType(n) {
+ var out = "";
+
+ if (n.mutability === "var") {
+ out += "(";
+ out += "mut";
+ out += space;
+ out += n.valtype;
+ out += ")";
+ } else {
+ out += n.valtype;
+ }
+
+ return out;
+}
+
+function printGlobal(n, depth) {
+ var out = "";
+ out += "(";
+ out += "global";
+ out += space;
+
+ if (n.name != null && (0, _ast.isAnonymous)(n.name) === false) {
+ out += printIdentifier(n.name);
+ out += space;
+ }
+
+ out += printGlobalType(n.globalType);
+ out += space;
+ n.init.forEach(function (i) {
+ out += printInstruction(i, depth + 1);
+ });
+ out += ")";
+ return out;
+}
+
+function printTable(n) {
+ var out = "";
+ out += "(";
+ out += "table";
+ out += space;
+
+ if (n.name != null && (0, _ast.isAnonymous)(n.name) === false) {
+ out += printIdentifier(n.name);
+ out += space;
+ }
+
+ out += printLimit(n.limits);
+ out += space;
+ out += n.elementType;
+ out += ")";
+ return out;
+}
+
+function printFuncParam(n) {
+ var out = "";
+
+ if (typeof n.id === "string") {
+ out += "$" + n.id;
+ out += space;
+ }
+
+ out += n.valtype;
+ return out;
+}
+
+function printFunc(n, depth) {
+ var out = "";
+ out += "(";
+ out += "func";
+
+ if (n.name != null) {
+ if (n.name.type === "Identifier" && (0, _ast.isAnonymous)(n.name) === false) {
+ out += space;
+ out += printIdentifier(n.name);
+ }
+ }
+
+ if (n.signature.type === "Signature") {
+ out += printSignature(n.signature);
+ } else {
+ var index = n.signature;
+ out += space;
+ out += "(";
+ out += "type";
+ out += space;
+ out += printIndex(index);
+ out += ")";
+ }
+
+ if (n.body.length > 0) {
+ // func is empty since we ignore the default end instruction
+ if (n.body.length === 1 && n.body[0].id === "end") {
+ out += ")";
+ return out;
+ }
+
+ if (compact === false) {
+ out += "\n";
+ }
+
+ n.body.forEach(function (i) {
+ if (i.id !== "end") {
+ out += indent(depth);
+ out += printInstruction(i, depth);
+
+ if (compact === false) {
+ out += "\n";
+ }
+ }
+ });
+ out += indent(depth - 1) + ")";
+ } else {
+ out += ")";
+ }
+
+ return out;
+}
+
+function printInstruction(n, depth) {
+ switch (n.type) {
+ case "Instr":
+ // $FlowIgnore
+ return printGenericInstruction(n, depth + 1);
+
+ case "BlockInstruction":
+ // $FlowIgnore
+ return printBlockInstruction(n, depth + 1);
+
+ case "IfInstruction":
+ // $FlowIgnore
+ return printIfInstruction(n, depth + 1);
+
+ case "CallInstruction":
+ // $FlowIgnore
+ return printCallInstruction(n, depth + 1);
+
+ case "CallIndirectInstruction":
+ // $FlowIgnore
+ return printCallIndirectIntruction(n, depth + 1);
+
+ case "LoopInstruction":
+ // $FlowIgnore
+ return printLoopInstruction(n, depth + 1);
+
+ default:
+ throw new Error("Unsupported instruction: " + JSON.stringify(n.type));
+ }
+}
+
+function printCallIndirectIntruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "call_indirect";
+
+ if (n.signature.type === "Signature") {
+ out += printSignature(n.signature);
+ } else if (n.signature.type === "Identifier") {
+ out += space;
+ out += "(";
+ out += "type";
+ out += space;
+ out += printIdentifier(n.signature);
+ out += ")";
+ } else {
+ throw new Error("CallIndirectInstruction: unsupported signature " + JSON.stringify(n.signature.type));
+ }
+
+ out += space;
+
+ if (n.intrs != null) {
+ // $FlowIgnore
+ n.intrs.forEach(function (i, index) {
+ // $FlowIgnore
+ out += printInstruction(i, depth + 1); // $FlowIgnore
+
+ if (index !== n.intrs.length - 1) {
+ out += space;
+ }
+ });
+ }
+
+ out += ")";
+ return out;
+}
+
+function printLoopInstruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "loop";
+
+ if (n.label != null && (0, _ast.isAnonymous)(n.label) === false) {
+ out += space;
+ out += printIdentifier(n.label);
+ }
+
+ if (typeof n.resulttype === "string") {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += n.resulttype;
+ out += ")";
+ }
+
+ if (n.instr.length > 0) {
+ n.instr.forEach(function (e) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += printInstruction(e, depth + 1);
+ });
+
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth - 1);
+ }
+ }
+
+ out += ")";
+ return out;
+}
+
+function printCallInstruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "call";
+ out += space;
+ out += printIndex(n.index);
+
+ if (_typeof(n.instrArgs) === "object") {
+ // $FlowIgnore
+ n.instrArgs.forEach(function (arg) {
+ out += space;
+ out += printFuncInstructionArg(arg, depth + 1);
+ });
+ }
+
+ out += ")";
+ return out;
+}
+
+function printIfInstruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "if";
+
+ if (n.testLabel != null && (0, _ast.isAnonymous)(n.testLabel) === false) {
+ out += space;
+ out += printIdentifier(n.testLabel);
+ }
+
+ if (typeof n.result === "string") {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += n.result;
+ out += ")";
+ }
+
+ if (n.test.length > 0) {
+ out += space;
+ n.test.forEach(function (i) {
+ out += printInstruction(i, depth + 1);
+ });
+ }
+
+ if (n.consequent.length > 0) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += "(";
+ out += "then";
+ depth++;
+ n.consequent.forEach(function (i) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += printInstruction(i, depth + 1);
+ });
+ depth--;
+
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth);
+ }
+
+ out += ")";
+ } else {
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth);
+ }
+
+ out += "(";
+ out += "then";
+ out += ")";
+ }
+
+ if (n.alternate.length > 0) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += "(";
+ out += "else";
+ depth++;
+ n.alternate.forEach(function (i) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += printInstruction(i, depth + 1);
+ });
+ depth--;
+
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth);
+ }
+
+ out += ")";
+ } else {
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth);
+ }
+
+ out += "(";
+ out += "else";
+ out += ")";
+ }
+
+ if (compact === false) {
+ out += "\n";
+ out += indent(depth - 1);
+ }
+
+ out += ")";
+ return out;
+}
+
+function printBlockInstruction(n, depth) {
+ var out = "";
+ out += "(";
+ out += "block";
+
+ if (n.label != null && (0, _ast.isAnonymous)(n.label) === false) {
+ out += space;
+ out += printIdentifier(n.label);
+ }
+
+ if (typeof n.result === "string") {
+ out += space;
+ out += "(";
+ out += "result";
+ out += space;
+ out += n.result;
+ out += ")";
+ }
+
+ if (n.instr.length > 0) {
+ n.instr.forEach(function (i) {
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth);
+ out += printInstruction(i, depth + 1);
+ });
+
+ if (compact === false) {
+ out += "\n";
+ }
+
+ out += indent(depth - 1);
+ out += ")";
+ } else {
+ out += ")";
+ }
+
+ return out;
+}
+
+function printGenericInstruction(n, depth) {
+ var out = "";
+ out += "(";
+
+ if (typeof n.object === "string") {
+ out += n.object;
+ out += ".";
+ }
+
+ out += n.id;
+ n.args.forEach(function (arg) {
+ out += space;
+ out += printFuncInstructionArg(arg, depth + 1);
+ });
+ out += ")";
+ return out;
+}
+
+function printLongNumberLiteral(n) {
+ if (typeof n.raw === "string") {
+ return n.raw;
+ }
+
+ var _n$value = n.value,
+ low = _n$value.low,
+ high = _n$value.high;
+ var v = new _long.default(low, high);
+ return v.toString();
+}
+
+function printFloatLiteral(n) {
+ if (typeof n.raw === "string") {
+ return n.raw;
+ }
+
+ return String(n.value);
+}
+
+function printFuncInstructionArg(n, depth) {
+ var out = "";
+
+ if (n.type === "NumberLiteral") {
+ out += printNumberLiteral(n);
+ }
+
+ if (n.type === "LongNumberLiteral") {
+ out += printLongNumberLiteral(n);
+ }
+
+ if (n.type === "Identifier" && (0, _ast.isAnonymous)(n) === false) {
+ out += printIdentifier(n);
+ }
+
+ if (n.type === "ValtypeLiteral") {
+ out += n.name;
+ }
+
+ if (n.type === "FloatLiteral") {
+ out += printFloatLiteral(n);
+ }
+
+ if ((0, _ast.isInstruction)(n)) {
+ out += printInstruction(n, depth + 1);
+ }
+
+ return out;
+}
+
+function printNumberLiteral(n) {
+ if (typeof n.raw === "string") {
+ return n.raw;
+ }
+
+ return String(n.value);
+}
+
+function printModuleExport(n) {
+ var out = "";
+ out += "(";
+ out += "export";
+ out += space;
+ out += quote(n.name);
+
+ if (n.descr.exportType === "Func") {
+ out += space;
+ out += "(";
+ out += "func";
+ out += space;
+ out += printIndex(n.descr.id);
+ out += ")";
+ } else if (n.descr.exportType === "Global") {
+ out += space;
+ out += "(";
+ out += "global";
+ out += space;
+ out += printIndex(n.descr.id);
+ out += ")";
+ } else if (n.descr.exportType === "Memory" || n.descr.exportType === "Mem") {
+ out += space;
+ out += "(";
+ out += "memory";
+ out += space;
+ out += printIndex(n.descr.id);
+ out += ")";
+ } else if (n.descr.exportType === "Table") {
+ out += space;
+ out += "(";
+ out += "table";
+ out += space;
+ out += printIndex(n.descr.id);
+ out += ")";
+ } else {
+ throw new Error("printModuleExport: unknown type: " + n.descr.exportType);
+ }
+
+ out += ")";
+ return out;
+}
+
+function printIdentifier(n) {
+ return "$" + n.value;
+}
+
+function printIndex(n) {
+ if (n.type === "Identifier") {
+ return printIdentifier(n);
+ } else if (n.type === "NumberLiteral") {
+ return printNumberLiteral(n);
+ } else {
+ throw new Error("Unsupported index: " + n.type);
+ }
+}
+
+function printMemory(n) {
+ var out = "";
+ out += "(";
+ out += "memory";
+
+ if (n.id != null) {
+ out += space;
+ out += printIndex(n.id);
+ out += space;
+ }
+
+ out += printLimit(n.limits);
+ out += ")";
+ return out;
+}
+
+function printLimit(n) {
+ var out = "";
+ out += n.min + "";
+
+ if (n.max != null) {
+ out += space;
+ out += String(n.max);
+ }
+
+ return out;
+} \ No newline at end of file
diff --git a/node_modules/@webassemblyjs/wast-printer/package.json b/node_modules/@webassemblyjs/wast-printer/package.json
new file mode 100644
index 0000000..68195dd
--- /dev/null
+++ b/node_modules/@webassemblyjs/wast-printer/package.json
@@ -0,0 +1,69 @@
+{
+ "_from": "@webassemblyjs/wast-printer@1.9.0",
+ "_id": "@webassemblyjs/wast-printer@1.9.0",
+ "_inBundle": false,
+ "_integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "_location": "/@webassemblyjs/wast-printer",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "version",
+ "registry": true,
+ "raw": "@webassemblyjs/wast-printer@1.9.0",
+ "name": "@webassemblyjs/wast-printer",
+ "escapedName": "@webassemblyjs%2fwast-printer",
+ "scope": "@webassemblyjs",
+ "rawSpec": "1.9.0",
+ "saveSpec": null,
+ "fetchSpec": "1.9.0"
+ },
+ "_requiredBy": [
+ "/@webassemblyjs/helper-code-frame",
+ "/@webassemblyjs/wasm-edit"
+ ],
+ "_resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+ "_shasum": "4935d54c85fef637b00ce9f52377451d00d47899",
+ "_spec": "@webassemblyjs/wast-printer@1.9.0",
+ "_where": "/home/pruss/Dev/3-minute-website/node_modules/@webassemblyjs/helper-code-frame",
+ "author": {
+ "name": "Sven Sauleau"
+ },
+ "bugs": {
+ "url": "https://github.com/xtuc/webassemblyjs/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ },
+ "deprecated": false,
+ "description": "WebAssembly text format printer",
+ "devDependencies": {
+ "@webassemblyjs/helper-test-framework": "1.9.0"
+ },
+ "gitHead": "0440b420888c1f7701eb9762ec657775506b87d8",
+ "homepage": "https://github.com/xtuc/webassemblyjs#readme",
+ "keywords": [
+ "webassembly",
+ "javascript",
+ "ast",
+ "compiler",
+ "printer",
+ "wast"
+ ],
+ "license": "MIT",
+ "main": "lib/index.js",
+ "module": "esm/index.js",
+ "name": "@webassemblyjs/wast-printer",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/xtuc/webassemblyjs.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "version": "1.9.0"
+}