UNPKG

0xweb

Version:

Contract package manager and other web3 tools

39 lines (37 loc) 2.02 kB
export const stringifyInstructions = (instructionTree: any, indentation = 0): string => { let instructionLines = ''; instructionTree.forEach((instruction: any) => { if (instruction.name === 'JUMPI' && instruction.false) { const condition = instruction.toString(); const falseInstructions = instruction.false.filter((i: any) => i.debugLevel > 0); if (falseInstructions.length === 1 && falseInstructions[0].name === 'JUMPI') { instructionLines += ' '.repeat(indentation) + 'if' + condition + ' {\n'; instructionLines += stringifyInstructions(instruction.true, indentation + 4); instructionLines += ' '.repeat(indentation) + '} else '; const elseOrElseIf = stringifyInstructions(instruction.false, indentation); if (elseOrElseIf.trim().startsWith('if')) { instructionLines += elseOrElseIf.trim() + '\n'; } else { instructionLines += '{\n' + elseOrElseIf .split('\n') .filter(l => l) .map(l => ' '.repeat(4) + l) .join('\n'); instructionLines += '\n' + ' '.repeat(indentation) + '}\n'; } } else { instructionLines += ' '.repeat(indentation) + 'if' + condition + ' {\n'; instructionLines += stringifyInstructions(instruction.true, indentation + 4); instructionLines += ' '.repeat(indentation) + '} else {\n'; instructionLines += stringifyInstructions(instruction.false, indentation + 4); instructionLines += ' '.repeat(indentation) + '}\n'; } } else { instructionLines += ' '.repeat(indentation) + instruction.toString() + '\n'; } }); return instructionLines; }; export default stringifyInstructions;