@webassemblyjs/ast
Advanced tools
Comparing version 1.5.2 to 1.5.3
@@ -143,6 +143,3 @@ var definitions = {}; | ||
}); | ||
defineType("Instruction", { | ||
// TODO: ideally the naming of this type would be consistent across AST / Flow | ||
astTypeName: "Instr", | ||
flowTypeName: "GenericInstruction", | ||
defineType("Instr", { | ||
unionType: ["Expression", "Instruction"], | ||
@@ -153,25 +150,4 @@ fields: { | ||
}, | ||
args: { | ||
array: true, | ||
type: "Expression", | ||
// TODO: should this be an optional property? | ||
default: "[]" | ||
}, | ||
namedArgs: { | ||
object: { | ||
optional: true, | ||
type: "Object", | ||
// TODO: should this be an optional property? | ||
default: "{}" | ||
} | ||
} | ||
}); | ||
defineType("ObjectInstruction", { | ||
// TODO: ideally the naming of this type would be consistent across AST / Flow | ||
astTypeName: "Instr", | ||
unionType: ["Expression", "Instruction"], | ||
fields: { | ||
id: { | ||
type: "string" | ||
}, | ||
object: { | ||
type: "Valtype" | ||
@@ -181,11 +157,7 @@ }, | ||
array: true, | ||
type: "Expression", | ||
// TODO: should this be an optional property? | ||
default: "[]" | ||
type: "Expression" | ||
}, | ||
namedArgs: { | ||
optional: true, | ||
type: "Object", | ||
// TODO: should this be an optional property? | ||
default: "{}" | ||
type: "Object" | ||
} | ||
@@ -192,0 +164,0 @@ } |
425
lib/index.js
@@ -6,257 +6,74 @@ "use strict"; | ||
}); | ||
exports.signatureForOpcode = signatureForOpcode; | ||
exports.numberLiteral = numberLiteral; | ||
exports.getUniqueNameGenerator = getUniqueNameGenerator; | ||
exports.withLoc = withLoc; | ||
exports.withRaw = withRaw; | ||
exports.funcParam = funcParam; | ||
exports.indexLiteral = indexLiteral; | ||
exports.memIndexLiteral = memIndexLiteral; | ||
exports.isAnonymous = isAnonymous; | ||
Object.defineProperty(exports, "signatures", { | ||
var _exportNames = { | ||
numberLiteralFromRaw: true, | ||
withLoc: true, | ||
withRaw: true, | ||
funcParam: true, | ||
indexLiteral: true, | ||
memIndexLiteral: true, | ||
instruction: true, | ||
objectInstruction: true, | ||
traverse: true, | ||
traverseWithHooks: true, | ||
signatures: true, | ||
getSectionMetadata: true, | ||
sortSectionMetadata: true, | ||
orderedInsertNode: true, | ||
assertHasLoc: true, | ||
getEndOfSection: true, | ||
shiftSection: true, | ||
shiftLoc: true, | ||
isAnonymous: true, | ||
getUniqueNameGenerator: true, | ||
signatureForOpcode: true, | ||
cloneNode: true | ||
}; | ||
Object.defineProperty(exports, "numberLiteralFromRaw", { | ||
enumerable: true, | ||
get: function get() { | ||
return _signatures.signatures; | ||
return _nodeHelpers.numberLiteralFromRaw; | ||
} | ||
}); | ||
Object.defineProperty(exports, "module", { | ||
Object.defineProperty(exports, "withLoc", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.module; | ||
return _nodeHelpers.withLoc; | ||
} | ||
}); | ||
Object.defineProperty(exports, "moduleMetadata", { | ||
Object.defineProperty(exports, "withRaw", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.moduleMetadata; | ||
return _nodeHelpers.withRaw; | ||
} | ||
}); | ||
Object.defineProperty(exports, "functionNameMetadata", { | ||
Object.defineProperty(exports, "funcParam", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.functionNameMetadata; | ||
return _nodeHelpers.funcParam; | ||
} | ||
}); | ||
Object.defineProperty(exports, "moduleNameMetadata", { | ||
Object.defineProperty(exports, "indexLiteral", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.moduleNameMetadata; | ||
return _nodeHelpers.indexLiteral; | ||
} | ||
}); | ||
Object.defineProperty(exports, "localNameMetadata", { | ||
Object.defineProperty(exports, "memIndexLiteral", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.localNameMetadata; | ||
return _nodeHelpers.memIndexLiteral; | ||
} | ||
}); | ||
Object.defineProperty(exports, "quoteModule", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.quoteModule; | ||
} | ||
}); | ||
Object.defineProperty(exports, "binaryModule", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.binaryModule; | ||
} | ||
}); | ||
Object.defineProperty(exports, "sectionMetadata", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.sectionMetadata; | ||
} | ||
}); | ||
Object.defineProperty(exports, "loopInstruction", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.loopInstruction; | ||
} | ||
}); | ||
Object.defineProperty(exports, "instruction", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.instruction; | ||
return _nodeHelpers.instruction; | ||
} | ||
}); | ||
Object.defineProperty(exports, "ifInstruction", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.ifInstruction; | ||
} | ||
}); | ||
Object.defineProperty(exports, "longNumberLiteral", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.longNumberLiteral; | ||
} | ||
}); | ||
Object.defineProperty(exports, "stringLiteral", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.stringLiteral; | ||
} | ||
}); | ||
Object.defineProperty(exports, "floatLiteral", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.floatLiteral; | ||
} | ||
}); | ||
Object.defineProperty(exports, "indexInFuncSection", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.indexInFuncSection; | ||
} | ||
}); | ||
Object.defineProperty(exports, "elem", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.elem; | ||
} | ||
}); | ||
Object.defineProperty(exports, "start", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.start; | ||
} | ||
}); | ||
Object.defineProperty(exports, "typeInstruction", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.typeInstruction; | ||
} | ||
}); | ||
Object.defineProperty(exports, "leadingComment", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.leadingComment; | ||
} | ||
}); | ||
Object.defineProperty(exports, "blockComment", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.blockComment; | ||
} | ||
}); | ||
Object.defineProperty(exports, "globalType", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.globalType; | ||
} | ||
}); | ||
Object.defineProperty(exports, "global", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.global; | ||
} | ||
}); | ||
Object.defineProperty(exports, "data", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.data; | ||
} | ||
}); | ||
Object.defineProperty(exports, "memory", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.memory; | ||
} | ||
}); | ||
Object.defineProperty(exports, "table", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.table; | ||
} | ||
}); | ||
Object.defineProperty(exports, "moduleImport", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.moduleImport; | ||
} | ||
}); | ||
Object.defineProperty(exports, "program", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.program; | ||
} | ||
}); | ||
Object.defineProperty(exports, "callInstruction", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.callInstruction; | ||
} | ||
}); | ||
Object.defineProperty(exports, "blockInstruction", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.blockInstruction; | ||
} | ||
}); | ||
Object.defineProperty(exports, "identifier", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.identifier; | ||
} | ||
}); | ||
Object.defineProperty(exports, "byteArray", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.byteArray; | ||
} | ||
}); | ||
Object.defineProperty(exports, "moduleExport", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.moduleExport; | ||
} | ||
}); | ||
Object.defineProperty(exports, "moduleExportDescr", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.moduleExportDescr; | ||
} | ||
}); | ||
Object.defineProperty(exports, "callIndirectInstruction", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.callIndirectInstruction; | ||
} | ||
}); | ||
Object.defineProperty(exports, "signature", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.signature; | ||
} | ||
}); | ||
Object.defineProperty(exports, "funcImportDescr", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.funcImportDescr; | ||
} | ||
}); | ||
Object.defineProperty(exports, "func", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.func; | ||
} | ||
}); | ||
Object.defineProperty(exports, "objectInstruction", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.objectInstruction; | ||
return _nodeHelpers.objectInstruction; | ||
} | ||
}); | ||
Object.defineProperty(exports, "valtype", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.valtypeLiteral; | ||
} | ||
}); | ||
Object.defineProperty(exports, "limits", { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes.limit; | ||
} | ||
}); | ||
Object.defineProperty(exports, "traverse", { | ||
@@ -274,6 +91,6 @@ enumerable: true, | ||
}); | ||
Object.defineProperty(exports, "isInstruction", { | ||
Object.defineProperty(exports, "signatures", { | ||
enumerable: true, | ||
get: function get() { | ||
return _utils.isInstruction; | ||
return _signatures.signatures; | ||
} | ||
@@ -323,2 +140,20 @@ }); | ||
}); | ||
Object.defineProperty(exports, "isAnonymous", { | ||
enumerable: true, | ||
get: function get() { | ||
return _utils.isAnonymous; | ||
} | ||
}); | ||
Object.defineProperty(exports, "getUniqueNameGenerator", { | ||
enumerable: true, | ||
get: function get() { | ||
return _utils.getUniqueNameGenerator; | ||
} | ||
}); | ||
Object.defineProperty(exports, "signatureForOpcode", { | ||
enumerable: true, | ||
get: function get() { | ||
return _utils.signatureForOpcode; | ||
} | ||
}); | ||
Object.defineProperty(exports, "cloneNode", { | ||
@@ -331,139 +166,23 @@ enumerable: true, | ||
var _signatures = require("./signatures"); | ||
var _nodes = require("./nodes"); | ||
var _traverse = require("./traverse"); | ||
var _utils = require("./utils"); | ||
var _clone = require("./clone"); | ||
var _require = require("@webassemblyjs/wast-parser/lib/number-literals"), | ||
parse32F = _require.parse32F, | ||
parse64F = _require.parse64F, | ||
parse32I = _require.parse32I, | ||
parse64I = _require.parse64I, | ||
parseU32 = _require.parseU32, | ||
isNanLiteral = _require.isNanLiteral, | ||
isInfLiteral = _require.isInfLiteral; | ||
function signatureForOpcode(object, name) { | ||
var opcodeName = name; | ||
if (object !== undefined && object !== "") { | ||
opcodeName = object + "." + name; | ||
} | ||
var sign = _signatures.signatures[opcodeName]; | ||
if (sign == undefined) { | ||
// TODO: Uncomment this when br_table and others has been done | ||
//throw new Error("Invalid opcode: "+opcodeName); | ||
return [object, object]; | ||
} | ||
return sign[0]; | ||
} | ||
function numberLiteral(rawValue) { | ||
var instructionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "i32"; | ||
var original = rawValue; // Remove numeric separators _ | ||
if (typeof rawValue === "string") { | ||
rawValue = rawValue.replace(/_/g, ""); | ||
} | ||
if (typeof rawValue === "number") { | ||
return (0, _nodes.numberLiteral)(rawValue, String(original)); | ||
} else { | ||
switch (instructionType) { | ||
case "i32": | ||
{ | ||
return (0, _nodes.numberLiteral)(parse32I(rawValue), String(original)); | ||
} | ||
case "u32": | ||
{ | ||
return (0, _nodes.numberLiteral)(parseU32(rawValue), String(original)); | ||
} | ||
case "i64": | ||
{ | ||
return (0, _nodes.longNumberLiteral)(parse64I(rawValue), String(original)); | ||
} | ||
case "f32": | ||
{ | ||
return (0, _nodes.floatLiteral)(parse32F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original)); | ||
} | ||
// f64 | ||
default: | ||
{ | ||
return (0, _nodes.floatLiteral)(parse64F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original)); | ||
} | ||
Object.keys(_nodes).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return _nodes[key]; | ||
} | ||
} | ||
} | ||
}); | ||
}); | ||
function getUniqueNameGenerator() { | ||
var inc = {}; | ||
return function () { | ||
var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp"; | ||
var _nodeHelpers = require("./node-helpers.js"); | ||
if (!(prefix in inc)) { | ||
inc[prefix] = 0; | ||
} else { | ||
inc[prefix] = inc[prefix] + 1; | ||
} | ||
var _traverse = require("./traverse"); | ||
return prefix + "_" + inc[prefix]; | ||
}; | ||
} | ||
/** | ||
* Decorators | ||
*/ | ||
var _signatures = require("./signatures"); | ||
var _utils = require("./utils"); | ||
function withLoc(n, end, start) { | ||
var loc = { | ||
start: start, | ||
end: end | ||
}; | ||
n.loc = loc; | ||
return n; | ||
} | ||
function withRaw(n, raw) { | ||
// $FlowIgnore | ||
n.raw = raw; | ||
return n; | ||
} | ||
/** | ||
* Import | ||
*/ | ||
function funcParam(valtype, id) { | ||
return { | ||
id: id, | ||
valtype: valtype | ||
}; | ||
} | ||
function indexLiteral(value) { | ||
// $FlowIgnore | ||
var x = numberLiteral(value, "u32"); | ||
return x; | ||
} | ||
function memIndexLiteral(value) { | ||
// $FlowIgnore | ||
var x = numberLiteral(value, "u32"); | ||
return x; | ||
} | ||
function isAnonymous(ident) { | ||
return ident.raw === ""; | ||
} | ||
var _clone = require("./clone"); |
@@ -15,4 +15,3 @@ "use strict"; | ||
exports.loopInstruction = loopInstruction; | ||
exports.instruction = instruction; | ||
exports.objectInstruction = objectInstruction; | ||
exports.instr = instr; | ||
exports.ifInstruction = ifInstruction; | ||
@@ -48,3 +47,3 @@ exports.stringLiteral = stringLiteral; | ||
exports.func = func; | ||
exports.assertFunc = exports.assertByteArray = exports.assertCallIndirectInstruction = exports.assertCallInstruction = exports.assertBlockInstruction = exports.assertIdentifier = exports.assertProgram = exports.assertSignature = exports.assertLimit = exports.assertModuleExport = exports.assertModuleExportDescr = exports.assertModuleImport = exports.assertFuncImportDescr = exports.assertMemory = exports.assertTable = exports.assertGlobal = exports.assertData = exports.assertBlockComment = exports.assertLeadingComment = exports.assertGlobalType = exports.assertStart = exports.assertTypeInstruction = exports.assertValtypeLiteral = exports.assertIndexInFuncSection = exports.assertElem = exports.assertFloatLiteral = exports.assertLongNumberLiteral = exports.assertNumberLiteral = exports.assertStringLiteral = exports.assertIfInstruction = exports.assertObjectInstruction = exports.assertInstruction = exports.assertLoopInstruction = exports.assertSectionMetadata = exports.assertQuoteModule = exports.assertBinaryModule = exports.assertLocalNameMetadata = exports.assertFunctionNameMetadata = exports.assertModuleNameMetadata = exports.assertModuleMetadata = exports.assertModule = exports.isFunc = exports.isByteArray = exports.isCallIndirectInstruction = exports.isCallInstruction = exports.isBlockInstruction = exports.isIdentifier = exports.isProgram = exports.isSignature = exports.isLimit = exports.isModuleExport = exports.isModuleExportDescr = exports.isModuleImport = exports.isFuncImportDescr = exports.isMemory = exports.isTable = exports.isGlobal = exports.isData = exports.isBlockComment = exports.isLeadingComment = exports.isGlobalType = exports.isStart = exports.isTypeInstruction = exports.isValtypeLiteral = exports.isIndexInFuncSection = exports.isElem = exports.isFloatLiteral = exports.isLongNumberLiteral = exports.isNumberLiteral = exports.isStringLiteral = exports.isIfInstruction = exports.isObjectInstruction = exports.isInstruction = exports.isLoopInstruction = exports.isSectionMetadata = exports.isQuoteModule = exports.isBinaryModule = exports.isLocalNameMetadata = exports.isFunctionNameMetadata = exports.isModuleNameMetadata = exports.isModuleMetadata = exports.isModule = void 0; | ||
exports.assertFunc = exports.assertByteArray = exports.assertCallIndirectInstruction = exports.assertCallInstruction = exports.assertBlockInstruction = exports.assertIdentifier = exports.assertProgram = exports.assertSignature = exports.assertLimit = exports.assertModuleExport = exports.assertModuleExportDescr = exports.assertModuleImport = exports.assertFuncImportDescr = exports.assertMemory = exports.assertTable = exports.assertGlobal = exports.assertData = exports.assertBlockComment = exports.assertLeadingComment = exports.assertGlobalType = exports.assertStart = exports.assertTypeInstruction = exports.assertValtypeLiteral = exports.assertIndexInFuncSection = exports.assertElem = exports.assertFloatLiteral = exports.assertLongNumberLiteral = exports.assertNumberLiteral = exports.assertStringLiteral = exports.assertIfInstruction = exports.assertInstr = exports.assertLoopInstruction = exports.assertSectionMetadata = exports.assertQuoteModule = exports.assertBinaryModule = exports.assertLocalNameMetadata = exports.assertFunctionNameMetadata = exports.assertModuleNameMetadata = exports.assertModuleMetadata = exports.assertModule = exports.isImportDescr = exports.isNumericLiteral = exports.isExpression = exports.isInstruction = exports.isFunc = exports.isByteArray = exports.isCallIndirectInstruction = exports.isCallInstruction = exports.isBlockInstruction = exports.isIdentifier = exports.isProgram = exports.isSignature = exports.isLimit = exports.isModuleExport = exports.isModuleExportDescr = exports.isModuleImport = exports.isFuncImportDescr = exports.isMemory = exports.isTable = exports.isGlobal = exports.isData = exports.isBlockComment = exports.isLeadingComment = exports.isGlobalType = exports.isStart = exports.isTypeInstruction = exports.isValtypeLiteral = exports.isIndexInFuncSection = exports.isElem = exports.isFloatLiteral = exports.isLongNumberLiteral = exports.isNumberLiteral = exports.isStringLiteral = exports.isIfInstruction = exports.isInstr = exports.isLoopInstruction = exports.isSectionMetadata = exports.isQuoteModule = exports.isBinaryModule = exports.isLocalNameMetadata = exports.isFunctionNameMetadata = exports.isModuleNameMetadata = exports.isModuleMetadata = exports.isModule = void 0; | ||
@@ -204,5 +203,3 @@ 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 instruction(id) { | ||
var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; | ||
var namedArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | ||
function instr(id, object, args, namedArgs) { | ||
assert(typeof id === "string"); | ||
@@ -216,22 +213,7 @@ assert(_typeof(args) === "object" && typeof args.length !== "undefined"); | ||
if (Object.keys(namedArgs).length !== 0) { | ||
node.namedArgs = namedArgs; | ||
if (typeof object !== "undefined") { | ||
node.object = object; | ||
} | ||
return node; | ||
} | ||
function objectInstruction(id, object) { | ||
var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; | ||
var namedArgs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | ||
assert(typeof id === "string"); | ||
assert(_typeof(args) === "object" && typeof args.length !== "undefined"); | ||
var node = { | ||
type: "Instr", | ||
id: id, | ||
object: object, | ||
args: args | ||
}; | ||
if (Object.keys(namedArgs).length !== 0) { | ||
if (typeof namedArgs !== "undefined" && Object.keys(namedArgs).length !== 0) { | ||
node.namedArgs = namedArgs; | ||
@@ -637,6 +619,4 @@ } | ||
exports.isLoopInstruction = isLoopInstruction; | ||
var isInstruction = isTypeOf("GenericInstruction"); | ||
exports.isInstruction = isInstruction; | ||
var isObjectInstruction = isTypeOf("ObjectInstruction"); | ||
exports.isObjectInstruction = isObjectInstruction; | ||
var isInstr = isTypeOf("Instr"); | ||
exports.isInstr = isInstr; | ||
var isIfInstruction = isTypeOf("IfInstruction"); | ||
@@ -702,2 +682,26 @@ exports.isIfInstruction = isIfInstruction; | ||
exports.isFunc = isFunc; | ||
var isInstruction = function isInstruction(node) { | ||
return isLoopInstruction(node) || isInstr(node) || isIfInstruction(node) || isTypeInstruction(node) || isBlockInstruction(node) || isCallInstruction(node) || isCallIndirectInstruction(node); | ||
}; | ||
exports.isInstruction = isInstruction; | ||
var isExpression = function isExpression(node) { | ||
return isInstr(node) || isStringLiteral(node) || isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node) || isValtypeLiteral(node) || isIdentifier(node); | ||
}; | ||
exports.isExpression = isExpression; | ||
var isNumericLiteral = function isNumericLiteral(node) { | ||
return isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node); | ||
}; | ||
exports.isNumericLiteral = isNumericLiteral; | ||
var isImportDescr = function isImportDescr(node) { | ||
return isGlobalType(node) || isTable(node) || isMemory(node) || isFuncImportDescr(node); | ||
}; | ||
exports.isImportDescr = isImportDescr; | ||
var assertModule = assertTypeOf("Module"); | ||
@@ -721,6 +725,4 @@ exports.assertModule = assertModule; | ||
exports.assertLoopInstruction = assertLoopInstruction; | ||
var assertInstruction = assertTypeOf("GenericInstruction"); | ||
exports.assertInstruction = assertInstruction; | ||
var assertObjectInstruction = assertTypeOf("ObjectInstruction"); | ||
exports.assertObjectInstruction = assertObjectInstruction; | ||
var assertInstr = assertTypeOf("Instr"); | ||
exports.assertInstr = assertInstr; | ||
var assertIfInstruction = assertTypeOf("IfInstruction"); | ||
@@ -727,0 +729,0 @@ exports.assertIfInstruction = assertIfInstruction; |
@@ -126,3 +126,13 @@ "use strict"; | ||
(0, _index.traverse)(funcNode, { | ||
Instr: function Instr(instrPath) { | ||
Instr: function (_Instr) { | ||
function Instr(_x6) { | ||
return _Instr.apply(this, arguments); | ||
} | ||
Instr.toString = function () { | ||
return _Instr.toString(); | ||
}; | ||
return Instr; | ||
}(function (instrPath) { | ||
var instrNode = instrPath.node; | ||
@@ -170,5 +180,5 @@ | ||
} | ||
}, | ||
}), | ||
CallInstruction: function (_CallInstruction) { | ||
function CallInstruction(_x6) { | ||
function CallInstruction(_x7) { | ||
return _CallInstruction.apply(this, arguments); | ||
@@ -175,0 +185,0 @@ } |
@@ -6,5 +6,5 @@ "use strict"; | ||
}); | ||
exports.isAnonymous = isAnonymous; | ||
exports.getSectionMetadata = getSectionMetadata; | ||
exports.sortSectionMetadata = sortSectionMetadata; | ||
exports.isInstruction = isInstruction; | ||
exports.orderedInsertNode = orderedInsertNode; | ||
@@ -15,3 +15,7 @@ exports.assertHasLoc = assertHasLoc; | ||
exports.shiftSection = shiftSection; | ||
exports.signatureForOpcode = signatureForOpcode; | ||
exports.getUniqueNameGenerator = getUniqueNameGenerator; | ||
var _signatures = require("./signatures"); | ||
var _traverse = require("./traverse"); | ||
@@ -27,2 +31,6 @@ | ||
function isAnonymous(ident) { | ||
return ident.raw === ""; | ||
} | ||
function getSectionMetadata(ast, name) { | ||
@@ -71,6 +79,2 @@ var section; | ||
function isInstruction(n) { | ||
return n.type === "Instr" || n.type === "CallInstruction" || n.type === "CallIndirectInstruction" || n.type === "BlockInstruction" || n.type === "LoopInstruction" || n.type === "IfInstruction"; | ||
} | ||
function orderedInsertNode(m, n) { | ||
@@ -156,2 +160,35 @@ assertHasLoc(n); | ||
}); | ||
} | ||
function signatureForOpcode(object, name) { | ||
var opcodeName = name; | ||
if (object !== undefined && object !== "") { | ||
opcodeName = object + "." + name; | ||
} | ||
var sign = _signatures.signatures[opcodeName]; | ||
if (sign == undefined) { | ||
// TODO: Uncomment this when br_table and others has been done | ||
//throw new Error("Invalid opcode: "+opcodeName); | ||
return [object, object]; | ||
} | ||
return sign[0]; | ||
} | ||
function getUniqueNameGenerator() { | ||
var inc = {}; | ||
return function () { | ||
var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp"; | ||
if (!(prefix in inc)) { | ||
inc[prefix] = 0; | ||
} else { | ||
inc[prefix] = inc[prefix] + 1; | ||
} | ||
return prefix + "_" + inc[prefix]; | ||
}; | ||
} |
{ | ||
"name": "@webassemblyjs/ast", | ||
"version": "1.5.2", | ||
"version": "1.5.3", | ||
"description": "AST utils for webassemblyjs", | ||
@@ -14,6 +14,6 @@ "keywords": [ | ||
"dependencies": { | ||
"@webassemblyjs/helper-wasm-bytecode": "1.5.2", | ||
"@webassemblyjs/wast-parser": "1.5.2", | ||
"@webassemblyjs/helper-wasm-bytecode": "1.5.3", | ||
"@webassemblyjs/wast-parser": "1.5.3", | ||
"debug": "^3.1.0", | ||
"webassemblyjs": "1.5.2" | ||
"webassemblyjs": "1.5.3" | ||
}, | ||
@@ -20,0 +20,0 @@ "repository": { |
@@ -48,3 +48,3 @@ # @webassemblyjs/ast | ||
- function `stringLiteral(value)` | ||
- function `numberLiteral(value, raw)` | ||
- function `numberLiteralFromRaw(value, raw)` | ||
- function `longNumberLiteral(value, raw)` | ||
@@ -51,0 +51,0 @@ - function `floatLiteral(value, nan, inf, raw)` |
const definitions = require("../src/definitions"); | ||
const flatMap = require("array.prototype.flatmap"); | ||
const { | ||
@@ -6,3 +7,4 @@ typeSignature, | ||
mapProps, | ||
filterProps | ||
filterProps, | ||
unique | ||
} = require("./util"); | ||
@@ -68,3 +70,5 @@ | ||
return ` | ||
if (Object.keys(${meta.name}).length !== 0) { | ||
if (typeof ${meta.name} !== "undefined" && Object.keys(${ | ||
meta.name | ||
}).length !== 0) { | ||
node.${meta.name} = ${meta.name}; | ||
@@ -100,3 +104,3 @@ } | ||
const node: ${typeDef.flowTypeName || typeDef.name} = { | ||
type: "${typeDef.astTypeName || typeDef.name}", | ||
type: "${typeDef.name}", | ||
${constants.concat(fields).join(",")} | ||
@@ -143,3 +147,3 @@ } | ||
${params(filterProps(typeDefinition.fields, f => !f.constant))} | ||
): ${typeDefinition.flowTypeName || typeDefinition.name} { | ||
): ${typeDefinition.name} { | ||
@@ -158,6 +162,22 @@ ${assertParams(filterProps(typeDefinition.fields, f => !f.constant))} | ||
export const is${typeDefinition.name} = | ||
isTypeOf("${typeDefinition.flowTypeName || typeDefinition.name}"); | ||
isTypeOf("${typeDefinition.name}"); | ||
`); | ||
}); | ||
// Node union type testers | ||
const unionTypes = unique( | ||
flatMap(mapProps(definitions).filter(d => d.unionType), d => d.unionType) | ||
); | ||
unionTypes.forEach(unionType => { | ||
stdout.write( | ||
` | ||
export const is${unionType} = (node: Node) => ` + | ||
mapProps(definitions) | ||
.filter(d => d.unionType && d.unionType.includes(unionType)) | ||
.map(d => `is${d.name}(node) `) | ||
.join("||") + | ||
";\n\n" | ||
); | ||
}); | ||
// Node assertion | ||
@@ -167,3 +187,3 @@ iterateProps(definitions, typeDefinition => { | ||
export const assert${typeDefinition.name} = | ||
assertTypeOf("${typeDefinition.flowTypeName || typeDefinition.name}"); | ||
assertTypeOf("${typeDefinition.name}"); | ||
`); | ||
@@ -170,0 +190,0 @@ }); |
const definitions = require("../src/definitions"); | ||
const flatMap = require("array.prototype.flatmap"); | ||
const { typeSignature, mapProps, iterateProps } = require("./util"); | ||
const { typeSignature, mapProps, iterateProps, unique } = require("./util"); | ||
const stdout = process.stdout; | ||
const unique = items => Array.from(new Set(items)); | ||
function params(fields) { | ||
@@ -44,5 +42,5 @@ return mapProps(fields) | ||
iterateProps(definitions, typeDef => { | ||
stdout.write(`type ${typeDef.flowTypeName || typeDef.name} = { | ||
stdout.write(`type ${typeDef.name} = { | ||
...${typeDef.extends || "BaseNode"}, | ||
type: "${typeDef.astTypeName || typeDef.name}", | ||
type: "${typeDef.name}", | ||
${params(typeDef.fields)} | ||
@@ -49,0 +47,0 @@ };\n\n`); |
@@ -30,2 +30,4 @@ function iterateProps(obj, iterator) { | ||
const unique = items => Array.from(new Set(items)); | ||
module.exports = { | ||
@@ -35,3 +37,4 @@ iterateProps, | ||
filterProps, | ||
typeSignature | ||
typeSignature, | ||
unique | ||
}; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
17
74758
2430
+ Added@webassemblyjs/floating-point-hex-parser@1.5.3(transitive)
+ Added@webassemblyjs/helper-code-frame@1.5.3(transitive)
+ Added@webassemblyjs/helper-fsm@1.5.3(transitive)
+ Added@webassemblyjs/helper-wasm-bytecode@1.5.3(transitive)
+ Added@webassemblyjs/leb128@1.5.3(transitive)
+ Added@webassemblyjs/validation@1.5.3(transitive)
+ Added@webassemblyjs/wasm-parser@1.5.3(transitive)
+ Added@webassemblyjs/wast-parser@1.5.3(transitive)
+ Added@webassemblyjs/wast-printer@1.5.3(transitive)
+ Addedwebassemblyjs@1.5.3(transitive)
- Removed@webassemblyjs/floating-point-hex-parser@1.5.2(transitive)
- Removed@webassemblyjs/helper-code-frame@1.5.2(transitive)
- Removed@webassemblyjs/helper-fsm@1.5.2(transitive)
- Removed@webassemblyjs/helper-wasm-bytecode@1.5.2(transitive)
- Removed@webassemblyjs/leb128@1.5.2(transitive)
- Removed@webassemblyjs/validation@1.5.2(transitive)
- Removed@webassemblyjs/wasm-parser@1.5.2(transitive)
- Removed@webassemblyjs/wast-parser@1.5.2(transitive)
- Removed@webassemblyjs/wast-printer@1.5.2(transitive)
- Removedwebassemblyjs@1.5.2(transitive)
Updatedwebassemblyjs@1.5.3