File tree 2 files changed +16
-1
lines changed
2 files changed +16
-1
lines changed Original file line number Diff line number Diff line change @@ -74,7 +74,7 @@ func mustArrayToByteSlice(value reflect.Value) reflect.Value {
74
74
func set (dst , src reflect.Value ) error {
75
75
dstType , srcType := dst .Type (), src .Type ()
76
76
switch {
77
- case dstType .Kind () == reflect .Interface :
77
+ case dstType .Kind () == reflect .Interface && dst . Elem (). IsValid () :
78
78
return set (dst .Elem (), src )
79
79
case dstType .Kind () == reflect .Ptr && dstType .Elem () != derefbigT :
80
80
return set (dst .Elem (), src )
Original file line number Diff line number Diff line change @@ -512,6 +512,11 @@ func TestMethodMultiReturn(t *testing.T) {
512
512
Int * big.Int
513
513
}
514
514
515
+ newInterfaceSlice := func (len int ) interface {} {
516
+ slice := make ([]interface {}, len )
517
+ return & slice
518
+ }
519
+
515
520
abi , data , expected := methodMultiReturn (require .New (t ))
516
521
bigint := new (big.Int )
517
522
var testCases = []struct {
@@ -539,6 +544,16 @@ func TestMethodMultiReturn(t *testing.T) {
539
544
& [2 ]interface {}{& expected .Int , & expected .String },
540
545
"" ,
541
546
"Can unpack into an array" ,
547
+ }, {
548
+ & [2 ]interface {}{},
549
+ & [2 ]interface {}{expected .Int , expected .String },
550
+ "" ,
551
+ "Can unpack into interface array" ,
552
+ }, {
553
+ newInterfaceSlice (2 ),
554
+ & []interface {}{expected .Int , expected .String },
555
+ "" ,
556
+ "Can unpack into interface slice" ,
542
557
}, {
543
558
& []interface {}{new (int ), new (int )},
544
559
& []interface {}{& expected .Int , & expected .String },
You can’t perform that action at this time.
0 commit comments