From d63a3e104719b30c0ff4a0a032d526c01c08ea4c Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 20 Jun 2016 10:59:11 +0200 Subject: [PATCH] add indexChanged event --- src/calldataPanel.js | 30 +++++++++------- src/callstackPanel.js | 30 +++++++++------- src/codeManager.js | 2 ++ src/debugger.js | 22 ++++++++---- src/memoryPanel.js | 30 +++++++++------- src/stackPanel.js | 30 +++++++++------- src/stepManager.js | 19 +++++----- src/sticker.js | 82 +++++++++++++++++++++++-------------------- src/storagePanel.js | 30 +++++++++------- src/vmDebugger.js | 13 ------- 10 files changed, 157 insertions(+), 131 deletions(-) diff --git a/src/calldataPanel.js b/src/calldataPanel.js index 7bc9bc0baa..53876a8f76 100644 --- a/src/calldataPanel.js +++ b/src/calldataPanel.js @@ -4,7 +4,9 @@ var BasicPanel = require('./basicPanel') module.exports = React.createClass({ contextTypes: { - traceManager: React.PropTypes.object + traceManager: React.PropTypes.object, + codeManager: React.PropTypes.object, + root: React.PropTypes.object }, getDefaultProps: function () { @@ -25,19 +27,21 @@ module.exports = React.createClass({ ) }, - componentWillReceiveProps: function (nextProps) { - if (nextProps.currentStepIndex < 0) return - if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return - + componentDidMount: function () { var self = this - this.context.traceManager.getCallDataAt(nextProps.currentStepIndex, function (error, calldata) { - if (error) { - console.log(error) - } else if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) { - self.setState({ - data: self.format(calldata) - }) - } + this.context.root.register('indexChanged', this, function (index) { + if (index < 0) return + if (window.ethDebuggerSelectedItem !== index) return + + self.context.traceManager.getCallDataAt(index, function (error, calldata) { + if (error) { + console.log(error) + } else if (window.ethDebuggerSelectedItem === index) { + self.setState({ + data: self.format(calldata) + }) + } + }) }) }, diff --git a/src/callstackPanel.js b/src/callstackPanel.js index e223b8d411..506edb28dc 100644 --- a/src/callstackPanel.js +++ b/src/callstackPanel.js @@ -4,7 +4,9 @@ var BasicPanel = require('./basicPanel') module.exports = React.createClass({ contextTypes: { - traceManager: React.PropTypes.object + traceManager: React.PropTypes.object, + codeManager: React.PropTypes.object, + root: React.PropTypes.object }, getDefaultProps: function () { @@ -25,19 +27,21 @@ module.exports = React.createClass({ ) }, - componentWillReceiveProps: function (nextProps) { - if (nextProps.currentStepIndex < 0) return - if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return - + componentDidMount: function () { var self = this - this.context.traceManager.getCallStackAt(nextProps.currentStepIndex, function (error, callstack) { - if (error) { - console.log(error) - } else if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) { - self.setState({ - data: self.format(callstack) - }) - } + this.context.root.register('indexChanged', this, function (index) { + if (index < 0) return + if (window.ethDebuggerSelectedItem !== index) return + + self.context.traceManager.getCallStackAt(index, function (error, callstack) { + if (error) { + console.log(error) + } else if (window.ethDebuggerSelectedItem === index) { + self.setState({ + data: self.format(callstack) + }) + } + }) }) }, diff --git a/src/codeManager.js b/src/codeManager.js index 5db4387d09..c0953a4aaf 100644 --- a/src/codeManager.js +++ b/src/codeManager.js @@ -53,6 +53,7 @@ CodeManager.prototype.ensureCodeLoaded = function (address, currentStep, tx) { self.getInstructionIndex(address, currentStep, function (error, result) { if (!error) { self.trigger('codeChanged', [codes.code, address, result]) + self.trigger('indexChanged', [result]) self.currentAddress = address } else { console.log(error) @@ -67,6 +68,7 @@ CodeManager.prototype.ensureCodeLoaded = function (address, currentStep, tx) { self.getInstructionIndex(address, currentStep, function (error, result) { if (!error) { self.trigger('codeChanged', [code, address, result]) + self.trigger('indexChanged', [result]) self.currentAddress = address } else { console.log(error) diff --git a/src/debugger.js b/src/debugger.js index 9f6de8b0bd..b38315d625 100644 --- a/src/debugger.js +++ b/src/debugger.js @@ -4,6 +4,8 @@ var TxBrowser = require('./txBrowser') var StepManager = require('./stepManager') var VmDebugger = require('./vmDebugger') var style = require('./basicStyles') +var util = require('./util') +var eventManager = require('./eventManager') module.exports = React.createClass({ getInitialState: function () { @@ -12,11 +14,12 @@ module.exports = React.createClass({ tx: null } }, - + childContextTypes: { web3: React.PropTypes.object, traceManager: React.PropTypes.object, codeManager: React.PropTypes.object, + root: React.PropTypes.object, tx: React.PropTypes.object }, @@ -25,6 +28,7 @@ module.exports = React.createClass({ web3: this.props.context.web3, traceManager: this.props.context.traceManager, codeManager: this.props.context.codeManager, + root: this, tx: this.state.tx } }, @@ -41,12 +45,17 @@ module.exports = React.createClass({ }, stepChanged: function (stepIndex) { + this.trigger('indexChanged', [stepIndex]) this.setState({ currentStepIndex: stepIndex }) this.props.context.codeManager.resolveStep(stepIndex, this.state.tx) }, + componentWillMount: function () { + util.extend(this, eventManager) + }, + startDebugging: function (blockNumber, txIndex, tx) { if (this.props.context.traceManager.isLoading) { return @@ -58,11 +67,12 @@ module.exports = React.createClass({ var self = this this.props.context.traceManager.resolveTrace(tx, function (success) { console.log('trace loaded ' + success) - self.setState({ - currentStepIndex: 0 - }) - self.refs.stepManager.newTraceAvailable() - self.props.context.codeManager.resolveStep(0, tx) + if (success) { + self.stepChanged(0) + self.refs.stepManager.newTraceAvailable() + } else { + console.log('trace not loaded') + } }) } }) diff --git a/src/memoryPanel.js b/src/memoryPanel.js index fc4a4818a8..d3f9c3b6bd 100644 --- a/src/memoryPanel.js +++ b/src/memoryPanel.js @@ -5,7 +5,9 @@ var BasicPanel = require('./basicPanel') module.exports = React.createClass({ contextTypes: { traceManager: React.PropTypes.object, - web3: React.PropTypes.object + web3: React.PropTypes.object, + codeManager: React.PropTypes.object, + root: React.PropTypes.object }, getDefaultProps: function () { @@ -26,19 +28,21 @@ module.exports = React.createClass({ ) }, - componentWillReceiveProps: function (nextProps) { - if (nextProps.currentStepIndex < 0) return - if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return - + componentDidMount: function () { var self = this - this.context.traceManager.getMemoryAt(nextProps.currentStepIndex, function (error, memory) { - if (error) { - console.log(error) - } else if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) { - self.setState({ - data: self.formatMemory(memory, 16) - }) - } + this.context.root.register('indexChanged', this, function (index) { + if (index < 0) return + if (window.ethDebuggerSelectedItem !== index) return + + self.context.traceManager.getMemoryAt(index, function (error, memory) { + if (error) { + console.log(error) + } else if (window.ethDebuggerSelectedItem === index) { + self.setState({ + data: self.formatMemory(memory, 16) + }) + } + }) }) }, diff --git a/src/stackPanel.js b/src/stackPanel.js index 0d5e117662..7fce5c88a0 100644 --- a/src/stackPanel.js +++ b/src/stackPanel.js @@ -4,7 +4,9 @@ var BasicPanel = require('./basicPanel') module.exports = React.createClass({ contextTypes: { - traceManager: React.PropTypes.object + traceManager: React.PropTypes.object, + codeManager: React.PropTypes.object, + root: React.PropTypes.object }, getDefaultProps: function () { @@ -25,19 +27,21 @@ module.exports = React.createClass({ ) }, - componentWillReceiveProps: function (nextProps) { - if (nextProps.currentStepIndex < 0) return - if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return - + componentDidMount: function () { var self = this - this.context.traceManager.getStackAt(nextProps.currentStepIndex, function (error, stack) { - if (error) { - console.log(error) - } else if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) { - self.setState({ - data: self.format(stack) - }) - } + this.context.root.register('indexChanged', this, function (index) { + if (index < 0) return + if (window.ethDebuggerSelectedItem !== index) return + + self.context.traceManager.getStackAt(index, function (error, stack) { + if (error) { + console.log(error) + } else if (window.ethDebuggerSelectedItem === index) { + self.setState({ + data: self.format(stack) + }) + } + }) }) }, diff --git a/src/stepManager.js b/src/stepManager.js index ddcc5a1fd4..89d3408d6a 100644 --- a/src/stepManager.js +++ b/src/stepManager.js @@ -3,6 +3,8 @@ var React = require('react') var ButtonNavigator = require('./buttonNavigator') var Slider = require('./slider') var style = require('./basicStyles') +var util = require('./util') +var eventManager = require('./eventManager') module.exports = React.createClass({ propTypes: { @@ -41,6 +43,7 @@ module.exports = React.createClass({ }, componentDidMount: function () { + // util.extend(this, eventManager) this.changeState(-1) }, @@ -70,8 +73,8 @@ module.exports = React.createClass({ if (!this.context.traceManager.inRange(step)) { return } - this.props.onStepChanged(step) this.changeState(step) + this.props.onStepChanged(step) }, stepIntoForward: function () { @@ -82,9 +85,9 @@ module.exports = React.createClass({ if (!this.context.traceManager.inRange(step)) { return } - this.props.onStepChanged(step) this.refs.slider.setValue(step) this.changeState(step) + this.props.onStepChanged(step) }, stepIntoBack: function () { @@ -95,9 +98,9 @@ module.exports = React.createClass({ if (!this.context.traceManager.inRange(step)) { return } - this.props.onStepChanged(step) this.refs.slider.setValue(step) this.changeState(step) + this.props.onStepChanged(step) }, stepOverForward: function () { @@ -105,9 +108,9 @@ module.exports = React.createClass({ return } var step = this.context.traceManager.findStepOverForward(this.state.currentStepIndex) - this.props.onStepChanged(step) this.refs.slider.setValue(step) this.changeState(step) + this.props.onStepChanged(step) }, stepOverBack: function () { @@ -115,22 +118,22 @@ module.exports = React.createClass({ return } var step = this.context.traceManager.findStepOverBack(this.state.currentStepIndex) - this.props.onStepChanged(step) this.refs.slider.setValue(step) this.changeState(step) + this.props.onStepChanged(step) }, jumpToNextCall: function () { if (!this.context.traceManager.isLoaded()) { return } - var step = this.context.traceManager.findNextCall(this.state.currentStepIndex) - this.props.onStepChanged(step) + var step = this.context.traceManager.findNextCall(this.state.currentStepIndex) this.refs.slider.setValue(step) this.changeState(step) + this.props.onStepChanged(step) }, - changeState: function (step) { + changeState: function (step) { this.updateGlobalSelectedItem(step) this.setState({ currentStepIndex: step diff --git a/src/sticker.js b/src/sticker.js index 92cffd19ed..5a44f2f3f3 100644 --- a/src/sticker.js +++ b/src/sticker.js @@ -3,7 +3,9 @@ var React = require('react') module.exports = React.createClass({ contextTypes: { - traceManager: React.PropTypes.object + traceManager: React.PropTypes.object, + codeManager: React.PropTypes.object, + root: React.PropTypes.object }, getDefaultProps: function () { @@ -80,48 +82,50 @@ module.exports = React.createClass({ return null }, - componentWillReceiveProps: function (nextProps) { - if (nextProps.currentStepIndex < 0) return - + componentDidMount: function () { var self = this - this.context.traceManager.getCurrentStep(nextProps.currentStepIndex, function (error, step) { - if (error) { - console.log(error) - } else { - self.setState({ - step: step - }) - } - }) + this.context.root.register('indexChanged', this, function (index) { + if (index < 0) return - this.context.traceManager.getMemExpand(nextProps.currentStepIndex, function (error, addmem) { - if (error) { - console.log(error) - } else { - self.setState({ - addmemory: addmem - }) - } - }) + self.context.traceManager.getCurrentStep(index, function (error, step) { + if (error) { + console.log(error) + } else { + self.setState({ + step: step + }) + } + }) - this.context.traceManager.getStepCost(nextProps.currentStepIndex, function (error, gas) { - if (error) { - console.log(error) - } else { - self.setState({ - gas: gas - }) - } - }) + self.context.traceManager.getMemExpand(index, function (error, addmem) { + if (error) { + console.log(error) + } else { + self.setState({ + addmemory: addmem + }) + } + }) - this.context.traceManager.getRemainingGas(nextProps.currentStepIndex, function (error, remaingas) { - if (error) { - console.log(error) - } else { - self.setState({ - remainingGas: remaingas - }) - } + self.context.traceManager.getStepCost(index, function (error, gas) { + if (error) { + console.log(error) + } else { + self.setState({ + gas: gas + }) + } + }) + + self.context.traceManager.getRemainingGas(index, function (error, remaingas) { + if (error) { + console.log(error) + } else { + self.setState({ + remainingGas: remaingas + }) + } + }) }) } }) diff --git a/src/storagePanel.js b/src/storagePanel.js index 71b1bc8d62..988b83e187 100644 --- a/src/storagePanel.js +++ b/src/storagePanel.js @@ -5,7 +5,9 @@ var BasicPanel = require('./basicPanel') module.exports = React.createClass({ contextTypes: { traceManager: React.PropTypes.object, - tx: React.PropTypes.object + tx: React.PropTypes.object, + codeManager: React.PropTypes.object, + root: React.PropTypes.object }, getDefaultProps: function () { @@ -26,19 +28,21 @@ module.exports = React.createClass({ ) }, - componentWillReceiveProps: function (nextProps) { - if (nextProps.currentStepIndex < 0) return - if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return - + componentDidMount: function () { var self = this - this.context.traceManager.getStorageAt(nextProps.currentStepIndex, this.context.tx, function (error, storage) { - if (error) { - console.log(error) - } else if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) { - self.setState({ - data: self.formatStorage(storage) - }) - } + this.context.root.register('indexChanged', this, function (index) { + if (index < 0) return + if (window.ethDebuggerSelectedItem !== index) return + + self.context.traceManager.getStorageAt(index, self.context.tx, function (error, storage) { + if (error) { + console.log(error) + } else if (window.ethDebuggerSelectedItem === index) { + self.setState({ + data: self.formatStorage(storage) + }) + } + }) }) }, diff --git a/src/vmDebugger.js b/src/vmDebugger.js index 5322712a05..ab3bfdb4f5 100644 --- a/src/vmDebugger.js +++ b/src/vmDebugger.js @@ -10,16 +10,6 @@ var StackPanel = require('./stackPanel') var StoragePanel = require('./storagePanel') module.exports = React.createClass({ - contextTypes: { - traceManager: React.PropTypes.object - }, - - getInitialState: function () { - return { - currentAddress: null - } - }, - getDefaultProps: function () { return { currentStepIndex: -1 // index of the selected item in the vmtrace @@ -29,9 +19,6 @@ module.exports = React.createClass({ render: function () { return (
-
- Current code: {this.state.currentAddress} -