diff options
Diffstat (limited to 'ethvm/vm.go')
-rw-r--r-- | ethvm/vm.go | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/ethvm/vm.go b/ethvm/vm.go index ddad0d366..b27417586 100644 --- a/ethvm/vm.go +++ b/ethvm/vm.go @@ -600,16 +600,20 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) { case POP: require(1) stack.Pop() - case DUP: - require(1) - stack.Push(stack.Peek()) + 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) + + self.Printf(" => [%d] 0x%x", n, stack.Peek().Bytes()) + case SWAP1, SWAP2, SWAP3, SWAP4, SWAP5, SWAP6, SWAP7, SWAP8, SWAP9, SWAP10, SWAP11, SWAP12, SWAP13, SWAP14, SWAP15, SWAP16: + n := int(op - SWAP1 + 1) + x, y := stack.Swapn(n) - self.Printf(" => 0x%x", stack.Peek().Bytes()) + self.Printf(" => [%d] %x [0] %x", n, x.Bytes(), y.Bytes()) + case DUP: + // NOP case SWAP: - require(2) - x, y := stack.Popn() - stack.Push(y) - stack.Push(x) + // NOP case MLOAD: require(1) offset := stack.Pop() |