diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-08-08 21:36:26 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-08-08 21:36:26 +0800 |
commit | c93f0b9f4ba84933110435a80055cdaabd078159 (patch) | |
tree | c51e0d5704aa08595ebdd7e03b61309fe69fe848 /core/vm/stack.go | |
parent | 312128384b1c32306123f8ad3be1be32bbd8235c (diff) | |
parent | ac697326a6045eaa760b159e4bda37c57be61cbf (diff) | |
download | dexon-c93f0b9f4ba84933110435a80055cdaabd078159.tar dexon-c93f0b9f4ba84933110435a80055cdaabd078159.tar.gz dexon-c93f0b9f4ba84933110435a80055cdaabd078159.tar.bz2 dexon-c93f0b9f4ba84933110435a80055cdaabd078159.tar.lz dexon-c93f0b9f4ba84933110435a80055cdaabd078159.tar.xz dexon-c93f0b9f4ba84933110435a80055cdaabd078159.tar.zst dexon-c93f0b9f4ba84933110435a80055cdaabd078159.zip |
Merge pull request #1490 from obscuren/jit-vm
core/vm: jit vm
Diffstat (limited to 'core/vm/stack.go')
-rw-r--r-- | core/vm/stack.go | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/core/vm/stack.go b/core/vm/stack.go index 3d669b2f2..009ac9e1b 100644 --- a/core/vm/stack.go +++ b/core/vm/stack.go @@ -21,38 +21,36 @@ import ( "math/big" ) -func newstack() *stack { - return &stack{} -} - +// stack is an object for basic stack operations. Items popped to the stack are +// expected to be changed and modified. stack does not take care of adding newly +// initialised objects. type stack struct { data []*big.Int - ptr int +} + +func newstack() *stack { + return &stack{} } func (st *stack) Data() []*big.Int { - return st.data[:st.ptr] + return st.data } func (st *stack) push(d *big.Int) { // NOTE push limit (1024) is checked in baseCheck - stackItem := new(big.Int).Set(d) - if len(st.data) > st.ptr { - st.data[st.ptr] = stackItem - } else { - st.data = append(st.data, stackItem) - } - st.ptr++ + //stackItem := new(big.Int).Set(d) + //st.data = append(st.data, stackItem) + st.data = append(st.data, d) } func (st *stack) pop() (ret *big.Int) { - st.ptr-- - ret = st.data[st.ptr] + ret = st.data[len(st.data)-1] + st.data = st.data[:len(st.data)-1] return } func (st *stack) len() int { - return st.ptr + return len(st.data) } func (st *stack) swap(n int) { @@ -60,7 +58,7 @@ func (st *stack) swap(n int) { } func (st *stack) dup(n int) { - st.push(st.data[st.len()-n]) + st.push(new(big.Int).Set(st.data[st.len()-n])) } func (st *stack) peek() *big.Int { |