in ref.go [165:195]
func (d *Decoder) decRef(flag int32) (interface{}, error) {
var (
err error
tag byte
i int32
)
if flag != TAG_READ {
tag = byte(flag)
} else {
tag, _ = d.ReadByte()
}
switch {
case tag == BC_REF:
i, err = d.decInt32(TAG_READ)
if err != nil {
return nil, err
}
if len(d.refs) <= int(i) {
return nil, nil
// return nil, ErrIllegalRefIndex
}
// return the exact ref object, which maybe a _refHolder
return d.refs[i], nil
default:
return nil, perrors.Errorf("decRef illegal ref type tag:%+v", tag)
}
}