forked from cerc-io/plugeth
core/vm: RETURN op code returns pointer to memory rather than copy
This commit is contained in:
parent
648b352424
commit
f5af1fdca8
@ -49,6 +49,18 @@ func (self *Memory) Get(offset, size int64) (cpy []byte) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *Memory) GetPtr(offset, size int64) []byte {
|
||||||
|
if size == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(self.store) > int(offset) {
|
||||||
|
return self.store[offset : offset+size]
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Memory) Len() int {
|
func (m *Memory) Len() int {
|
||||||
return len(m.store)
|
return len(m.store)
|
||||||
}
|
}
|
||||||
|
@ -695,7 +695,7 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
self.Printf("resume %x (%v)", context.Address(), context.Gas)
|
self.Printf("resume %x (%v)", context.Address(), context.Gas)
|
||||||
case RETURN:
|
case RETURN:
|
||||||
offset, size := stack.pop(), stack.pop()
|
offset, size := stack.pop(), stack.pop()
|
||||||
ret := mem.Get(offset.Int64(), size.Int64())
|
ret := mem.GetPtr(offset.Int64(), size.Int64())
|
||||||
|
|
||||||
self.Printf(" => [%v, %v] (%d) 0x%x", offset, size, len(ret), ret).Endl()
|
self.Printf(" => [%v, %v] (%d) 0x%x", offset, size, len(ret), ret).Endl()
|
||||||
|
|
||||||
|
@ -286,13 +286,13 @@ func TestInputLimitsLight(t *testing.T) {
|
|||||||
RunVmTest(fn, t)
|
RunVmTest(fn, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStateExample(t *testing.T) {
|
func TestStateSystemOperations(t *testing.T) {
|
||||||
const fn = "../files/StateTests/stExample.json"
|
const fn = "../files/StateTests/stSystemOperationsTest.json"
|
||||||
RunVmTest(fn, t)
|
RunVmTest(fn, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStateSystemOperations(t *testing.T) {
|
func TestStateExample(t *testing.T) {
|
||||||
const fn = "../files/StateTests/stSystemOperationsTest.json"
|
const fn = "../files/StateTests/stExample.json"
|
||||||
RunVmTest(fn, t)
|
RunVmTest(fn, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user