diff options
author | obscuren <geffobscura@gmail.com> | 2014-09-19 19:19:19 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-09-19 19:19:19 +0800 |
commit | 80261c803a82e51413608a3dc5273c982844d135 (patch) | |
tree | 07bae1473db846065d62ac86b339aaadc9d781c1 /ethvm/vm.go | |
parent | 863785a52046bcfbbcaa57c83b4b43c215368760 (diff) | |
download | dexon-80261c803a82e51413608a3dc5273c982844d135.tar.gz dexon-80261c803a82e51413608a3dc5273c982844d135.tar.zst dexon-80261c803a82e51413608a3dc5273c982844d135.zip |
Fixed deref ptr
Diffstat (limited to 'ethvm/vm.go')
-rw-r--r-- | ethvm/vm.go | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/ethvm/vm.go b/ethvm/vm.go index f1c23b370..7aff320f9 100644 --- a/ethvm/vm.go +++ b/ethvm/vm.go @@ -670,9 +670,13 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) { stack.Pop() case DUP1, DUP2, DUP3, DUP4, DUP5, DUP6, DUP7, DUP8, DUP9, DUP10, DUP11, DUP12, DUP13, DUP14, DUP15, DUP16: n := int(op - DUP1 + 1) - stack.Dupn(n) + v := stack.Dupn(n) self.Printf(" => [%d] 0x%x", n, stack.Peek().Bytes()) + + if OpCode(closure.Get(new(big.Int).Add(pc, ethutil.Big1)).Uint()) == POP && OpCode(closure.Get(new(big.Int).Add(pc, big.NewInt(2))).Uint()) == POP { + fmt.Println(toValue(v)) + } case SWAP1, SWAP2, SWAP3, SWAP4, SWAP5, SWAP6, SWAP7, SWAP8, SWAP9, SWAP10, SWAP11, SWAP12, SWAP13, SWAP14, SWAP15, SWAP16: n := int(op - SWAP1 + 2) x, y := stack.Swapn(n) @@ -1004,3 +1008,14 @@ func (self *Message) Exec(codeAddr []byte, caller ClosureRef) (ret []byte, err e return } + +// Mainly used for print variables and passing to Print* +func toValue(val *big.Int) interface{} { + // Let's assume a string on right padded zero's + b := val.Bytes() + if b[0] != 0 && b[len(b)-1] == 0x0 && b[len(b)-2] == 0x0 { + return string(b) + } + + return val +} |