Fix: InterfaceValue wasnt' correctly unwrapped when passed to PackValue()

This commit is contained in:
moriyoshi 2010-06-27 01:32:37 +09:00 committed by Moriyoshi Koizumi
parent 5b544248bc
commit 0e82278cd5

View file

@ -521,7 +521,7 @@ func PackMap(writer io.Writer, value *reflect.MapValue) (n int, err os.Error) {
}
func PackValue(writer io.Writer, value reflect.Value) (n int, err os.Error) {
if value.Type() == nil { return PackNil(writer) }
if value == nil || value.Type() == nil { return PackNil(writer) }
switch _value := value.(type) {
case *reflect.BoolValue: return PackBool(writer, _value.Get())
case *reflect.UintValue: return PackUint64(writer, _value.Get())
@ -530,6 +530,12 @@ func PackValue(writer io.Writer, value reflect.Value) (n int, err os.Error) {
case *reflect.ArrayValue: return PackArray(writer, _value)
case *reflect.SliceValue: return PackArray(writer, _value)
case *reflect.MapValue: return PackMap(writer, _value)
case *reflect.InterfaceValue:
__value := reflect.NewValue(_value.Interface())
_, ok := __value.(*reflect.InterfaceValue)
if !ok {
return PackValue(writer, __value)
}
}
panic("unsupported type: " + value.Type().String())
}