diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-06-04 00:11:56 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-06-04 00:11:56 +0800 |
commit | 122d2db0955c357abc84aed6686d956a4b435ccc (patch) | |
tree | d4e1f0aaf95b35d2240f1c10e85258c26fe0fad4 /core/vm/context.go | |
parent | 0cd72369f788dd6ef9e515370e049a7447a41a10 (diff) | |
parent | c9ed9d253a535678ea9e1fcd2a255c7508ef0c63 (diff) | |
download | go-tangerine-122d2db0955c357abc84aed6686d956a4b435ccc.tar go-tangerine-122d2db0955c357abc84aed6686d956a4b435ccc.tar.gz go-tangerine-122d2db0955c357abc84aed6686d956a4b435ccc.tar.bz2 go-tangerine-122d2db0955c357abc84aed6686d956a4b435ccc.tar.lz go-tangerine-122d2db0955c357abc84aed6686d956a4b435ccc.tar.xz go-tangerine-122d2db0955c357abc84aed6686d956a4b435ccc.tar.zst go-tangerine-122d2db0955c357abc84aed6686d956a4b435ccc.zip |
Merge pull request #1150 from fjl/fix-jumpdest
core/vm: improve JUMPDEST analysis
Diffstat (limited to 'core/vm/context.go')
-rw-r--r-- | core/vm/context.go | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/core/vm/context.go b/core/vm/context.go index 29bb9f74e..de03f84f0 100644 --- a/core/vm/context.go +++ b/core/vm/context.go @@ -16,6 +16,8 @@ type Context struct { caller ContextRef self ContextRef + jumpdests destinations // result of JUMPDEST analysis. + Code []byte CodeAddr *common.Address @@ -24,10 +26,17 @@ type Context struct { Args []byte } -// Create a new context for the given data items +// Create a new context for the given data items. func NewContext(caller ContextRef, object ContextRef, value, gas, price *big.Int) *Context { c := &Context{caller: caller, self: object, Args: nil} + if parent, ok := caller.(*Context); ok { + // Reuse JUMPDEST analysis from parent context if available. + c.jumpdests = parent.jumpdests + } else { + c.jumpdests = make(destinations) + } + // Gas should be a pointer so it can safely be reduced through the run // This pointer will be off the state transition c.Gas = gas //new(big.Int).Set(gas) |