aboutsummaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/xerrors/frame.go
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-01-15 01:37:19 +0100
committerGitHub <noreply@github.com>2020-01-15 01:37:19 +0100
commit12aa9caf97bdcb6dc71a8c94c4875f9e0e87022a (patch)
treef0dc54d0ff39dc1f5ad56ecf8619f47ea7f22771 /vendor/golang.org/x/xerrors/frame.go
parent0aa9dba3e1009dbbdf59d47d9370db0de4679730 (diff)
parentf5bda9994d5e6cb1ee42ade5e7786059feedf633 (diff)
downloadpodman-12aa9caf97bdcb6dc71a8c94c4875f9e0e87022a.tar.gz
podman-12aa9caf97bdcb6dc71a8c94c4875f9e0e87022a.tar.bz2
podman-12aa9caf97bdcb6dc71a8c94c4875f9e0e87022a.zip
Merge pull request #4866 from TomSweeneyRedHat/dev/tsweeney/buildah1.13.1
Bump to Buildah v1.13.1
Diffstat (limited to 'vendor/golang.org/x/xerrors/frame.go')
-rw-r--r--vendor/golang.org/x/xerrors/frame.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/vendor/golang.org/x/xerrors/frame.go b/vendor/golang.org/x/xerrors/frame.go
new file mode 100644
index 000000000..0de628ec5
--- /dev/null
+++ b/vendor/golang.org/x/xerrors/frame.go
@@ -0,0 +1,56 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package xerrors
+
+import (
+ "runtime"
+)
+
+// A Frame contains part of a call stack.
+type Frame struct {
+ // Make room for three PCs: the one we were asked for, what it called,
+ // and possibly a PC for skipPleaseUseCallersFrames. See:
+ // https://go.googlesource.com/go/+/032678e0fb/src/runtime/extern.go#169
+ frames [3]uintptr
+}
+
+// Caller returns a Frame that describes a frame on the caller's stack.
+// The argument skip is the number of frames to skip over.
+// Caller(0) returns the frame for the caller of Caller.
+func Caller(skip int) Frame {
+ var s Frame
+ runtime.Callers(skip+1, s.frames[:])
+ return s
+}
+
+// location reports the file, line, and function of a frame.
+//
+// The returned function may be "" even if file and line are not.
+func (f Frame) location() (function, file string, line int) {
+ frames := runtime.CallersFrames(f.frames[:])
+ if _, ok := frames.Next(); !ok {
+ return "", "", 0
+ }
+ fr, ok := frames.Next()
+ if !ok {
+ return "", "", 0
+ }
+ return fr.Function, fr.File, fr.Line
+}
+
+// Format prints the stack as error detail.
+// It should be called from an error's Format implementation
+// after printing any other error detail.
+func (f Frame) Format(p Printer) {
+ if p.Detail() {
+ function, file, line := f.location()
+ if function != "" {
+ p.Printf("%s\n ", function)
+ }
+ if file != "" {
+ p.Printf("%s:%d\n", file, line)
+ }
+ }
+}