function parseBlock(sizeSize) {
let size = parseNum(sizeSize, false, true);
let buffer = curBuffer.slice(curIndex, curIndex + size);
curIndex += size;
return buffer;
}
function parseVarBlock() {
let size = parseLeb128();
let buffer = curBuffer.slice(curIndex, curIndex + size);
curIndex += size;
return buffer;
}
function parseBytes(size) {
let buffer = curBuffer.slice(curIndex, curIndex + size);
curIndex += size;
return buffer;
}
let forms = {
[0x01]: { name: "DW_FORM_addr", parse: () => parseNum(4, false, true) },
[0x03]: { name: "DW_FORM_block2", parse: () => parseBlock(2) },
[0x04]: { name: "DW_FORM_block4", parse: () => parseBlock(4) },
[0x05]: { name: "DW_FORM_data2", parse: () => parseNum(2, false, true) },
[0x06]: { name: "DW_FORM_data4", parse: () => parseNum(4, false, true) },
[0x07]: { name: "DW_FORM_data8", parse: () => parseBytes(8) },
[0x08]: { name: "DW_FORM_string", parse: () => parseCString() },
[0x09]: { name: "DW_FORM_block", parse: () => parseVarBlock() },
[0x0a]: { name: "DW_FORM_block1", parse: () => parseBlock(1) },
[0x0b]: { name: "DW_FORM_data1", parse: () => parseNum(1, false, true) },
[0x0c]: { name: "DW_FORM_flag", parse: () => parseNum(1, false, true) },
[0x0d]: { name: "DW_FORM_sdata", parse: () => parseVarBlock() },
[0x0e]: { name: "DW_FORM_strp", parse: () => parseCStringAt(parseNum(4, false, true)) },
[0x0f]: { name: "DW_FORM_udata", parse: () => parseLeb128() },
[0x10]: { name: "DW_FORM_ref_addr", parse: () => parseNum(4, false, true) },
[0x11]: { name: "DW_FORM_ref1", parse: () => parseNum(1, false, true) },
[0x12]: { name: "DW_FORM_ref2", parse: () => parseNum(2, false, true) },
[0x13]: { name: "DW_FORM_ref4", parse: () => parseNum(4, false, true) },
[0x14]: { name: "DW_FORM_ref8", parse: () => parseBytes(8) },
[0x15]: { name: "DW_FORM_ref_udata", parse: () => parseVarBlock() },
[0x16]: { name: "DW_FORM_indirect", parse: () => getDwForm(parseLeb128(), tagName) },
[0x17]: { name: "DW_FORM_sec_offset", parse: () => parseNum(4, false, true) },
[0x18]: { name: "DW_FORM_exprloc", parse: () => parseVarBlock() },
[0x19]: { name: "DW_FORM_flag_present", parse: () => true },
[0x20]: { name: "DW_FORM_ref_sig8", parse: () => parseBytes(8) },
};