47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import { traverse, shiftSection } from "@webassemblyjs/ast";
 | |
| import { encodeU32 } from "@webassemblyjs/wasm-gen/lib/encoder";
 | |
| import { overrideBytesInBuffer } from "@webassemblyjs/helper-buffer";
 | |
| 
 | |
| function shiftFollowingSections(ast, _ref, deltaInSizeEncoding) {
 | |
|   var section = _ref.section;
 | |
|   // Once we hit our section every that is after needs to be shifted by the delta
 | |
|   var encounteredSection = false;
 | |
|   traverse(ast, {
 | |
|     SectionMetadata: function SectionMetadata(path) {
 | |
|       if (path.node.section === section) {
 | |
|         encounteredSection = true;
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       if (encounteredSection === true) {
 | |
|         shiftSection(ast, path.node, deltaInSizeEncoding);
 | |
|       }
 | |
|     }
 | |
|   });
 | |
| }
 | |
| 
 | |
| export function shrinkPaddedLEB128(ast, uint8Buffer) {
 | |
|   traverse(ast, {
 | |
|     SectionMetadata: function SectionMetadata(_ref2) {
 | |
|       var node = _ref2.node;
 | |
| 
 | |
|       /**
 | |
|        * Section size
 | |
|        */
 | |
|       {
 | |
|         var newu32Encoded = encodeU32(node.size.value);
 | |
|         var newu32EncodedLen = newu32Encoded.length;
 | |
|         var start = node.size.loc.start.column;
 | |
|         var end = node.size.loc.end.column;
 | |
|         var oldu32EncodedLen = end - start;
 | |
| 
 | |
|         if (newu32EncodedLen !== oldu32EncodedLen) {
 | |
|           var deltaInSizeEncoding = oldu32EncodedLen - newu32EncodedLen;
 | |
|           uint8Buffer = overrideBytesInBuffer(uint8Buffer, start, end, newu32Encoded);
 | |
|           shiftFollowingSections(ast, node, -deltaInSizeEncoding);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   });
 | |
|   return uint8Buffer;
 | |
| } |