// New creates and returns a new Matcher implementing the given pattern. // The pattern syntax is defined in the package doc comment. // // In addition to the pattern syntax syntax, New("") returns nil, nil. // The nil *Matcher is valid for use: it returns true from ShouldEnable // and false from ShouldPrint for all changes. Callers can avoid calling // [Hash], [Matcher.ShouldEnable], and [Matcher.ShouldPrint] entirely // when they recognize the nil Matcher. func New(pattern string) (*Matcher, error) { … } type Matcher … type cond … // MarkerOnly reports whether it is okay to print only the marker for // a given change, omitting the identifying information. // MarkerOnly returns true when bisect is using the printed reports // only for an intermediate search step, not for showing to users. func (m *Matcher) MarkerOnly() bool { … } // ShouldEnable reports whether the change with the given id should be enabled. func (m *Matcher) ShouldEnable(id uint64) bool { … } // ShouldPrint reports whether to print identifying information about the change with the given id. func (m *Matcher) ShouldPrint(id uint64) bool { … } // matchResult returns the result from the first condition that matches id. func (m *Matcher) matchResult(id uint64) bool { … } // FileLine reports whether the change identified by file and line should be enabled. // If the change should be printed, FileLine prints a one-line report to w. func (m *Matcher) FileLine(w Writer, file string, line int) bool { … } // fileLine does the real work for FileLine. // This lets FileLine's body handle m == nil and potentially be inlined. func (m *Matcher) fileLine(w Writer, file string, line int) bool { … } // printFileLine prints a non-marker-only report for file:line to w. func printFileLine(w Writer, h uint64, file string, line int) error { … } // appendFileLine appends file:line to dst, returning the extended slice. func appendFileLine(dst []byte, file string, line int) []byte { … } // MatchStack assigns the current call stack a change ID. // If the stack should be printed, MatchStack prints it. // Then MatchStack reports whether a change at the current call stack should be enabled. func (m *Matcher) Stack(w Writer) bool { … } // stack does the real work for Stack. // This lets stack's body handle m == nil and potentially be inlined. func (m *Matcher) stack(w Writer) bool { … } type Writer … // PrintMarker prints to w a one-line report containing only the marker for h. // It is appropriate to use when [Matcher.ShouldPrint] and [Matcher.MarkerOnly] both return true. func PrintMarker(w Writer, h uint64) error { … } // printStack prints to w a multi-line report containing a formatting of the call stack stk, // with each line preceded by the marker for h. func printStack(w Writer, h uint64, stk []uintptr) error { … } // Marker returns the match marker text to use on any line reporting details // about a match of the given ID. // It always returns the hexadecimal format. func Marker(id uint64) string { … } // AppendMarker is like [Marker] but appends the marker to dst. func AppendMarker(dst []byte, id uint64) []byte { … } // CutMarker finds the first match marker in line and removes it, // returning the shortened line (with the marker removed), // the ID from the match marker, // and whether a marker was found at all. // If there is no marker, CutMarker returns line, 0, false. func CutMarker(line string) (short string, id uint64, ok bool) { … } // Hash computes a hash of the data arguments, // each of which must be of type string, byte, int, uint, int32, uint32, int64, uint64, uintptr, or a slice of one of those types. func Hash(data ...any) uint64 { … } type parseError … func (e *parseError) Error() string { … } const offset64 … const prime64 … func fnv(h uint64, x byte) uint64 { … } func fnvString(h uint64, x string) uint64 { … } func fnvUint64(h uint64, x uint64) uint64 { … } func fnvUint32(h uint64, x uint32) uint64 { … } type dedup … // seen records that h has now been seen and reports whether it was seen before. // When seen returns false, the caller is expected to print a report for h. func (d *dedup) seen(h uint64) bool { … } // seenLossy is a variant of seen that avoids a lock by using a cache of recently seen hashes. // Each cache entry is N-way set-associative: h can appear in any of the slots. // If h does not appear in any of them, then it is inserted into a random slot, // overwriting whatever was there before. func (d *dedup) seenLossy(h uint64) bool { … }