Support preserving spew state (seen pointers) across operations and API calls
This commit is contained in:
parent
d3f36f3056
commit
9422b0e545
|
@ -111,6 +111,17 @@ type ConfigState struct {
|
||||||
// provides some degree of stability across runs versus
|
// provides some degree of stability across runs versus
|
||||||
// printing out raw pointers. This can consume much memory.
|
// printing out raw pointers. This can consume much memory.
|
||||||
UseOrdinals bool
|
UseOrdinals bool
|
||||||
|
|
||||||
|
// Preserve state of a spew (dump, format) operation for use
|
||||||
|
// by the next such operation (including across multiple
|
||||||
|
// arguments to a single API call as well as across API
|
||||||
|
// calls). Currently useful only when NoDuplicates is true.
|
||||||
|
PreserveSpewState bool
|
||||||
|
|
||||||
|
// The state of the last spew (dump, format) operation, if
|
||||||
|
// PreserveSpewState was when that operation was started.
|
||||||
|
// Can be copied to a different ConfigState object.
|
||||||
|
SpewState SpewState
|
||||||
}
|
}
|
||||||
|
|
||||||
// Config is the active configuration of the top-level functions.
|
// Config is the active configuration of the top-level functions.
|
||||||
|
|
|
@ -522,10 +522,19 @@ func fdump(cs *ConfigState, w io.Writer, a ...interface{}) {
|
||||||
d := dumpState{w: w, cs: cs}
|
d := dumpState{w: w, cs: cs}
|
||||||
d.pointers = make(map[uintptr]int)
|
d.pointers = make(map[uintptr]int)
|
||||||
if cs.NoDuplicates || cs.UseOrdinals {
|
if cs.NoDuplicates || cs.UseOrdinals {
|
||||||
|
if cs.SpewState.allPointers == nil {
|
||||||
d.allPointers = make(map[uintptr]uintptr)
|
d.allPointers = make(map[uintptr]uintptr)
|
||||||
|
} else {
|
||||||
|
d.allPointers = cs.SpewState.allPointers
|
||||||
|
}
|
||||||
}
|
}
|
||||||
d.dump(reflect.ValueOf(arg))
|
d.dump(reflect.ValueOf(arg))
|
||||||
d.w.Write(newlineBytes)
|
d.w.Write(newlineBytes)
|
||||||
|
if d.allPointers != nil { // cs.NoDuplicates || cs.UseOrdinals
|
||||||
|
if cs.PreserveSpewState {
|
||||||
|
cs.SpewState.allPointers = d.allPointers
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,12 @@ import (
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Wraps the end state of a spew (dump or format) operation for use by
|
||||||
|
// the next operation, if so configured.
|
||||||
|
type SpewState struct {
|
||||||
|
allPointers map[uintptr]uintptr
|
||||||
|
}
|
||||||
|
|
||||||
// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were
|
// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were
|
||||||
// passed with a default Formatter interface returned by NewFormatter. It
|
// passed with a default Formatter interface returned by NewFormatter. It
|
||||||
// returns the formatted string as a value that satisfies error. See
|
// returns the formatted string as a value that satisfies error. See
|
||||||
|
|
Loading…
Reference in New Issue