Minor improvements and fixes to the new vm structure
This commit is contained in:
@@ -18,7 +18,7 @@ func Disassemble(script []byte) (asm []string) {
|
||||
// Get the opcode (it must be an opcode!)
|
||||
op := OpCode(val)
|
||||
|
||||
asm = append(asm, fmt.Sprintf("%04v: %v", pc, op))
|
||||
asm = append(asm, fmt.Sprintf("%v", op))
|
||||
|
||||
switch op {
|
||||
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:
|
||||
@@ -32,7 +32,7 @@ func Disassemble(script []byte) (asm []string) {
|
||||
if len(data) == 0 {
|
||||
data = []byte{0}
|
||||
}
|
||||
asm = append(asm, fmt.Sprintf("%04v: 0x%x", pc, data))
|
||||
asm = append(asm, fmt.Sprintf("0x%x", data))
|
||||
|
||||
pc.Add(pc, big.NewInt(a-1))
|
||||
}
|
||||
|
@@ -48,7 +48,6 @@ type Environment interface {
|
||||
Coinbase() []byte
|
||||
Time() int64
|
||||
Difficulty() *big.Int
|
||||
Data() []string
|
||||
Value() *big.Int
|
||||
}
|
||||
|
||||
@@ -420,7 +419,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
require(2)
|
||||
val, th := stack.Popn()
|
||||
if th.Cmp(big.NewInt(32)) < 0 && th.Cmp(big.NewInt(int64(len(val.Bytes())))) < 0 {
|
||||
byt := big.NewInt(int64(val.Bytes()[th.Int64()]))
|
||||
byt := big.NewInt(int64(ethutil.LeftPadBytes(val.Bytes(), 32)[th.Int64()]))
|
||||
stack.Push(byt)
|
||||
|
||||
self.Printf(" => 0x%x", byt.Bytes())
|
||||
@@ -530,10 +529,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
}
|
||||
|
||||
code := closure.Code[cOff : cOff+l]
|
||||
//fmt.Println("len:", l, "code off:", cOff, "mem off:", mOff)
|
||||
|
||||
mem.Set(mOff, l, code)
|
||||
//fmt.Println(Code(mem.Get(mOff, l)))
|
||||
case GASPRICE:
|
||||
stack.Push(closure.Price)
|
||||
|
||||
@@ -638,7 +635,7 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
// Add the change to manifest
|
||||
self.env.State().Manifest().AddStorageChange(closure.Object(), loc.Bytes(), val)
|
||||
|
||||
self.Printf(" {0x%x : 0x%x}", loc, val)
|
||||
self.Printf(" {0x%x : 0x%x}", loc.Bytes(), val.Bytes())
|
||||
case JUMP:
|
||||
require(1)
|
||||
pc = stack.Pop()
|
||||
@@ -802,7 +799,6 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||
return closure.Return(nil), nil
|
||||
default:
|
||||
vmlogger.Debugf("(pc) %-3v Invalid opcode %x\n", pc, op)
|
||||
fmt.Println(ethstate.Code(closure.Code))
|
||||
|
||||
return closure.Return(nil), fmt.Errorf("Invalid opcode %x", op)
|
||||
}
|
||||
|
@@ -15,17 +15,14 @@ import (
|
||||
type TestEnv struct {
|
||||
}
|
||||
|
||||
func (self TestEnv) GetObject() Object { return nil }
|
||||
func (self TestEnv) Origin() []byte { return nil }
|
||||
func (self TestEnv) BlockNumber() *big.Int { return nil }
|
||||
func (self TestEnv) PrevHash() []byte { return nil }
|
||||
func (self TestEnv) Coinbase() []byte { return nil }
|
||||
func (self TestEnv) Time() int64 { return 0 }
|
||||
func (self TestEnv) Difficulty() *big.Int { return nil }
|
||||
func (self TestEnv) Data() []string { return nil }
|
||||
func (self TestEnv) Value() *big.Int { return nil }
|
||||
func (self TestEnv) GetBalance(addr []byte) *big.Int { return nil }
|
||||
func (self TestEnv) State() *ethstate.State { return nil }
|
||||
func (self TestEnv) Origin() []byte { return nil }
|
||||
func (self TestEnv) BlockNumber() *big.Int { return nil }
|
||||
func (self TestEnv) PrevHash() []byte { return nil }
|
||||
func (self TestEnv) Coinbase() []byte { return nil }
|
||||
func (self TestEnv) Time() int64 { return 0 }
|
||||
func (self TestEnv) Difficulty() *big.Int { return nil }
|
||||
func (self TestEnv) Value() *big.Int { return nil }
|
||||
func (self TestEnv) State() *ethstate.State { return nil }
|
||||
|
||||
func TestVm(t *testing.T) {
|
||||
ethlog.AddLogSystem(ethlog.NewStdLogSystem(os.Stdout, log.LstdFlags, ethlog.LogLevel(4)))
|
||||
|
Reference in New Issue
Block a user