Spaces:
Sleeping
Sleeping
File size: 1,330 Bytes
4cadbaf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import { traverse, getSectionMetadatas, shiftSection } from "@webassemblyjs/ast";
import { overrideBytesInBuffer } from "@webassemblyjs/helper-buffer";
export function removeSections(ast, uint8Buffer, section) {
var sectionMetadatas = getSectionMetadatas(ast, section);
if (sectionMetadatas.length === 0) {
throw new Error("Section metadata not found");
}
return sectionMetadatas.reverse().reduce(function (uint8Buffer, sectionMetadata) {
var startsIncludingId = sectionMetadata.startOffset - 1;
var ends = section === "start" ? sectionMetadata.size.loc.end.column + 1 : sectionMetadata.startOffset + sectionMetadata.size.value + 1;
var delta = -(ends - startsIncludingId);
/**
* update AST
*/
// 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 path.remove();
}
if (encounteredSection === true) {
shiftSection(ast, path.node, delta);
}
}
}); // replacement is nothing
var replacement = [];
return overrideBytesInBuffer(uint8Buffer, startsIncludingId, ends, replacement);
}, uint8Buffer);
} |