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.
47 lines
1.5 KiB
47 lines
1.5 KiB
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; |
|
} |