aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2014-07-05 19:53:00 +0800
committerzelig <viktor.tron@gmail.com>2014-07-05 19:53:00 +0800
commit4fb2905b1ef764fd5e26d0eda5f4b7bf4adda195 (patch)
treef230131da69f816d7f33207268cc5b72692f17f0 /ethchain
parent44d0d6abd26bcaca0e1caecf798183b45fb2365a (diff)
parentb232acd04ef957fb65e1c49b330165535da7e871 (diff)
downloaddexon-4fb2905b1ef764fd5e26d0eda5f4b7bf4adda195.tar.gz
dexon-4fb2905b1ef764fd5e26d0eda5f4b7bf4adda195.tar.zst
dexon-4fb2905b1ef764fd5e26d0eda5f4b7bf4adda195.zip
Merge branch 'develop' of github.com:ethereum/eth-go into feature/ethutil-refactor
Diffstat (limited to 'ethchain')
-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
}
}