From d88c09473207c7516483f5b1a1f490a9622fd8f4 Mon Sep 17 00:00:00 2001 From: Kishore Senji Date: Fri, 14 Jan 2022 13:54:36 -0800 Subject: [PATCH] optimize SourceLine to not create a new instance of Error from String method --- stackframe.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/stackframe.go b/stackframe.go index f420849..ef4a8b3 100644 --- a/stackframe.go +++ b/stackframe.go @@ -53,7 +53,7 @@ func (frame *StackFrame) Func() *runtime.Func { func (frame *StackFrame) String() string { str := fmt.Sprintf("%s:%d (0x%x)\n", frame.File, frame.LineNumber, frame.ProgramCounter) - source, err := frame.SourceLine() + source, err := frame.sourceLine() if err != nil { return str } @@ -63,13 +63,21 @@ func (frame *StackFrame) String() string { // SourceLine gets the line of code (from File and Line) of the original source if possible. func (frame *StackFrame) SourceLine() (string, error) { + source, err := frame.sourceLine() + if err != nil { + return source, New(err) + } + return source, err +} + +func (frame *StackFrame) sourceLine() (string, error) { if frame.LineNumber <= 0 { return "???", nil } file, err := os.Open(frame.File) if err != nil { - return "", New(err) + return "", err } defer file.Close() @@ -82,7 +90,7 @@ func (frame *StackFrame) SourceLine() (string, error) { currentLine++ } if err := scanner.Err(); err != nil { - return "", New(err) + return "", err } return "???", nil