diff options
author | obscuren <geffobscura@gmail.com> | 2015-01-03 00:35:55 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-01-03 00:35:55 +0800 |
commit | 55e55826ee3b763be8805dcdef0468a179619ba1 (patch) | |
tree | 067d0cdce0e6456a4feb5453ef1d33e3aa5c80cb /vm/vm_debug.go | |
parent | 530953050ad0cf99d2a354c165b431d111baa1e3 (diff) | |
download | go-tangerine-55e55826ee3b763be8805dcdef0468a179619ba1.tar go-tangerine-55e55826ee3b763be8805dcdef0468a179619ba1.tar.gz go-tangerine-55e55826ee3b763be8805dcdef0468a179619ba1.tar.bz2 go-tangerine-55e55826ee3b763be8805dcdef0468a179619ba1.tar.lz go-tangerine-55e55826ee3b763be8805dcdef0468a179619ba1.tar.xz go-tangerine-55e55826ee3b763be8805dcdef0468a179619ba1.tar.zst go-tangerine-55e55826ee3b763be8805dcdef0468a179619ba1.zip |
Changed JUMP(I) behaviour.
* All jumps must land on a JUMPDEST instruction byte.
* The byte may not be part of a PUSH*
Diffstat (limited to 'vm/vm_debug.go')
-rw-r--r-- | vm/vm_debug.go | 20 |
1 files changed, 2 insertions, 18 deletions
diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 1b9c480f8..6ad385fd0 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -83,29 +83,13 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price * jump = func(from uint64, to *big.Int) { p := to.Uint64() - self.Printf(" ~> %v", to) - /* NOTE: new model. Will change soon nop := OpCode(context.GetOp(p)) - if nop != JUMPDEST { + if !destinations.Has(p) { panic(fmt.Sprintf("invalid jump destination (%v) %v", nop, p)) } + self.Printf(" ~> %v", to) pc = to.Uint64() - */ - // Return to start - if p == 0 { - pc = 0 - } else { - nop := OpCode(context.GetOp(p)) - if !(nop == JUMPDEST || destinations[from] != nil) { - panic(fmt.Sprintf("invalid jump destination (%v) %v", nop, p)) - } else if nop == JUMP || nop == JUMPI { - panic(fmt.Sprintf("not allowed to JUMP(I) in to JUMP")) - } - - pc = to.Uint64() - - } self.Endl() } |