diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2017-05-23 16:52:11 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2017-05-23 16:52:11 +0800 |
commit | 10582a97ca3d147b29e1ca1c4069ce785a3ebde7 (patch) | |
tree | a50c4943156e71175048f3b64ea7b787a720adb7 /core | |
parent | e16a7ef60ff1dedc3fe8f16e932466dc057787f7 (diff) | |
download | go-tangerine-10582a97ca3d147b29e1ca1c4069ce785a3ebde7.tar.gz go-tangerine-10582a97ca3d147b29e1ca1c4069ce785a3ebde7.tar.zst go-tangerine-10582a97ca3d147b29e1ca1c4069ce785a3ebde7.zip |
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.
Diffstat (limited to 'core')
-rw-r--r-- | core/vm/instructions.go | 2 | ||||
-rw-r--r-- | 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 c0ac911ac..42f1781d8 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 2d1b7bb82..f4777c5b3 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 { |