parent
c8715290be
commit
37a7d3d28f
@ -0,0 +1,84 @@ |
||||
'use strict' |
||||
var DropdownPanel = require('./DropdownPanel') |
||||
var remixDebug = require('remix-debug') |
||||
var localDecoder = remixDebug.SolidityDecoder.localDecoder |
||||
var solidityTypeFormatter = require('./utils/SolidityTypeFormatter') |
||||
var StorageViewer = remixDebug.storage.StorageViewer |
||||
var yo = require('yo-yo') |
||||
|
||||
class SolidityLocals { |
||||
|
||||
constructor (_parent, _traceManager, _internalTreeCall) { |
||||
this.parent = _parent |
||||
this.internalTreeCall = _internalTreeCall |
||||
this.storageResolver = null |
||||
this.traceManager = _traceManager |
||||
this.basicPanel = new DropdownPanel('Solidity Locals', { |
||||
json: true, |
||||
formatSelf: solidityTypeFormatter.formatSelf, |
||||
extractData: solidityTypeFormatter.extractData |
||||
}) |
||||
this.init() |
||||
this.view |
||||
} |
||||
|
||||
render () { |
||||
this.view = yo`<div id='soliditylocals' >
|
||||
${this.basicPanel.render()} |
||||
</div>` |
||||
return this.view |
||||
} |
||||
|
||||
init () { |
||||
var decodeTimeout = null |
||||
this.parent.event.register('sourceLocationChanged', this, (sourceLocation) => { |
||||
if (!this.storageResolver) { |
||||
this.basicPanel.setMessage('storage not ready') |
||||
return |
||||
} |
||||
if (decodeTimeout) { |
||||
window.clearTimeout(decodeTimeout) |
||||
} |
||||
this.basicPanel.setUpdating() |
||||
decodeTimeout = setTimeout(() => { |
||||
decode(this, sourceLocation) |
||||
}, 500) |
||||
}) |
||||
} |
||||
} |
||||
|
||||
function decode (self, sourceLocation) { |
||||
self.basicPanel.setMessage('') |
||||
self.traceManager.waterfall([ |
||||
self.traceManager.getStackAt, |
||||
self.traceManager.getMemoryAt, |
||||
self.traceManager.getCurrentCalledAddressAt], |
||||
self.parent.currentStepIndex, |
||||
(error, result) => { |
||||
if (!error) { |
||||
var stack = result[0].value |
||||
var memory = result[1].value |
||||
try { |
||||
var storageViewer = new StorageViewer({ |
||||
stepIndex: self.parent.currentStepIndex, |
||||
tx: self.parent.tx, |
||||
address: result[2].value |
||||
}, self.storageResolver, self.traceManager) |
||||
localDecoder.solidityLocals(self.parent.currentStepIndex, self.internalTreeCall, stack, memory, storageViewer, sourceLocation).then((locals) => { |
||||
if (!locals.error) { |
||||
self.basicPanel.update(locals) |
||||
} |
||||
if (!Object.keys(locals).length) { |
||||
self.basicPanel.setMessage('no locals') |
||||
} |
||||
}) |
||||
} catch (e) { |
||||
self.basicPanel.setMessage(e.message) |
||||
} |
||||
} else { |
||||
console.log(error) |
||||
} |
||||
}) |
||||
} |
||||
module.exports = SolidityLocals |
||||
|
Loading…
Reference in new issue