diff options
| author | Christine Dodrill <me@christine.website> | 2017-05-20 15:43:42 -0700 |
|---|---|---|
| committer | Christine Dodrill <me@christine.website> | 2017-05-20 15:43:42 -0700 |
| commit | 9cbb20aea2d6b1979a47af9956dbcc8dbe2a2e08 (patch) | |
| tree | 9d3b8a93d647484a490b1db5907d7b87b85081a9 /vendor/github.com/Xe/ln/stack.go | |
| parent | d9e24cd8978458ee72c98ad0c13316907517e499 (diff) | |
| download | xesite-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.go | 44 |
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)] +} |
