Commit 5e7a26a3 authored by yann300's avatar yann300

split assemblyitemsbrowser

parent 79ae4bf9
...@@ -45,7 +45,7 @@ module.exports = React.createClass({ ...@@ -45,7 +45,7 @@ module.exports = React.createClass({
}, },
componentWillReceiveProps: function (nextProps) { componentWillReceiveProps: function (nextProps) {
console.log('asm' + JSON.stringify(nextProps)) console.log('new prop asmCode')
if (nextProps.currentStepIndex < 0) return if (nextProps.currentStepIndex < 0) return
codeResolver.setWeb3(this.context.web3) codeResolver.setWeb3(this.context.web3)
var self = this var self = this
...@@ -61,6 +61,10 @@ module.exports = React.createClass({ ...@@ -61,6 +61,10 @@ module.exports = React.createClass({
}) })
var self = this var self = this
codeResolver.resolveCode(address, currentStep, this.context.tx, function (address, code) { codeResolver.resolveCode(address, currentStep, this.context.tx, function (address, code) {
if (window.ethDebuggerSelectedItem !== currentStep) {
console.log(currentStep + ' discarded. current is ' + window.ethDebuggerSelectedItem)
return
}
self.setState({ self.setState({
code: code, code: code,
address: address address: address
......
'use strict' 'use strict'
var React = require('react') var React = require('react')
var BasicPanel = require('./basicPanel')
var Sticker = require('./sticker') var Sticker = require('./sticker')
var style = require('./basicStyles') var style = require('./basicStyles')
var ASMCode = require('./asmCode') var ASMCode = require('./asmCode')
var CalldataPanel = require('./calldataPanel')
var MemoryPanel = require('./memoryPanel')
var CallstackPanel = require('./callstackPanel')
var StackPanel = require('./stackPanel')
var StoragePanel = require('./storagePanel')
module.exports = React.createClass({ module.exports = React.createClass({
contextTypes: { contextTypes: {
traceManager: React.PropTypes.object, traceManager: React.PropTypes.object
web3: React.PropTypes.object
}, },
getInitialState: function () { getInitialState: function () {
return { return {
currentAddress: null, currentAddress: null
currentStack: null,
currentStorage: null,
currentMemory: null,
currentCallData: null
} }
}, },
...@@ -44,23 +43,23 @@ module.exports = React.createClass({ ...@@ -44,23 +43,23 @@ module.exports = React.createClass({
</div> </div>
</td> </td>
<td> <td>
<BasicPanel name='CallData' data={this.state.currentCallData} /> <CalldataPanel currentStepIndex={this.props.currentStepIndex} />
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<BasicPanel name='Stack' data={this.state.currentStack} /> <StackPanel currentStepIndex={this.props.currentStepIndex} />
</td> </td>
<td> <td>
<BasicPanel name='CallStack' data={this.state.currentCallStack} /> <CallstackPanel currentStepIndex={this.props.currentStepIndex} />
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<BasicPanel name='Storage' data={this.state.currentStorage} renderRow={this.renderStorageRow} /> <StoragePanel currentStepIndex={this.props.currentStepIndex} />
</td> </td>
<td> <td>
<BasicPanel name='Memory' data={this.state.currentMemory} renderRow={this.renderMemoryRow} /> <MemoryPanel currentStepIndex={this.props.currentStepIndex} />
</td> </td>
</tr> </tr>
</tbody> </tbody>
...@@ -70,112 +69,16 @@ module.exports = React.createClass({ ...@@ -70,112 +69,16 @@ module.exports = React.createClass({
) )
}, },
renderStorageRow: function (data) {
var ret = []
if (data) {
for (var key in data) {
ret.push(
<tr key={key}>
<td>
{key}
</td>
<td>
{data[key]}
</td>
</tr>)
}
}
return ret
},
renderMemoryRow: function (data) {
var ret = []
if (data) {
for (var key in data) {
var memSlot = data[key]
ret.push(
<tr key={key}>
<td>
{memSlot.address}
</td>
<td>
{memSlot.content.raw}
</td>
<td>
{memSlot.content.ascii}
</td>
</tr>)
}
}
return ret
},
componentWillReceiveProps: function (nextProps) { componentWillReceiveProps: function (nextProps) {
console.log("asse " + JSON.stringify(nextProps))
if (nextProps.currentStepIndex < 0) return if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this var self = this
this.context.traceManager.getCallDataAt(nextProps.currentStepIndex, function (calldata) {
self.setState({
currentCallData: calldata
})
})
this.context.traceManager.getCallStackAt(nextProps.currentStepIndex, function (callstack) {
self.setState({
currentCallStack: callstack
})
})
this.context.traceManager.getMemoryAt(nextProps.currentStepIndex, function (memory) {
self.setState({
currentMemory: self.formatMemory(memory, 16)
})
})
this.context.traceManager.getStorageAt(nextProps.currentStepIndex, function (storage) {
self.setState({
currentStorage: storage
})
})
this.context.traceManager.getStackAt(nextProps.currentStepIndex, function (stack) {
self.setState({
currentStack: stack
})
})
this.context.traceManager.getCurrentCalledAddressAt(nextProps.currentStepIndex, function (address) { this.context.traceManager.getCurrentCalledAddressAt(nextProps.currentStepIndex, function (address) {
self.setState({ if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
currentAddress: address self.setState({
}) currentAddress: address
}) })
},
formatMemory: function (mem, width) {
var ret = []
for (var k = 0; k < mem.length; k += (width * 2)) {
var memory = mem.substr(k, width * 2)
ret.push({
address: this.context.web3.toHex(k),
content: this.tryAsciiFormat(memory)
})
}
return ret
},
tryAsciiFormat: function (memorySlot) {
var ret = { ascii: '', raw: '' }
for (var k = 0; k < memorySlot.length; k += 2) {
var raw = memorySlot.substr(k, 2)
var ascii = this.context.web3.toAscii(raw)
if (ascii === String.fromCharCode(0)) {
ret.ascii += '?'
} else {
ret.ascii += ascii
} }
ret.raw += ' ' + raw })
}
return ret
} }
}) })
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='CallData' data={this.state.data} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getCallDataAt(nextProps.currentStepIndex, function (calldata) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: calldata
})
}
})
}
})
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='CallStack' data={this.state.data} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getCallStackAt(nextProps.currentStepIndex, function (callstack) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: callstack
})
}
})
}
})
...@@ -9,8 +9,8 @@ var style = require('./basicStyles') ...@@ -9,8 +9,8 @@ var style = require('./basicStyles')
module.exports = React.createClass({ module.exports = React.createClass({
getInitialState: function () { getInitialState: function () {
return { return {
tx: null, currentStepIndex: -1, // index of the selected item in the vmtrace
currentStepIndex: -1 // index of the selected item in the vmtrace tx: null
} }
}, },
...@@ -38,7 +38,7 @@ module.exports = React.createClass({ ...@@ -38,7 +38,7 @@ module.exports = React.createClass({
<h1 style={style.container}>Eth Debugger</h1> <h1 style={style.container}>Eth Debugger</h1>
<TxBrowser onNewTxRequested={this.startDebugging} /> <TxBrowser onNewTxRequested={this.startDebugging} />
<StepManager ref='stepManager' onStepChanged={this.stepChanged} /> <StepManager ref='stepManager' onStepChanged={this.stepChanged} />
<AssemblyItemsBrowser currentStepIndex={this.state.currentStepIndex} /> <AssemblyItemsBrowser ref='assemblyitemsbrowser' currentStepIndex={this.state.currentStepIndex} />
</div> </div>
) )
}, },
......
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object,
web3: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='Memory' data={this.state.data} renderRow={this.renderMemoryRow} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getMemoryAt(nextProps.currentStepIndex, function (memory) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: self.formatMemory(memory, 16)
})
}
})
},
renderMemoryRow: function (data) {
var ret = []
if (data) {
for (var key in data) {
var memSlot = data[key]
ret.push(
<tr key={key}>
<td>
{memSlot.address}
</td>
<td>
{memSlot.content.raw}
</td>
<td>
{memSlot.content.ascii}
</td>
</tr>)
}
}
return ret
},
formatMemory: function (mem, width) {
var ret = []
for (var k = 0; k < mem.length; k += (width * 2)) {
var memory = mem.substr(k, width * 2)
ret.push({
address: this.context.web3.toHex(k),
content: this.tryAsciiFormat(memory)
})
}
return ret
},
tryAsciiFormat: function (memorySlot) {
var ret = { ascii: '', raw: '' }
for (var k = 0; k < memorySlot.length; k += 2) {
var raw = memorySlot.substr(k, 2)
var ascii = this.context.web3.toAscii(raw)
if (ascii === String.fromCharCode(0)) {
ret.ascii += '?'
} else {
ret.ascii += ascii
}
ret.raw += ' ' + raw
}
return ret
}
})
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='Stack' data={this.state.data} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getStackAt(nextProps.currentStepIndex, function (stack) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: stack
})
}
})
}
})
...@@ -39,6 +39,14 @@ module.exports = React.createClass({ ...@@ -39,6 +39,14 @@ module.exports = React.createClass({
) )
}, },
componentDidMount: function () {
this.updateGlobalSelectedItem(0)
},
updateGlobalSelectedItem: function (value) {
window.ethDebuggerSelectedItem = value
},
init: function () { init: function () {
this.refs.slider.setValue(0) this.refs.slider.setValue(0)
}, },
...@@ -91,6 +99,7 @@ module.exports = React.createClass({ ...@@ -91,6 +99,7 @@ module.exports = React.createClass({
}, },
changeState: function (step) { changeState: function (step) {
this.updateGlobalSelectedItem(step)
this.setState({ this.setState({
currentStepIndex: step currentStepIndex: step
}) })
......
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
module.exports = React.createClass({
contextTypes: {
traceManager: React.PropTypes.object
},
getDefaultProps: function () {
return {
currentStepIndex: -1
}
},
getInitialState: function () {
return {
data: null
}
},
render: function () {
return (
<BasicPanel name='Storage' data={this.state.data} renderRow={this.renderStorageRow} />
)
},
componentWillReceiveProps: function (nextProps) {
if (nextProps.currentStepIndex < 0) return
if (window.ethDebuggerSelectedItem !== nextProps.currentStepIndex) return
var self = this
this.context.traceManager.getStorageAt(nextProps.currentStepIndex, function (storage) {
if (window.ethDebuggerSelectedItem === nextProps.currentStepIndex) {
self.setState({
data: storage
})
}
})
},
renderStorageRow: function (data) {
var ret = []
if (data) {
for (var key in data) {
ret.push(
<tr key={key}>
<td>
{key}
</td>
<td>
{data[key]}
</td>
</tr>)
}
}
return ret
}
})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment