diff options
author | Rob Pike <r@golang.org> | 2009-07-16 17:55:16 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2009-07-16 17:55:16 -0700 |
commit | 4ce5d4547f0763577cde3a21b31c9a88377b4094 (patch) | |
tree | a5f6570044c45fa578f323463eec64db0684d490 /src/pkg/gob/decoder.go | |
parent | 0355b4a281c8d3236b6c4c16bbe9bc5117397f10 (diff) | |
download | golang-4ce5d4547f0763577cde3a21b31c9a88377b4094.tar.gz |
- allow wire type and receive type to differ.
- still TODO: ignoring struct fields.
R=rsc
DELTA=309 (240 added, 2 deleted, 67 changed)
OCL=31750
CL=31750
Diffstat (limited to 'src/pkg/gob/decoder.go')
-rw-r--r-- | src/pkg/gob/decoder.go | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/pkg/gob/decoder.go b/src/pkg/gob/decoder.go index 9257f7c23..9c5a75554 100644 --- a/src/pkg/gob/decoder.go +++ b/src/pkg/gob/decoder.go @@ -42,7 +42,7 @@ func (dec *Decoder) recvType(id TypeId) { // Type: wire := new(wireType); - decode(dec.state.b, wire); + decode(dec.state.b, tWireType, wire); // Remember we've seen this type. dec.seen[id] = wire; } @@ -86,7 +86,7 @@ func (dec *Decoder) Decode(e interface{}) os.Error { return dec.state.err } - // Is it a type? + // Is it a new type? if id < 0 { // 0 is the error state, handled above // If the id is negative, we have a type. dec.recvType(-id); @@ -97,7 +97,9 @@ func (dec *Decoder) Decode(e interface{}) os.Error { } // No, it's a value. + typeLock.Lock(); info := getTypeInfo(rt); + typeLock.Unlock(); // Check type compatibility. // TODO(r): need to make the decoder work correctly if the wire type is compatible @@ -108,7 +110,7 @@ func (dec *Decoder) Decode(e interface{}) os.Error { } // Receive a value. - decode(dec.state.b, e); + decode(dec.state.b, id, e); return dec.state.err } |