diff options
Diffstat (limited to 'src/encoding/json/encode.go')
| -rw-r--r-- | src/encoding/json/encode.go | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/encoding/json/encode.go b/src/encoding/json/encode.go index 1e45e445d9..68512d0225 100644 --- a/src/encoding/json/encode.go +++ b/src/encoding/json/encode.go @@ -17,7 +17,6 @@ import ( "fmt" "math" "reflect" - "runtime" "sort" "strconv" "strings" @@ -286,21 +285,20 @@ func newEncodeState() *encodeState { func (e *encodeState) marshal(v interface{}, opts encOpts) (err error) { defer func() { if r := recover(); r != nil { - if _, ok := r.(runtime.Error); ok { + if je, ok := r.(jsonError); ok { + err = je.error + } else { panic(r) } - if s, ok := r.(string); ok { - panic(s) - } - err = r.(error) } }() e.reflectValue(reflect.ValueOf(v), opts) return nil } +// error aborts the encoding by panicking with err wrapped in jsonError. func (e *encodeState) error(err error) { - panic(err) + panic(jsonError{err}) } func isEmptyValue(v reflect.Value) bool { |
