Commit 6e0767bb authored by Russ Cox's avatar Russ Cox

reflect fixes

R=r
https://golang.org/cl/156104
parent 7fce5ad0
......@@ -569,6 +569,8 @@ func (t *StructType) NumField() int { return len(t.fields) }
// Same memory layouts, different method sets.
func toType(i interface{}) Type {
switch v := i.(type) {
case nil:
return nil
case *runtime.BoolType:
return (*BoolType)(unsafe.Pointer(v))
case *runtime.DotDotDotType:
......
......@@ -906,7 +906,10 @@ func setiface(typ *InterfaceType, x *interface{}, addr addr)
// Set assigns x to v.
func (v *InterfaceValue) Set(x Value) {
i := x.Interface();
var i interface{}
if x != nil {
i = x.Interface()
}
if !v.canSet {
panic(cannotSet)
}
......
......@@ -108,5 +108,11 @@ func setiface(typ *byte, x *byte, ret *byte) {
*(Eface*)ret = *(Eface*)x;
return;
}
if(((Eface*)x)->type == nil) {
// can assign nil to any interface
((Iface*)ret)->tab = nil;
((Iface*)ret)->data = nil;
return;
}
ifaceE2I((InterfaceType*)gettype(typ), *(Eface*)x, (Iface*)ret);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment