diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-11-27 01:05:38 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-11-27 01:05:38 +0000 |
commit | 815ca4d336e254a4869946343460afc8ff6b21c7 (patch) | |
tree | a639e5c4b06bb7971b24112a25fdae25a1b3d863 /libgo/go/encoding/gob | |
parent | 40a373f1d56a77524d9047ab66176b9d2a82cb57 (diff) | |
download | gcc-815ca4d336e254a4869946343460afc8ff6b21c7.tar.gz |
libgo: Update to current Go library.
From-SVN: r205426
Diffstat (limited to 'libgo/go/encoding/gob')
-rw-r--r-- | libgo/go/encoding/gob/doc.go | 12 | ||||
-rw-r--r-- | libgo/go/encoding/gob/gobencdec_test.go | 15 | ||||
-rw-r--r-- | libgo/go/encoding/gob/type.go | 15 |
3 files changed, 32 insertions, 10 deletions
diff --git a/libgo/go/encoding/gob/doc.go b/libgo/go/encoding/gob/doc.go index 28f0c05a5c5..d0acaba1adc 100644 --- a/libgo/go/encoding/gob/doc.go +++ b/libgo/go/encoding/gob/doc.go @@ -86,13 +86,13 @@ Functions and channels will not be sent in a gob. Attempting to encode such a va at top the level will fail. A struct field of chan or func type is treated exactly like an unexported field and is ignored. -Gob can encode a value of any type implementing the GobEncoder, -encoding.BinaryMarshaler, or encoding.TextMarshaler interfaces by calling the -corresponding method, in that order of preference. +Gob can encode a value of any type implementing the GobEncoder or +encoding.BinaryMarshaler interfaces by calling the corresponding method, +in that order of preference. -Gob can decode a value of any type implementing the GobDecoder, -encoding.BinaryUnmarshaler, or encoding.TextUnmarshaler interfaces by calling -the corresponding method, again in that order of preference. +Gob can decode a value of any type implementing the GobDecoder or +encoding.BinaryUnmarshaler interfaces by calling the corresponding method, +again in that order of preference. Encoding Details diff --git a/libgo/go/encoding/gob/gobencdec_test.go b/libgo/go/encoding/gob/gobencdec_test.go index 301551db48a..0193e2b67d4 100644 --- a/libgo/go/encoding/gob/gobencdec_test.go +++ b/libgo/go/encoding/gob/gobencdec_test.go @@ -11,6 +11,7 @@ import ( "errors" "fmt" "io" + "net" "strings" "testing" "time" @@ -767,3 +768,17 @@ func TestGobEncodePtrError(t *testing.T) { t.Fatalf("expected nil, got %v", err2) } } + +func TestNetIP(t *testing.T) { + // Encoding of net.IP{1,2,3,4} in Go 1.1. + enc := []byte{0x07, 0x0a, 0x00, 0x04, 0x01, 0x02, 0x03, 0x04} + + var ip net.IP + err := NewDecoder(bytes.NewReader(enc)).Decode(&ip) + if err != nil { + t.Fatalf("decode: %v", err) + } + if ip.String() != "1.2.3.4" { + t.Errorf("decoded to %v, want 1.2.3.4", ip.String()) + } +} diff --git a/libgo/go/encoding/gob/type.go b/libgo/go/encoding/gob/type.go index 65bf17b7f02..cad14527953 100644 --- a/libgo/go/encoding/gob/type.go +++ b/libgo/go/encoding/gob/type.go @@ -88,18 +88,25 @@ func validUserType(rt reflect.Type) (ut *userTypeInfo, err error) { ut.externalEnc, ut.encIndir = xGob, indir } else if ok, indir := implementsInterface(ut.user, binaryMarshalerInterfaceType); ok { ut.externalEnc, ut.encIndir = xBinary, indir - } else if ok, indir := implementsInterface(ut.user, textMarshalerInterfaceType); ok { - ut.externalEnc, ut.encIndir = xText, indir } + // NOTE(rsc): Would like to allow MarshalText here, but results in incompatibility + // with older encodings for net.IP. See golang.org/issue/6760. + // } else if ok, indir := implementsInterface(ut.user, textMarshalerInterfaceType); ok { + // ut.externalEnc, ut.encIndir = xText, indir + // } + if ok, indir := implementsInterface(ut.user, gobDecoderInterfaceType); ok { ut.externalDec, ut.decIndir = xGob, indir } else if ok, indir := implementsInterface(ut.user, binaryUnmarshalerInterfaceType); ok { ut.externalDec, ut.decIndir = xBinary, indir - } else if ok, indir := implementsInterface(ut.user, textUnmarshalerInterfaceType); ok { - ut.externalDec, ut.decIndir = xText, indir } + // See note above. + // } else if ok, indir := implementsInterface(ut.user, textUnmarshalerInterfaceType); ok { + // ut.externalDec, ut.decIndir = xText, indir + // } + userTypeCache[rt] = ut return } |