From 10582a97ca3d147b29e1ca1c4069ce785a3ebde7 Mon Sep 17 00:00:00 2001 From: Jeffrey Wilcke Date: Tue, 23 May 2017 10:52:11 +0200 Subject: [PATCH] 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. --- core/vm/instructions.go | 2 +- core/vm/stack.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/vm/instructions.go b/core/vm/instructions.go index c0ac911ac0..42f1781d88 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -731,7 +731,7 @@ func makePush(size uint64, pushByteSize int) executionFunc { // make push instruction function func makeDup(size int64) executionFunc { 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 } } diff --git a/core/vm/stack.go b/core/vm/stack.go index 2d1b7bb82d..f4777c5b3f 100644 --- a/core/vm/stack.go +++ b/core/vm/stack.go @@ -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] } -func (st *Stack) dup(n int) { - st.push(new(big.Int).Set(st.data[st.len()-n])) +func (st *Stack) dup(pool *intPool, n int) { + st.push(pool.get().Set(st.data[st.len()-n])) } func (st *Stack) peek() *big.Int {