aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/json/encode.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/encoding/json/encode.go')
-rw-r--r--src/encoding/json/encode.go12
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 {