refill stack frame buffer after it's exhausted

This commit is contained in:
Mike Auclair 2024-06-24 18:11:07 +00:00
parent 4a90eff4ae
commit 28e0be5092

View File

@ -24,6 +24,8 @@ import (
"github.com/stretchr/testify/assert/yaml" "github.com/stretchr/testify/assert/yaml"
) )
const stackFrameBufferSize = 10
//go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_format.go.tmpl" //go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_format.go.tmpl"
// TestingT is an interface wrapper around *testing.T // TestingT is an interface wrapper around *testing.T
@ -217,8 +219,14 @@ func CallerInfo() []string {
var name string var name string
callers := []string{} callers := []string{}
pcs := make([]uintptr, 50) pcs := make([]uintptr, stackFrameBufferSize)
n := runtime.Callers(1, pcs) offset := 1
n := runtime.Callers(offset, pcs)
maybeMore := true
if n < stackFrameBufferSize {
maybeMore = false
}
if n == 0 { if n == 0 {
return []string{} return []string{}
} }
@ -269,8 +277,22 @@ func CallerInfo() []string {
} }
if !more { if !more {
// We know we already have less than a buffer's worth of frames
if !maybeMore {
break break
} }
offset += stackFrameBufferSize
n = runtime.Callers(offset, pcs)
if n < stackFrameBufferSize {
maybeMore = false
}
if n == 0 {
break
}
frames = runtime.CallersFrames(pcs[:n])
}
} }
return callers return callers