mirror of
https://github.com/golang/go
synced 2024-11-21 22:24:40 -07:00
gob: generate a better error message in one confusing place
(with maybe more to come) by printing a human-readable representation of a remote type. R=rsc CC=golang-dev https://golang.org/cl/3802045
This commit is contained in:
parent
e9c4f09985
commit
d84317ba58
@ -861,12 +861,22 @@ func (dec *Decoder) compatibleType(fr reflect.Type, fw typeId) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// typeString returns a human-readable description of the type identified by remoteId.
|
||||
func (dec *Decoder) typeString(remoteId typeId) string {
|
||||
if t := idToType[remoteId]; t != nil {
|
||||
// globally known type.
|
||||
return t.string()
|
||||
}
|
||||
return dec.wireType[remoteId].string()
|
||||
}
|
||||
|
||||
|
||||
func (dec *Decoder) compileSingle(remoteId typeId, rt reflect.Type) (engine *decEngine, err os.Error) {
|
||||
engine = new(decEngine)
|
||||
engine.instr = make([]decInstr, 1) // one item
|
||||
name := rt.String() // best we can do
|
||||
if !dec.compatibleType(rt, remoteId) {
|
||||
return nil, os.ErrorString("gob: wrong type received for local value " + name)
|
||||
return nil, os.ErrorString("gob: wrong type received for local value " + name + ": " + dec.typeString(remoteId))
|
||||
}
|
||||
op, indir := dec.decOpFor(remoteId, rt, name)
|
||||
ovfl := os.ErrorString(`value for "` + name + `" out of range`)
|
||||
|
@ -392,11 +392,22 @@ type wireType struct {
|
||||
mapT *mapType
|
||||
}
|
||||
|
||||
func (w *wireType) name() string {
|
||||
if w.structT != nil {
|
||||
return w.structT.name
|
||||
func (w *wireType) string() string {
|
||||
const unknown = "unknown type"
|
||||
if w == nil {
|
||||
return unknown
|
||||
}
|
||||
return "unknown"
|
||||
switch {
|
||||
case w.arrayT != nil:
|
||||
return w.arrayT.name
|
||||
case w.sliceT != nil:
|
||||
return w.sliceT.name
|
||||
case w.structT != nil:
|
||||
return w.structT.name
|
||||
case w.mapT != nil:
|
||||
return w.mapT.name
|
||||
}
|
||||
return unknown
|
||||
}
|
||||
|
||||
type typeInfo struct {
|
||||
|
Loading…
Reference in New Issue
Block a user