aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/Xe/ln/stack.go
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2017-05-20 15:43:42 -0700
committerChristine Dodrill <me@christine.website>2017-05-20 15:43:42 -0700
commit9cbb20aea2d6b1979a47af9956dbcc8dbe2a2e08 (patch)
tree9d3b8a93d647484a490b1db5907d7b87b85081a9 /vendor/github.com/Xe/ln/stack.go
parentd9e24cd8978458ee72c98ad0c13316907517e499 (diff)
downloadxesite-9cbb20aea2d6b1979a47af9956dbcc8dbe2a2e08.tar.xz
xesite-9cbb20aea2d6b1979a47af9956dbcc8dbe2a2e08.zip
add vendor dependencies
Diffstat (limited to 'vendor/github.com/Xe/ln/stack.go')
-rw-r--r--vendor/github.com/Xe/ln/stack.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/vendor/github.com/Xe/ln/stack.go b/vendor/github.com/Xe/ln/stack.go
new file mode 100644
index 0000000..1cf1e7a
--- /dev/null
+++ b/vendor/github.com/Xe/ln/stack.go
@@ -0,0 +1,44 @@
+package ln
+
+import (
+ "os"
+ "runtime"
+ "strings"
+)
+
+type frame struct {
+ filename string
+ function string
+ lineno int
+}
+
+// skips 2 frames, since Caller returns the current frame, and we need
+// the caller's caller.
+func callersFrame() frame {
+ var out frame
+ pc, file, line, ok := runtime.Caller(3)
+ if !ok {
+ return out
+ }
+ srcLoc := strings.LastIndex(file, "/src/")
+ if srcLoc >= 0 {
+ file = file[srcLoc+5:]
+ }
+ out.filename = file
+ out.function = functionName(pc)
+ out.lineno = line
+
+ return out
+}
+
+func functionName(pc uintptr) string {
+ fn := runtime.FuncForPC(pc)
+ if fn == nil {
+ return "???"
+ }
+ name := fn.Name()
+ beg := strings.LastIndex(name, string(os.PathSeparator))
+ return name[beg+1:]
+ // end := strings.LastIndex(name, string(os.PathSeparator))
+ // return name[end+1 : len(name)]
+}