aboutsummaryrefslogtreecommitdiffstats
path: root/vm
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-12-04 00:35:57 +0800
committerobscuren <geffobscura@gmail.com>2014-12-04 00:35:57 +0800
commitb6cb5272de96185b424d5c6c4a817d99f536d29b (patch)
treea7afe23a0a784ed0f1f2bf6f8ab268fcb891db8d /vm
parent6d99c03d915789c445c2d40579419a16fde2b7c8 (diff)
downloadgo-tangerine-b6cb5272de96185b424d5c6c4a817d99f536d29b.tar
go-tangerine-b6cb5272de96185b424d5c6c4a817d99f536d29b.tar.gz
go-tangerine-b6cb5272de96185b424d5c6c4a817d99f536d29b.tar.bz2
go-tangerine-b6cb5272de96185b424d5c6c4a817d99f536d29b.tar.lz
go-tangerine-b6cb5272de96185b424d5c6c4a817d99f536d29b.tar.xz
go-tangerine-b6cb5272de96185b424d5c6c4a817d99f536d29b.tar.zst
go-tangerine-b6cb5272de96185b424d5c6c4a817d99f536d29b.zip
Descriptive function names for closure getters
Diffstat (limited to 'vm')
-rw-r--r--vm/closure.go57
-rw-r--r--vm/vm_debug.go4
2 files changed, 28 insertions, 33 deletions
diff --git a/vm/closure.go b/vm/closure.go
index 2263236e7..5324ee1ec 100644
--- a/vm/closure.go
+++ b/vm/closure.go
@@ -1,7 +1,5 @@
package vm
-// TODO Re write VM to use values instead of big integers?
-
import (
"math/big"
@@ -17,7 +15,6 @@ type ClosureRef interface {
SetStorage(*big.Int, *ethutil.Value)
}
-// Basic inline closure object which implement the 'closure' interface
type Closure struct {
caller ClosureRef
object ClosureRef
@@ -44,18 +41,8 @@ func NewClosure(msg *state.Message, caller ClosureRef, object ClosureRef, code [
return c
}
-// Retuns the x element in data slice
-func (c *Closure) GetStorage(x *big.Int) *ethutil.Value {
- m := c.object.GetStorage(x)
- if m == nil {
- return ethutil.EmptyValue()
- }
-
- return m
-}
-
-func (c *Closure) Get(x *big.Int) *ethutil.Value {
- return c.Gets(x, big.NewInt(1))
+func (c *Closure) GetValue(x *big.Int) *ethutil.Value {
+ return c.GetRangeValue(x, big.NewInt(1))
}
func (c *Closure) GetOp(x int) OpCode {
@@ -78,7 +65,7 @@ func (c *Closure) GetBytes(x, y int) []byte {
return c.Code[x : x+y]
}
-func (c *Closure) Gets(x, y *big.Int) *ethutil.Value {
+func (c *Closure) GetRangeValue(x, y *big.Int) *ethutil.Value {
if x.Int64() >= int64(len(c.Code)) || y.Int64() >= int64(len(c.Code)) {
return ethutil.NewValue(0)
}
@@ -88,27 +75,21 @@ func (c *Closure) Gets(x, y *big.Int) *ethutil.Value {
return ethutil.NewValue(partial)
}
-func (self *Closure) SetCode(code []byte) {
- self.Code = code
-}
-
+/*
+ * State storage functions
+ */
func (c *Closure) SetStorage(x *big.Int, val *ethutil.Value) {
c.object.SetStorage(x, val)
}
-func (c *Closure) Address() []byte {
- return c.object.Address()
-}
-
-/*
-func (c *Closure) Call(vm VirtualMachine, args []byte) ([]byte, *big.Int, error) {
- c.Args = args
-
- ret, err := vm.RunClosure(c)
+func (c *Closure) GetStorage(x *big.Int) *ethutil.Value {
+ m := c.object.GetStorage(x)
+ if m == nil {
+ return ethutil.EmptyValue()
+ }
- return ret, c.UsedGas, err
+ return m
}
-*/
func (c *Closure) Return(ret []byte) []byte {
// Return the remaining gas to the caller
@@ -117,6 +98,9 @@ func (c *Closure) Return(ret []byte) []byte {
return ret
}
+/*
+ * Gas functions
+ */
func (c *Closure) UseGas(gas *big.Int) bool {
if c.Gas.Cmp(gas) < 0 {
return false
@@ -136,6 +120,17 @@ func (c *Closure) ReturnGas(gas, price *big.Int) {
c.UsedGas.Sub(c.UsedGas, gas)
}
+/*
+ * Set / Get
+ */
func (c *Closure) Caller() ClosureRef {
return c.caller
}
+
+func (c *Closure) Address() []byte {
+ return c.object.Address()
+}
+
+func (self *Closure) SetCode(code []byte) {
+ self.Code = code
+}
diff --git a/vm/vm_debug.go b/vm/vm_debug.go
index 26756fceb..cf234c412 100644
--- a/vm/vm_debug.go
+++ b/vm/vm_debug.go
@@ -737,7 +737,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
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:
a := big.NewInt(int64(op) - int64(PUSH1) + 1)
pc.Add(pc, ethutil.Big1)
- data := closure.Gets(pc, a)
+ data := closure.GetRangeValue(pc, a)
val := ethutil.BigD(data.Bytes())
// Push value to stack
stack.Push(val)
@@ -754,7 +754,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *
self.Printf(" => [%d] 0x%x", n, stack.Peek().Bytes())
- if OpCode(closure.Get(new(big.Int).Add(pc, ethutil.Big1)).Uint()) == POP && OpCode(closure.Get(new(big.Int).Add(pc, big.NewInt(2))).Uint()) == POP {
+ if OpCode(closure.GetValue(new(big.Int).Add(pc, ethutil.Big1)).Uint()) == POP && OpCode(closure.GetValue(new(big.Int).Add(pc, big.NewInt(2))).Uint()) == POP {
fmt.Println(toValue(v))
}
case SWAP1, SWAP2, SWAP3, SWAP4, SWAP5, SWAP6, SWAP7, SWAP8, SWAP9, SWAP10, SWAP11, SWAP12, SWAP13, SWAP14, SWAP15, SWAP16: