core/vm: expose intpool to stack dup method

Improve the duplication method of the stack to reuse big ints by passing
in an existing integer pool.
pull/14336/head
Jeffrey Wilcke 8 years ago
parent e16a7ef60f
commit 10582a97ca
  1. 2
      core/vm/instructions.go
  2. 4
      core/vm/stack.go

@ -731,7 +731,7 @@ func makePush(size uint64, pushByteSize int) executionFunc {
// make push instruction function // make push instruction function
func makeDup(size int64) executionFunc { func makeDup(size int64) executionFunc {
return func(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { return func(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) {
stack.dup(int(size)) stack.dup(evm.interpreter.intPool, int(size))
return nil, nil return nil, nil
} }
} }

@ -60,8 +60,8 @@ func (st *Stack) swap(n int) {
st.data[st.len()-n], st.data[st.len()-1] = st.data[st.len()-1], st.data[st.len()-n] st.data[st.len()-n], st.data[st.len()-1] = st.data[st.len()-1], st.data[st.len()-n]
} }
func (st *Stack) dup(n int) { func (st *Stack) dup(pool *intPool, n int) {
st.push(new(big.Int).Set(st.data[st.len()-n])) st.push(pool.get().Set(st.data[st.len()-n]))
} }
func (st *Stack) peek() *big.Int { func (st *Stack) peek() *big.Int {

Loading…
Cancel
Save