aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain/vm.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-07-05 19:24:49 +0800
committerobscuren <geffobscura@gmail.com>2014-07-05 19:24:49 +0800
commitb232acd04ef957fb65e1c49b330165535da7e871 (patch)
tree59164148d9fb7f1674ee80ae263d19496b29ca43 /ethchain/vm.go
parent329887df993aefc8799cf64ed20cf1dcc8cfb6ed (diff)
downloaddexon-b232acd04ef957fb65e1c49b330165535da7e871.tar.gz
dexon-b232acd04ef957fb65e1c49b330165535da7e871.tar.zst
dexon-b232acd04ef957fb65e1c49b330165535da7e871.zip
Debugging mode for vm
Diffstat (limited to 'ethchain/vm.go')
-rw-r--r--ethchain/vm.go31
1 files changed, 14 insertions, 17 deletions
diff --git a/ethchain/vm.go b/ethchain/vm.go
index cfedadb08..769333649 100644
--- a/ethchain/vm.go
+++ b/ethchain/vm.go
@@ -24,14 +24,10 @@ var (
GasTx = big.NewInt(500)
)
-func CalculateTxGas(initSize *big.Int) *big.Int {
- totalGas := new(big.Int)
-
- txTotalBytes := new(big.Int).Set(initSize)
- txTotalBytes.Div(txTotalBytes, ethutil.Big32)
- totalGas.Add(totalGas, new(big.Int).Mul(txTotalBytes, GasSStore))
-
- return totalGas
+type Debugger interface {
+ BreakHook(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool
+ StepHook(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool
+ BreakPoints() []int64
}
type Vm struct {
@@ -53,14 +49,13 @@ type Vm struct {
err error
// Debugging
- Hook DebugHook
+ Dbg Debugger
+
BreakPoints []int64
Stepping bool
Fn string
}
-type DebugHook func(step int, op OpCode, mem *Memory, stack *Stack, stateObject *StateObject) bool
-
type RuntimeVars struct {
Origin []byte
Block *Block
@@ -754,12 +749,14 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
vm.Endl()
- if vm.Hook != nil {
- for _, instrNo := range vm.BreakPoints {
- if pc.Cmp(big.NewInt(instrNo)) == 0 || vm.Stepping {
- vm.Stepping = true
-
- if !vm.Hook(prevStep, op, mem, stack, closure.Object()) {
+ if vm.Dbg != nil {
+ for _, instrNo := range vm.Dbg.BreakPoints() {
+ if pc.Cmp(big.NewInt(instrNo)) == 0 {
+ if !vm.Dbg.BreakHook(prevStep, op, mem, stack, closure.Object()) {
+ return nil, nil
+ }
+ } else if vm.Stepping {
+ if !vm.Dbg.StepHook(prevStep, op, mem, stack, closure.Object()) {
return nil, nil
}
}