Merge branch 'develop' of github.com:ethereum/go-ethereum into feature/logging

This commit is contained in:
zelig 2014-06-26 16:33:40 +01:00
commit 648c418fcd
3 changed files with 32 additions and 22 deletions

View File

@ -10,9 +10,9 @@ ApplicationWindow {
visible: false visible: false
title: "IceCREAM" title: "IceCREAM"
minimumWidth: 1280 minimumWidth: 1280
minimumHeight: 900 minimumHeight: 700
width: 1290 width: 1290
height: 900 height: 700
property alias codeText: codeEditor.text property alias codeText: codeEditor.text
property alias dataText: rawDataField.text property alias dataText: rawDataField.text
@ -56,7 +56,7 @@ ApplicationWindow {
Rectangle { Rectangle {
color: "#00000000" color: "#00000000"
height: 500 height: 330
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
@ -208,6 +208,12 @@ ApplicationWindow {
} }
text: "Next" text: "Next"
} }
CheckBox {
id: breakEachLine
objectName: "breakEachLine"
text: "Break each instruction"
checked: true
}
} }
} }

View File

@ -26,7 +26,7 @@ func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
} }
win := component.CreateWindow(nil) win := component.CreateWindow(nil)
db := &Debugger{win, make(chan bool), make(chan bool), true, false} db := &Debugger{win, make(chan bool), make(chan bool), true, false, true}
return &DebuggerWindow{engine: engine, win: win, lib: lib, Db: db} return &DebuggerWindow{engine: engine, win: win, lib: lib, Db: db}
} }
@ -59,6 +59,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
if !self.Db.done { if !self.Db.done {
self.Db.Q <- true self.Db.Q <- true
} }
self.Db.breakOnInstr = self.win.Root().ObjectByName("breakEachLine").Bool("checked")
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
@ -95,16 +96,20 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
self.win.Root().Call("setAsm", str) self.win.Root().Call("setAsm", str)
} }
gas := ethutil.Big(gasStr) var (
gasPrice := ethutil.Big(gasPriceStr) gas = ethutil.Big(gasStr)
// Contract addr as test address gasPrice = ethutil.Big(gasPriceStr)
keyPair := ethutil.GetKeyRing().Get(0) value = ethutil.Big(valueStr)
callerTx := ethchain.NewContractCreationTx(ethutil.Big(valueStr), gas, gasPrice, script) // Contract addr as test address
keyPair = ethutil.GetKeyRing().Get(0)
callerTx = ethchain.NewContractCreationTx(ethutil.Big(valueStr), gas, gasPrice, script)
)
callerTx.Sign(keyPair.PrivateKey) callerTx.Sign(keyPair.PrivateKey)
state := self.lib.eth.BlockChain().CurrentBlock.State() state := self.lib.eth.BlockChain().CurrentBlock.State()
account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address()) account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address())
contract := ethchain.MakeContract(callerTx, state) contract := ethchain.MakeContract(callerTx, state)
contract.Amount = value
callerClosure := ethchain.NewClosure(account, contract, script, state, gas, gasPrice) callerClosure := ethchain.NewClosure(account, contract, script, state, gas, gasPrice)
block := self.lib.eth.BlockChain().CurrentBlock block := self.lib.eth.BlockChain().CurrentBlock
@ -164,6 +169,7 @@ type Debugger struct {
N chan bool N chan bool
Q chan bool Q chan bool
done, interrupt bool done, interrupt bool
breakOnInstr bool
} }
type storeVal struct { type storeVal struct {
@ -190,16 +196,18 @@ func (d *Debugger) halting(pc int, op ethchain.OpCode, mem *ethchain.Memory, sta
d.win.Root().Call("setStorage", storeVal{fmt.Sprintf("% x", key), fmt.Sprintf("% x", node.Str())}) d.win.Root().Call("setStorage", storeVal{fmt.Sprintf("% x", key), fmt.Sprintf("% x", node.Str())})
}) })
out: if d.breakOnInstr {
for { out:
select { for {
case <-d.N: select {
break out case <-d.N:
case <-d.Q: break out
d.interrupt = true case <-d.Q:
d.clearBuffers() d.interrupt = true
d.clearBuffers()
return false return false
}
} }
} }

View File

@ -173,10 +173,6 @@ func (gui *Gui) createWindow(comp qml.Object) *qml.Window {
gui.win = win gui.win = win
gui.uiLib.win = win gui.uiLib.win = win
db := &Debugger{gui.win, make(chan bool), make(chan bool), true, false}
gui.lib.Db = db
gui.uiLib.Db = db
return gui.win return gui.win
} }
func (gui *Gui) setInitialBlockChain() { func (gui *Gui) setInitialBlockChain() {