Patch for concurrent iterator & others (onto v1.11.6) #386

Closed
roysc wants to merge 1565 commits from v1.11.6-statediff-v5 into master
5 changed files with 12 additions and 9 deletions
Showing only changes of commit 9c82c646e4 - Show all commits

View File

@ -55,7 +55,7 @@ type fourByteTracer struct {
// newFourByteTracer returns a native go tracer which collects // newFourByteTracer returns a native go tracer which collects
// 4 byte-identifiers of a tx, and implements vm.EVMLogger. // 4 byte-identifiers of a tx, and implements vm.EVMLogger.
func newFourByteTracer() tracers.Tracer { func newFourByteTracer(ctx *tracers.Context) tracers.Tracer {
t := &fourByteTracer{ t := &fourByteTracer{
ids: make(map[string]int), ids: make(map[string]int),
} }

View File

@ -56,7 +56,7 @@ type callTracer struct {
// newCallTracer returns a native go tracer which tracks // newCallTracer returns a native go tracer which tracks
// call frames of a tx, and implements vm.EVMLogger. // call frames of a tx, and implements vm.EVMLogger.
func newCallTracer() tracers.Tracer { func newCallTracer(ctx *tracers.Context) tracers.Tracer {
// First callframe contains tx context info // First callframe contains tx context info
// and is populated on start and end. // and is populated on start and end.
return &callTracer{callstack: make([]callFrame, 1)} return &callTracer{callstack: make([]callFrame, 1)}

View File

@ -35,7 +35,7 @@ func init() {
type noopTracer struct{} type noopTracer struct{}
// newNoopTracer returns a new noop tracer. // newNoopTracer returns a new noop tracer.
func newNoopTracer() tracers.Tracer { func newNoopTracer(ctx *tracers.Context) tracers.Tracer {
return &noopTracer{} return &noopTracer{}
} }

View File

@ -51,7 +51,7 @@ type prestateTracer struct {
reason error // Textual reason for the interruption reason error // Textual reason for the interruption
} }
func newPrestateTracer() tracers.Tracer { func newPrestateTracer(ctx *tracers.Context) tracers.Tracer {
// First callframe contains tx context info // First callframe contains tx context info
// and is populated on start and end. // and is populated on start and end.
return &prestateTracer{prestate: prestate{}} return &prestateTracer{prestate: prestate{}}

View File

@ -45,6 +45,9 @@ func init() {
tracers.RegisterLookup(false, lookup) tracers.RegisterLookup(false, lookup)
} }
// ctorFn is the constructor signature of a native tracer.
type ctorFn = func(*tracers.Context) tracers.Tracer
/* /*
ctors is a map of package-local tracer constructors. ctors is a map of package-local tracer constructors.
@ -57,12 +60,12 @@ The go spec (https://golang.org/ref/spec#Package_initialization) says
Hence, we cannot make the map in init, but must make it upon first use. Hence, we cannot make the map in init, but must make it upon first use.
*/ */
var ctors map[string]func() tracers.Tracer var ctors map[string]ctorFn
// register is used by native tracers to register their presence. // register is used by native tracers to register their presence.
func register(name string, ctor func() tracers.Tracer) { func register(name string, ctor ctorFn) {
if ctors == nil { if ctors == nil {
ctors = make(map[string]func() tracers.Tracer) ctors = make(map[string]ctorFn)
} }
ctors[name] = ctor ctors[name] = ctor
} }
@ -70,10 +73,10 @@ func register(name string, ctor func() tracers.Tracer) {
// lookup returns a tracer, if one can be matched to the given name. // lookup returns a tracer, if one can be matched to the given name.
func lookup(name string, ctx *tracers.Context) (tracers.Tracer, error) { func lookup(name string, ctx *tracers.Context) (tracers.Tracer, error) {
if ctors == nil { if ctors == nil {
ctors = make(map[string]func() tracers.Tracer) ctors = make(map[string]ctorFn)
} }
if ctor, ok := ctors[name]; ok { if ctor, ok := ctors[name]; ok {
return ctor(), nil return ctor(ctx), nil
} }
return nil, errors.New("no tracer found") return nil, errors.New("no tracer found")
} }