parent
763000ebaa
commit
18525f620d
@ -1,66 +1,65 @@ |
|||||||
'use strict' |
'use strict' |
||||||
const opcodes = require('./opcodes') |
const opcodes = require('./opcodes') |
||||||
|
|
||||||
module.exports = { |
export function nameOpCodes (raw) { |
||||||
nameOpCodes: function (raw) { |
let pushData = '' |
||||||
let pushData = '' |
const codeMap = {} |
||||||
const codeMap = {} |
const code = [] |
||||||
const code = [] |
|
||||||
|
|
||||||
for (let i = 0; i < raw.length; i++) { |
for (let i = 0; i < raw.length; i++) { |
||||||
const pc = i |
const pc = i |
||||||
const curOpCode = opcodes(raw[pc], false).name |
const curOpCode = opcodes(raw[pc], false).name |
||||||
codeMap[i] = code.length |
codeMap[i] = code.length |
||||||
// no destinations into the middle of PUSH
|
// no destinations into the middle of PUSH
|
||||||
if (curOpCode.slice(0, 4) === 'PUSH') { |
if (curOpCode.slice(0, 4) === 'PUSH') { |
||||||
const jumpNum = raw[pc] - 0x5f |
const jumpNum = raw[pc] - 0x5f |
||||||
pushData = raw.slice(pc + 1, pc + jumpNum + 1) |
pushData = raw.slice(pc + 1, pc + jumpNum + 1) |
||||||
i += jumpNum |
i += jumpNum |
||||||
} |
} |
||||||
|
|
||||||
const data = pushData.toString('hex') !== '' ? ' ' + pushData.toString('hex') : '' |
const data = pushData.toString() !== '' ? ' ' + pushData.toString() : '' |
||||||
|
|
||||||
code.push(this.pad(pc, this.roundLog(raw.length, 10)) + ' ' + curOpCode + data) |
code.push(this.pad(pc, this.roundLog(raw.length, 10)) + ' ' + curOpCode + data) |
||||||
pushData = '' |
pushData = '' |
||||||
} |
} |
||||||
return [ code, codeMap ] |
return [ code, codeMap ] |
||||||
}, |
} |
||||||
|
|
||||||
/** |
/** |
||||||
* Parses code as a list of integers into a list of objects containing |
* Parses code as a list of integers into a list of objects containing |
||||||
* information about the opcode. |
* information about the opcode. |
||||||
*/ |
*/ |
||||||
parseCode: function (raw) { |
export function parseCode (raw) { |
||||||
const code = [] |
const code = [] |
||||||
for (let i = 0; i < raw.length; i++) { |
for (let i = 0; i < raw.length; i++) { |
||||||
const opcode = opcodes(raw[i], true) |
const opcode = opcodes(raw[i], true) |
||||||
if (opcode.name.slice(0, 4) === 'PUSH') { |
if (opcode.name.slice(0, 4) === 'PUSH') { |
||||||
const length = raw[i] - 0x5f |
const length = raw[i] - 0x5f |
||||||
opcode.pushData = raw.slice(i + 1, i + length + 1) |
opcode.pushData = raw.slice(i + 1, i + length + 1) |
||||||
// in case pushdata extends beyond code
|
// in case pushdata extends beyond code
|
||||||
if (i + 1 + length > raw.length) { |
if (i + 1 + length > raw.length) { |
||||||
for (let j = opcode.pushData.length; j < length; j++) { |
for (let j = opcode.pushData.length; j < length; j++) { |
||||||
opcode.pushData.push(0) |
opcode.pushData.push(0) |
||||||
} |
|
||||||
} |
} |
||||||
i += length |
|
||||||
} |
} |
||||||
code.push(opcode) |
i += length |
||||||
} |
} |
||||||
return code |
code.push(opcode) |
||||||
}, |
} |
||||||
|
return code |
||||||
|
} |
||||||
|
|
||||||
pad: function (num, size) { |
export function pad (num, size) { |
||||||
let s = num + '' |
let s = num + '' |
||||||
while (s.length < size) s = '0' + s |
while (s.length < size) s = '0' + s |
||||||
return s |
return s |
||||||
}, |
} |
||||||
|
|
||||||
log: function (num, base) { |
export function log (num, base) { |
||||||
return Math.log(num) / Math.log(base) |
return Math.log(num) / Math.log(base) |
||||||
}, |
} |
||||||
|
|
||||||
roundLog: function (num, base) { |
export function roundLog (num, base) { |
||||||
return Math.ceil(this.log(num, base)) |
return Math.ceil(this.log(num, base)) |
||||||
} |
|
||||||
} |
} |
||||||
|
|
||||||
|
Loading…
Reference in new issue