24 lines
772 B
TypeScript
24 lines
772 B
TypeScript
import { constants } from './constants';
|
|
|
|
const isPush = (inst: number) => inst >= constants.PUSH1 && inst <= constants.PUSH32;
|
|
|
|
const pushDataLength = (inst: number) => inst - constants.PUSH1 + 1;
|
|
|
|
const instructionLength = (inst: number) => (isPush(inst) ? pushDataLength(inst) + 1 : 1);
|
|
|
|
export const getPcToInstructionIndexMapping = (bytecode: Uint8Array) => {
|
|
const result: {
|
|
[programCounter: number]: number;
|
|
} = {};
|
|
let byteIndex = 0;
|
|
let instructionIndex = 0;
|
|
while (byteIndex < bytecode.length) {
|
|
const instruction = bytecode[byteIndex];
|
|
const length = instructionLength(instruction);
|
|
result[byteIndex] = instructionIndex;
|
|
byteIndex += length;
|
|
instructionIndex += 1;
|
|
}
|
|
return result;
|
|
};
|