parent
f8b97d514c
commit
6716d9b593
@ -0,0 +1,67 @@ |
|||||||
|
var remixLib = require('remix-lib') |
||||||
|
var EventManager = remixLib.EventManager |
||||||
|
var remixDebug = require('remix-debug') |
||||||
|
var localDecoder = remixDebug.SolidityDecoder.localDecoder |
||||||
|
var StorageViewer = remixDebug.storage.StorageViewer |
||||||
|
|
||||||
|
class DebuggerSolidityLocals { |
||||||
|
|
||||||
|
constructor (_parent, _traceManager, _internalTreeCall) { |
||||||
|
this.event = new EventManager() |
||||||
|
this.parent = _parent |
||||||
|
this.internalTreeCall = _internalTreeCall |
||||||
|
this.storageResolver = null |
||||||
|
this.traceManager = _traceManager |
||||||
|
} |
||||||
|
|
||||||
|
init () { |
||||||
|
const self = this |
||||||
|
var decodeTimeout = null |
||||||
|
this.parent.event.register('sourceLocationChanged', this, (sourceLocation) => { |
||||||
|
if (!this.storageResolver) { |
||||||
|
return self.event.trigger('solidityLocalsMessage', ['storage not ready']) |
||||||
|
} |
||||||
|
if (decodeTimeout) { |
||||||
|
window.clearTimeout(decodeTimeout) |
||||||
|
} |
||||||
|
self.event.trigger('solidityLocalsUpdating') |
||||||
|
decodeTimeout = setTimeout(function () { |
||||||
|
self.decode(sourceLocation) |
||||||
|
}, 500) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
decode (sourceLocation) { |
||||||
|
const self = this |
||||||
|
self.event.trigger('solidityLocalsMessage', ['']) |
||||||
|
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.event.trigger('solidityLocals', [locals]) |
||||||
|
} |
||||||
|
if (!Object.keys(locals).length) { |
||||||
|
self.event.trigger('solidityLocalsMessage', ['no locals']) |
||||||
|
} |
||||||
|
}) |
||||||
|
} catch (e) { |
||||||
|
self.event.trigger('solidityLocalsMessage', [e.message]) |
||||||
|
} |
||||||
|
} else { |
||||||
|
console.log(error) |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
module.exports = DebuggerSolidityLocals |
Loading…
Reference in new issue