diff options
Diffstat (limited to 'src/errors')
| -rw-r--r-- | src/errors/errors.go | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/errors/errors.go b/src/errors/errors.go index ebb136cdd4..51175b13c8 100644 --- a/src/errors/errors.go +++ b/src/errors/errors.go @@ -5,7 +5,10 @@ // Package errors implements functions to manipulate errors. package errors -import "runtime" +import ( + "internal/errinternal" + "runtime" +) // New returns an error that formats as the given text. // @@ -15,21 +18,33 @@ func New(text string) error { // Inline call to errors.Callers to improve performance. var s Frame runtime.Callers(2, s.frames[:]) - return &errorString{text, s} + return &errorString{text, nil, s} +} + +func init() { + errinternal.NewError = func(text string, err error) error { + var s Frame + runtime.Callers(3, s.frames[:]) + return &errorString{text, err, s} + } } // errorString is a trivial implementation of error. type errorString struct { s string + err error frame Frame } func (e *errorString) Error() string { + if e.err != nil { + return e.s + ": " + e.err.Error() + } return e.s } func (e *errorString) FormatError(p Printer) (next error) { p.Print(e.s) e.frame.Format(p) - return nil + return e.err } |
