aboutsummaryrefslogtreecommitdiffstats
path: root/ethvm/vm_debug.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-10-17 00:27:05 +0800
committerobscuren <geffobscura@gmail.com>2014-10-17 00:27:05 +0800
commit93fcabd25189b447cc5c52523134cca2fa1d794e (patch)
tree152b24831fbb2d547bc2189b0b92a2b18c8f64b7 /ethvm/vm_debug.go
parentbb5038699ef7e08054ef154107e359dce2e3b106 (diff)
downloadgo-tangerine-93fcabd25189b447cc5c52523134cca2fa1d794e.tar
go-tangerine-93fcabd25189b447cc5c52523134cca2fa1d794e.tar.gz
go-tangerine-93fcabd25189b447cc5c52523134cca2fa1d794e.tar.bz2
go-tangerine-93fcabd25189b447cc5c52523134cca2fa1d794e.tar.lz
go-tangerine-93fcabd25189b447cc5c52523134cca2fa1d794e.tar.xz
go-tangerine-93fcabd25189b447cc5c52523134cca2fa1d794e.tar.zst
go-tangerine-93fcabd25189b447cc5c52523134cca2fa1d794e.zip
Fixed most of the tests
Diffstat (limited to 'ethvm/vm_debug.go')
-rw-r--r--ethvm/vm_debug.go58
1 files changed, 35 insertions, 23 deletions
diff --git a/ethvm/vm_debug.go b/ethvm/vm_debug.go
index 6d42c6b1e..da9ad8d59 100644
--- a/ethvm/vm_debug.go
+++ b/ethvm/vm_debug.go
@@ -54,6 +54,25 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
panic(fmt.Sprintf("%04v (%v) stack err size = %d, required = %d", pc, op, stack.Len(), m))
}
}
+
+ jump = func(pos *big.Int) {
+ p := int(pos.Int64())
+
+ self.Printf(" ~> %v", pos)
+ // Return to start
+ if p == 0 {
+ pc = big.NewInt(0)
+ } else {
+ nop := OpCode(closure.GetOp(p - 1))
+ if nop != JUMPDEST {
+ panic(fmt.Sprintf("JUMP missed JUMPDEST (%v) %v", nop, p))
+ }
+
+ pc = pos
+ }
+
+ self.Endl()
+ }
)
if self.Recoverable {
@@ -440,14 +459,18 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
case BYTE:
require(2)
val, th := stack.Popn()
- if th.Cmp(big.NewInt(32)) < 0 && th.Cmp(big.NewInt(int64(len(val.Bytes())))) < 0 {
+
+ if th.Cmp(big.NewInt(32)) < 0 {
byt := big.NewInt(int64(ethutil.LeftPadBytes(val.Bytes(), 32)[th.Int64()]))
- stack.Push(byt)
- self.Printf(" => 0x%x", byt.Bytes())
+ base.Set(byt)
} else {
- stack.Push(ethutil.BigFalse)
+ base.Set(ethutil.BigFalse)
}
+
+ self.Printf(" => 0x%x", base.Bytes())
+
+ stack.Push(base)
case ADDMOD:
require(3)
@@ -562,7 +585,7 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
mem.Set(mOff, l, code)
case CODESIZE, EXTCODESIZE:
var code []byte
- if op == EXTCODECOPY {
+ if op == EXTCODESIZE {
addr := stack.Pop().Bytes()
code = state.GetCode(addr)
@@ -638,8 +661,7 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
self.Printf(" => 0x%x", difficulty.Bytes())
case GASLIMIT:
- // TODO
- stack.Push(big.NewInt(0))
+ stack.Push(self.env.GasLimit())
// 0x50 range
case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
@@ -713,32 +735,21 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
self.Printf(" {0x%x : 0x%x}", loc.Bytes(), val.Bytes())
case JUMP:
require(1)
- pc = stack.Pop()
-
- if OpCode(closure.Get(pc).Uint()) != JUMPDEST {
- panic(fmt.Sprintf("JUMP missed JUMPDEST %v", pc))
- }
- // Reduce pc by one because of the increment that's at the end of this for loop
- self.Printf(" ~> %v", pc).Endl()
+ jump(stack.Pop())
continue
case JUMPI:
require(2)
cond, pos := stack.Popn()
- if cond.Cmp(ethutil.BigTrue) >= 0 {
- pc = pos
- if OpCode(closure.Get(pc).Uint()) != JUMPDEST {
- panic(fmt.Sprintf("JUMP missed JUMPDEST %v", pc))
- }
+ if cond.Cmp(ethutil.BigTrue) >= 0 {
+ jump(pos)
continue
- } else {
- self.Printf(" (f)")
}
+
case JUMPDEST:
- self.Printf(" ~> %v (t)", pc).Endl()
case PC:
stack.Push(pc)
case MSIZE:
@@ -771,7 +782,7 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
closure.UseGas(closure.Gas)
msg := NewExecution(self, addr, input, gas, closure.Price, value)
- ret, err := msg.Exec(addr, closure)
+ ret, err := msg.Create(closure)
if err != nil {
stack.Push(ethutil.BigFalse)
@@ -857,6 +868,7 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
vmlogger.Debugf("(pc) %-3v Invalid opcode %x\n", pc, op)
//panic(fmt.Sprintf("Invalid opcode %x", op))
+ closure.ReturnGas(big.NewInt(1), nil)
return closure.Return(nil), fmt.Errorf("Invalid opcode %x", op)
}