summaryrefslogtreecommitdiff
path: root/src/pkg/gob/decoder.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/gob/decoder.go')
-rw-r--r--src/pkg/gob/decoder.go24
1 files changed, 5 insertions, 19 deletions
diff --git a/src/pkg/gob/decoder.go b/src/pkg/gob/decoder.go
index 9c5a75554..609a20484 100644
--- a/src/pkg/gob/decoder.go
+++ b/src/pkg/gob/decoder.go
@@ -83,7 +83,7 @@ func (dec *Decoder) Decode(e interface{}) os.Error {
// Receive a type id.
id := TypeId(decodeInt(dec.state));
if dec.state.err != nil {
- return dec.state.err
+ break;
}
// Is it a new type?
@@ -91,28 +91,14 @@ func (dec *Decoder) Decode(e interface{}) os.Error {
// If the id is negative, we have a type.
dec.recvType(-id);
if dec.state.err != nil {
- return dec.state.err
+ break;
}
continue;
}
// 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
- // but not equal to the local type (e.g, extra fields).
- if info.wire.name() != dec.seen[id].name() {
- dec.state.err = os.ErrorString("gob decode: incorrect type for wire value: want " + info.wire.name() + "; received " + dec.seen[id].name());
- return dec.state.err
- }
-
- // Receive a value.
- decode(dec.state.b, id, e);
-
- return dec.state.err
+ dec.state.err = decode(dec.state.b, id, e);
+ break;
}
- return nil // silence compiler
+ return dec.state.err
}