diff options
| author | Ivan Krasin <krasin@golang.org> | 2010-01-06 07:25:17 -0800 | 
|---|---|---|
| committer | Ivan Krasin <krasin@golang.org> | 2010-01-06 07:25:17 -0800 | 
| commit | d7f9d03638a68e2632400b75ecfaa71f35a33d88 (patch) | |
| tree | 377cf41efd1bdb9793c6d2670420420d2d048a86 /src/pkg/json/struct.go | |
| parent | 218c405e70449ae29c7293e7e5bbe4343f41e725 (diff) | |
| download | golang-d7f9d03638a68e2632400b75ecfaa71f35a33d88.tar.gz | |
Propagate error to the caller in json.Marshal. Fixes issue 445.
R=rsc, imkrasin
CC=golang-dev
http://codereview.appspot.com/179125
Committer: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/pkg/json/struct.go')
| -rw-r--r-- | src/pkg/json/struct.go | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/src/pkg/json/struct.go b/src/pkg/json/struct.go index 7b50301e4..955ec7c87 100644 --- a/src/pkg/json/struct.go +++ b/src/pkg/json/struct.go @@ -366,11 +366,9 @@ func writeStruct(w io.Writer, val *reflect.StructValue) os.Error {  	for i := 0; i < val.NumField(); i++ {  		fieldValue := val.Field(i)  		fmt.Fprintf(w, "%q:", typ.Field(i).Name) -  		if err := writeValue(w, fieldValue); err != nil {  			return err  		} -  		if i < val.NumField()-1 {  			fmt.Fprint(w, ",")  		} @@ -398,14 +396,19 @@ func writeValue(w io.Writer, val reflect.Value) (err os.Error) {  	case *reflect.StructValue:  		err = writeStruct(w, v)  	case *reflect.ChanValue, -		*reflect.PtrValue,  		*reflect.UnsafePointerValue:  		err = &MarshalError{val.Type()}  	case *reflect.InterfaceValue:  		if v.IsNil() {  			fmt.Fprint(w, "null")  		} else { -			err = &MarshalError{val.Type()} +			err = writeValue(w, v.Elem()) +		} +	case *reflect.PtrValue: +		if v.IsNil() { +			fmt.Fprint(w, "null") +		} else { +			err = writeValue(w, v.Elem())  		}  	default:  		value := val.(reflect.Value) | 
