aboutsummaryrefslogtreecommitdiff
path: root/src/errors/errors.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/errors/errors.go')
-rw-r--r--src/errors/errors.go21
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
}