From 4ce5d4547f0763577cde3a21b31c9a88377b4094 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Thu, 16 Jul 2009 17:55:16 -0700 Subject: - 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 --- src/pkg/gob/decoder.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/pkg/gob/decoder.go') 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 } -- cgit v1.2.3