mirror of https://github.com/status-im/op-geth.git
accounts/abi: allow interface as the destination (#18490)
This commit is contained in:
parent
ad849c01d3
commit
a50b471b6b
|
@ -74,7 +74,7 @@ func mustArrayToByteSlice(value reflect.Value) reflect.Value {
|
||||||
func set(dst, src reflect.Value) error {
|
func set(dst, src reflect.Value) error {
|
||||||
dstType, srcType := dst.Type(), src.Type()
|
dstType, srcType := dst.Type(), src.Type()
|
||||||
switch {
|
switch {
|
||||||
case dstType.Kind() == reflect.Interface:
|
case dstType.Kind() == reflect.Interface && dst.Elem().IsValid():
|
||||||
return set(dst.Elem(), src)
|
return set(dst.Elem(), src)
|
||||||
case dstType.Kind() == reflect.Ptr && dstType.Elem() != derefbigT:
|
case dstType.Kind() == reflect.Ptr && dstType.Elem() != derefbigT:
|
||||||
return set(dst.Elem(), src)
|
return set(dst.Elem(), src)
|
||||||
|
|
|
@ -512,6 +512,11 @@ func TestMethodMultiReturn(t *testing.T) {
|
||||||
Int *big.Int
|
Int *big.Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newInterfaceSlice := func(len int) interface{} {
|
||||||
|
slice := make([]interface{}, len)
|
||||||
|
return &slice
|
||||||
|
}
|
||||||
|
|
||||||
abi, data, expected := methodMultiReturn(require.New(t))
|
abi, data, expected := methodMultiReturn(require.New(t))
|
||||||
bigint := new(big.Int)
|
bigint := new(big.Int)
|
||||||
var testCases = []struct {
|
var testCases = []struct {
|
||||||
|
@ -539,6 +544,16 @@ func TestMethodMultiReturn(t *testing.T) {
|
||||||
&[2]interface{}{&expected.Int, &expected.String},
|
&[2]interface{}{&expected.Int, &expected.String},
|
||||||
"",
|
"",
|
||||||
"Can unpack into an array",
|
"Can unpack into an array",
|
||||||
|
}, {
|
||||||
|
&[2]interface{}{},
|
||||||
|
&[2]interface{}{expected.Int, expected.String},
|
||||||
|
"",
|
||||||
|
"Can unpack into interface array",
|
||||||
|
}, {
|
||||||
|
newInterfaceSlice(2),
|
||||||
|
&[]interface{}{expected.Int, expected.String},
|
||||||
|
"",
|
||||||
|
"Can unpack into interface slice",
|
||||||
}, {
|
}, {
|
||||||
&[]interface{}{new(int), new(int)},
|
&[]interface{}{new(int), new(int)},
|
||||||
&[]interface{}{&expected.Int, &expected.String},
|
&[]interface{}{&expected.Int, &expected.String},
|
||||||
|
|
Loading…
Reference in New Issue