aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-05-27 19:32:31 +0800
committerobscuren <geffobscura@gmail.com>2014-05-27 19:32:31 +0800
commit4eb1771e67ee2c66d5fb86c2b5961d84e40f7dd0 (patch)
treee0b6207273705f7cfb88b9e8b4b4453ae9abd49a /ethchain
parentaba3066658a32723543f9e4eda74a14ef140fc0e (diff)
downloaddexon-4eb1771e67ee2c66d5fb86c2b5961d84e40f7dd0.tar.gz
dexon-4eb1771e67ee2c66d5fb86c2b5961d84e40f7dd0.tar.zst
dexon-4eb1771e67ee2c66d5fb86c2b5961d84e40f7dd0.zip
Hooks can now quit the vm
Diffstat (limited to 'ethchain')
-rw-r--r--ethchain/closure.go2
-rw-r--r--ethchain/vm.go4
2 files changed, 4 insertions, 2 deletions
diff --git a/ethchain/closure.go b/ethchain/closure.go
index e65cfd252..c935ed50a 100644
--- a/ethchain/closure.go
+++ b/ethchain/closure.go
@@ -72,7 +72,7 @@ func (c *Closure) Address() []byte {
return c.object.Address()
}
-type DebugHook func(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject)
+type DebugHook func(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool
func (c *Closure) Call(vm *Vm, args []byte, hook DebugHook) ([]byte, error) {
c.Args = args
diff --git a/ethchain/vm.go b/ethchain/vm.go
index 0d9e8599e..9821a839a 100644
--- a/ethchain/vm.go
+++ b/ethchain/vm.go
@@ -543,7 +543,9 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
pc.Add(pc, ethutil.Big1)
if hook != nil {
- hook(step-1, op, mem, stack, closure.Object())
+ if !hook(step-1, op, mem, stack, closure.Object()) {
+ return nil, nil
+ }
}
}
}