You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					168 lines
				
				4.7 KiB
			
		
		
			
		
	
	
					168 lines
				
				4.7 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								# @webassemblyjs/ast
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								> AST utils for webassemblyjs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Installation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```sh
							 | 
						||
| 
								 | 
							
								yarn add @webassemblyjs/ast
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Traverse
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import { traverse } from "@webassemblyjs/ast";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								traverse(ast, {
							 | 
						||
| 
								 | 
							
								  Module(path) {
							 | 
						||
| 
								 | 
							
								    console.log(path.node);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Instruction signatures
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import { signatures } from "@webassemblyjs/ast";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								console.log(signatures);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Path methods
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- `findParent: NodeLocator`
							 | 
						||
| 
								 | 
							
								- `replaceWith: Node => void`
							 | 
						||
| 
								 | 
							
								- `remove: () => void`
							 | 
						||
| 
								 | 
							
								- `insertBefore: Node => void`
							 | 
						||
| 
								 | 
							
								- `insertAfter: Node => void`
							 | 
						||
| 
								 | 
							
								- `stop: () => void`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### AST utils
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- function `module(id, fields, metadata)`
							 | 
						||
| 
								 | 
							
								- function `moduleMetadata(sections, functionNames, localNames)`
							 | 
						||
| 
								 | 
							
								- function `moduleNameMetadata(value)`
							 | 
						||
| 
								 | 
							
								- function `functionNameMetadata(value, index)`
							 | 
						||
| 
								 | 
							
								- function `localNameMetadata(value, localIndex, functionIndex)`
							 | 
						||
| 
								 | 
							
								- function `binaryModule(id, blob)`
							 | 
						||
| 
								 | 
							
								- function `quoteModule(id, string)`
							 | 
						||
| 
								 | 
							
								- function `sectionMetadata(section, startOffset, size, vectorOfSize)`
							 | 
						||
| 
								 | 
							
								- function `loopInstruction(label, resulttype, instr)`
							 | 
						||
| 
								 | 
							
								- function `instruction(id, args, namedArgs)`
							 | 
						||
| 
								 | 
							
								- function `objectInstruction(id, object, args, namedArgs)`
							 | 
						||
| 
								 | 
							
								- function `ifInstruction(testLabel, test, result, consequent, alternate)`
							 | 
						||
| 
								 | 
							
								- function `stringLiteral(value)`
							 | 
						||
| 
								 | 
							
								- function `numberLiteralFromRaw(value, raw)`
							 | 
						||
| 
								 | 
							
								- function `longNumberLiteral(value, raw)`
							 | 
						||
| 
								 | 
							
								- function `floatLiteral(value, nan, inf, raw)`
							 | 
						||
| 
								 | 
							
								- function `elem(table, offset, funcs)`
							 | 
						||
| 
								 | 
							
								- function `indexInFuncSection(index)`
							 | 
						||
| 
								 | 
							
								- function `valtypeLiteral(name)`
							 | 
						||
| 
								 | 
							
								- function `typeInstruction(id, functype)`
							 | 
						||
| 
								 | 
							
								- function `start(index)`
							 | 
						||
| 
								 | 
							
								- function `globalType(valtype, mutability)`
							 | 
						||
| 
								 | 
							
								- function `leadingComment(value)`
							 | 
						||
| 
								 | 
							
								- function `blockComment(value)`
							 | 
						||
| 
								 | 
							
								- function `data(memoryIndex, offset, init)`
							 | 
						||
| 
								 | 
							
								- function `global(globalType, init, name)`
							 | 
						||
| 
								 | 
							
								- function `table(elementType, limits, name, elements)`
							 | 
						||
| 
								 | 
							
								- function `memory(limits, id)`
							 | 
						||
| 
								 | 
							
								- function `funcImportDescr(id, signature)`
							 | 
						||
| 
								 | 
							
								- function `moduleImport(module, name, descr)`
							 | 
						||
| 
								 | 
							
								- function `moduleExportDescr(exportType, id)`
							 | 
						||
| 
								 | 
							
								- function `moduleExport(name, descr)`
							 | 
						||
| 
								 | 
							
								- function `limit(min, max)`
							 | 
						||
| 
								 | 
							
								- function `signature(params, results)`
							 | 
						||
| 
								 | 
							
								- function `program(body)`
							 | 
						||
| 
								 | 
							
								- function `identifier(value, raw)`
							 | 
						||
| 
								 | 
							
								- function `blockInstruction(label, instr, result)`
							 | 
						||
| 
								 | 
							
								- function `callInstruction(index, instrArgs)`
							 | 
						||
| 
								 | 
							
								- function `callIndirectInstruction(signature, intrs)`
							 | 
						||
| 
								 | 
							
								- function `byteArray(values)`
							 | 
						||
| 
								 | 
							
								- function `func(name, signature, body, isExternal, metadata)`
							 | 
						||
| 
								 | 
							
								- Constant`isModule`
							 | 
						||
| 
								 | 
							
								- Constant`isModuleMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`isModuleNameMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`isFunctionNameMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`isLocalNameMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`isBinaryModule`
							 | 
						||
| 
								 | 
							
								- Constant`isQuoteModule`
							 | 
						||
| 
								 | 
							
								- Constant`isSectionMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`isLoopInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`isInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`isObjectInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`isIfInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`isStringLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`isNumberLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`isLongNumberLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`isFloatLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`isElem`
							 | 
						||
| 
								 | 
							
								- Constant`isIndexInFuncSection`
							 | 
						||
| 
								 | 
							
								- Constant`isValtypeLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`isTypeInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`isStart`
							 | 
						||
| 
								 | 
							
								- Constant`isGlobalType`
							 | 
						||
| 
								 | 
							
								- Constant`isLeadingComment`
							 | 
						||
| 
								 | 
							
								- Constant`isBlockComment`
							 | 
						||
| 
								 | 
							
								- Constant`isData`
							 | 
						||
| 
								 | 
							
								- Constant`isGlobal`
							 | 
						||
| 
								 | 
							
								- Constant`isTable`
							 | 
						||
| 
								 | 
							
								- Constant`isMemory`
							 | 
						||
| 
								 | 
							
								- Constant`isFuncImportDescr`
							 | 
						||
| 
								 | 
							
								- Constant`isModuleImport`
							 | 
						||
| 
								 | 
							
								- Constant`isModuleExportDescr`
							 | 
						||
| 
								 | 
							
								- Constant`isModuleExport`
							 | 
						||
| 
								 | 
							
								- Constant`isLimit`
							 | 
						||
| 
								 | 
							
								- Constant`isSignature`
							 | 
						||
| 
								 | 
							
								- Constant`isProgram`
							 | 
						||
| 
								 | 
							
								- Constant`isIdentifier`
							 | 
						||
| 
								 | 
							
								- Constant`isBlockInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`isCallInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`isCallIndirectInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`isByteArray`
							 | 
						||
| 
								 | 
							
								- Constant`isFunc`
							 | 
						||
| 
								 | 
							
								- Constant`assertModule`
							 | 
						||
| 
								 | 
							
								- Constant`assertModuleMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`assertModuleNameMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`assertFunctionNameMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`assertLocalNameMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`assertBinaryModule`
							 | 
						||
| 
								 | 
							
								- Constant`assertQuoteModule`
							 | 
						||
| 
								 | 
							
								- Constant`assertSectionMetadata`
							 | 
						||
| 
								 | 
							
								- Constant`assertLoopInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`assertInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`assertObjectInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`assertIfInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`assertStringLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`assertNumberLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`assertLongNumberLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`assertFloatLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`assertElem`
							 | 
						||
| 
								 | 
							
								- Constant`assertIndexInFuncSection`
							 | 
						||
| 
								 | 
							
								- Constant`assertValtypeLiteral`
							 | 
						||
| 
								 | 
							
								- Constant`assertTypeInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`assertStart`
							 | 
						||
| 
								 | 
							
								- Constant`assertGlobalType`
							 | 
						||
| 
								 | 
							
								- Constant`assertLeadingComment`
							 | 
						||
| 
								 | 
							
								- Constant`assertBlockComment`
							 | 
						||
| 
								 | 
							
								- Constant`assertData`
							 | 
						||
| 
								 | 
							
								- Constant`assertGlobal`
							 | 
						||
| 
								 | 
							
								- Constant`assertTable`
							 | 
						||
| 
								 | 
							
								- Constant`assertMemory`
							 | 
						||
| 
								 | 
							
								- Constant`assertFuncImportDescr`
							 | 
						||
| 
								 | 
							
								- Constant`assertModuleImport`
							 | 
						||
| 
								 | 
							
								- Constant`assertModuleExportDescr`
							 | 
						||
| 
								 | 
							
								- Constant`assertModuleExport`
							 | 
						||
| 
								 | 
							
								- Constant`assertLimit`
							 | 
						||
| 
								 | 
							
								- Constant`assertSignature`
							 | 
						||
| 
								 | 
							
								- Constant`assertProgram`
							 | 
						||
| 
								 | 
							
								- Constant`assertIdentifier`
							 | 
						||
| 
								 | 
							
								- Constant`assertBlockInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`assertCallInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`assertCallIndirectInstruction`
							 | 
						||
| 
								 | 
							
								- Constant`assertByteArray`
							 | 
						||
| 
								 | 
							
								- Constant`assertFunc`
							 | 
						||
| 
								 | 
							
								
							 |